版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、CC+語言程序設(shè)計,教師:張金蘭 TelEmail: Office:HA301,第十一章 結(jié)構(gòu)體與共用體,主要內(nèi)容,三個定義:結(jié)構(gòu)體、結(jié)構(gòu)體類型、結(jié)構(gòu)體類型變量。 結(jié)構(gòu)體類型變量的靜態(tài)、動態(tài)初始化。 結(jié)構(gòu)體類型的嵌套及其引用。 結(jié)構(gòu)體的自引用的定義。 結(jié)構(gòu)體類型作為函數(shù)參數(shù)。,三個定義,結(jié)構(gòu)體 結(jié)構(gòu)體類型 結(jié)構(gòu)體類型變量,結(jié)構(gòu)體定義,是一種由程序員自行定義的構(gòu)造類型; 是一個或多個類型不一定相同的變量的集合。 如通訊錄-姓名、電話、地址、郵政編碼; 日期-年、月、日; 學(xué)生信息-學(xué)號、姓名、性別、年齡;,結(jié)構(gòu)體類型,語法結(jié)構(gòu): struct 結(jié)構(gòu)體名 數(shù)據(jù)類型 成員名
2、; 數(shù)據(jù)類型 成員名; 數(shù)據(jù)類型 成員名; ; 如果結(jié)構(gòu)體名省略,則被稱為無名結(jié)構(gòu)類型。 意義: (1)劃定了數(shù)據(jù)的界限; (2)確定了該結(jié)構(gòu)體在內(nèi)存所占空間大小。所占內(nèi)存空間大小為各 成員在內(nèi)存所占字節(jié)數(shù)的總和。,請寫出下列程序的運行結(jié)果,main() struct student long num; char name20; char sex; int age; ; printf(%dn,sizeof(struct student); getch();,27,;,三個定義的區(qū)別,結(jié)構(gòu)體-集合(用戶理解) 結(jié)構(gòu)體類型-類型(內(nèi)存空間) 結(jié)構(gòu)體類型變量-變量(編程者使用),結(jié)構(gòu)體類型變量的定義
3、1,傳統(tǒng)的方法: struct 結(jié)構(gòu)體名 結(jié)構(gòu)變量名;,struct student long num; char name20; char sex; int age; ; struct student stu1,stu2;,結(jié)構(gòu)體類型變量的定義,特色: struct 結(jié)構(gòu)類型名 類型一 成員1; 類型二 成員2; 類型三 成員3; 變量表;,struct student long num; char name20; char sex; int age; stu1,stu2;,結(jié)構(gòu)體變量的類型及其靜態(tài)初始化,結(jié)構(gòu)體基本變量; struct student stu1=10001,”章敬”,男,2
4、3, stu2=10002,”趙四”,女,22; 結(jié)構(gòu)體數(shù)組變量; struct student stu2=10001,”章敬”,男,23, 10002,”趙四”,女,22; 結(jié)構(gòu)體指針變量; struct student *p=,結(jié)構(gòu)體類型變量成員的訪問1,結(jié)構(gòu)體基本變量; struct student stu1=10001,”章敬”,男,23, stu2=10002,”趙四”,女,22; 語法格式:結(jié)構(gòu)體變量名.結(jié)構(gòu)成員名 stu1.num=10001; =“章敬”; stu2.sex=女; stu2.age=22;,結(jié)構(gòu)體類型變量成員的訪問2,結(jié)構(gòu)體數(shù)組變量; stru
5、ct student stu1=10001,”章敬”,男,23, stu2=10002,”趙四”,女,22; 語法格式:結(jié)構(gòu)體數(shù)組元素名.結(jié)構(gòu)成員名 stu0.num=10001; =“章敬”; stu1.sex=女; stu1.age=22;,結(jié)構(gòu)體類型變量成員的訪問3,struct student stu1=10001,”章敬”,男,23, stu2=10002,”趙四”,女,22; 結(jié)構(gòu)體指針變量; struct student *p=,結(jié)構(gòu)體基本變量的動態(tài)初始化,struct date int year,month,day;d; scanf(“%d”,結(jié)構(gòu)體數(shù)組變量的
6、動態(tài)初始化,struct student char num6,name8; int score; stu3; for(i=0;i3;i+) printf(“”ninput score of student %dn”,i+1); scanf(“%s”,stui.num,); scanf(“%d”, ,結(jié)構(gòu)體指針變量的動態(tài)初始化,struct date int year,month,day;d,*p; P= -優(yōu)先級高于 int day; int year; ; struct student int num;char name20; char sex;int age; struc
7、t date birthday; char addr30; student1,student2;,birthday,struct date int month; int day; int year; ; struct student int num;char name20; char sex;int age; struct date *p; char addr30; student1,student2;,結(jié)構(gòu)體嵌套的引用,struct date int month,day,year; struct student int num;char name20; char sex;int age; s
8、truct date d1; char addr30; student1=1003,”張三”,m,25,1985,10,15,”廣東珠?!? stu1.num =1003; S=“張三”; stu1.d1.year=1985; stu1.d1.month=10;stu1.d1.day=15;,main() struct date int year,month,day; struct student int num;char name20;char sex;int age; struct date d1; char addr30; stu1=1003,ZHANG SAN,m,25
9、,1985,10,15,GDZHUHAI; printf(xuehao-%dn,stu1.num); printf(name-%sn,); printf(sex-%cn,stu1.sex); printf(age-%dn,stu1.age); printf(birth-%d-%d-%dn,stu1.d1.year,stu1.d1.month,stu1.d1.day); printf(addr-%sn,stu1.addr); getch(); ,結(jié)構(gòu)體的自引用(了解,不做要求),在結(jié)構(gòu)體的定義中包含指向該結(jié)構(gòu)自身的指針。 Struct node int num; struct
10、node *p; ,結(jié)構(gòu)體類型作為函數(shù)參數(shù),#include struct student long num; char name20,sex; int age; void prt(struct student stu) printf(%ldn%sn%cn%dn,stu.num,,stu.sex,stu.age); main() struct student stud; stud.num=200301001; strcpy(,wangtao); stud.sex=M; stud.age=21; prt(stud); getch(); ,練習(xí),第281頁 第4-
11、15題,18題。 第280頁 第4-5題。 第287頁 第24題,共用體,和結(jié)構(gòu)體類型一樣,只是關(guān)鍵字為union 不同的是: 各成員變量共同占用同一段內(nèi)存空間。所占空間大小為占內(nèi)存空間最大的成員變量長度。運行時,不同成員的存放是從其起始地址開始,到自己長度為止。 在任何同一時刻,union內(nèi)存空間中只存放一個當(dāng)前正在操作的成員,原來的成員會被后來的成員值覆蓋。,第279頁 中第1題。 第281頁中低2-3題 第285頁 中第1923題。,結(jié)構(gòu)體的編程,Struct aChar name100,sex; 成員為字符和字符串的輸入: gets(); scanf(“%ls,編程練
12、習(xí)1,職工數(shù)據(jù)包括:職工號、職工姓名、性別、年齡、工資、地址。為其定義一個結(jié)構(gòu)體變量,對該變量,從鍵盤輸入所需的具體數(shù)據(jù),然后通過printf函數(shù)顯示出來。,定義結(jié)構(gòu)體類型及其變量,#define A 20 #define B 80 struct worker long number; char nameA,sex; int age;long money; char addressB; ; struct worker wor1;,動態(tài)初始化,printf(Please input the number, name, sex,age,money and address: n); scanf(%l
13、d,結(jié)構(gòu)體變量的各成員數(shù)值的輸出,printf(“%ld,%s,%c,”,wor1.number,,wor1.sex); printf(“%d,%ld,%s”,wor1.age,wor1.money,wor1.address);,編程練習(xí)2,有10個學(xué)生,每個學(xué)生的數(shù)據(jù)包括學(xué)號、姓名、3門課的成績,從鍵盤輸入10個學(xué)生數(shù)據(jù),要求輸出3門課程總平均成績,以及最高分的學(xué)生的數(shù)據(jù)(包括學(xué)號、姓名、3門課程成績、平均分?jǐn)?shù))。,結(jié)構(gòu)體類型定義,#define A 20 #define B 80 #define C 10 struct student long number; char
14、nameB; int scores1,scores2,scores3,average; ; 結(jié)構(gòu)體類型數(shù)組變量定義 struct student stuC;,結(jié)構(gòu)體數(shù)組變量動態(tài)初始化,for(i=0;iC;i+) scanf(%ld, ,輸出結(jié)構(gòu)體數(shù)組值,for(i=0;iC;i+) Printf(“%dn”,i) print(“number:%ldn“,stui.number) puts(); prinf(“ncscores:%d,%d,%d“,stui.scores1,stui.scores2,stui.scores3); ,求平均值,for(i=0;iC;i+) stu
15、i.average=(stui.scores1+stui.scores2+stui.scores3)/3;,求最大值,max=0; for(j=1;jC;j+) if(stumax.averagestuj.average) max=j; for(k=0,i=1;kC;k+,i=k+1) /*k是下標(biāo)值,從0開始.i是順序號,從1開始*/ printf(nThe number %d average is %d,i,stuk.average); printf(n The max is student %d: n,max+1); printf(name scores1 scores2 scores3
16、 averagen); printf(%s ,); printf(%d %d %d %d, stumax.scores1,stumax.scores2, stumax.scores3,stumax.average);,編程練習(xí)3,輸入20本書的名稱、單價、作者、出版社,按書名進(jìn)行排序和輸出。,定義結(jié)構(gòu)體類型,struct book char bookname40; float price; char author10; char press40; ;,定義結(jié)構(gòu)體變量,并靜態(tài)初始化,struct book bookarray4= computer fundamental,2
17、4.0,gaolin,higher education, adfr fundamental,24.0,gaolin,higher education, dfcomputer fundamental,24.0,gaolin,higher education, 23computer fundamental,24.0,gaolin,higher education;,定義結(jié)構(gòu)體變量,并動態(tài)初始化,struct book bookarray4; for(i=0;i4;i+) gets(bookarrayi.bookname); scanf(%f, ,使用冒泡法排序,struct book temp; int i,j,n; n=4; for(i=0;i0) temp=bookarrayj-1; bookarrayj-1=bookarr
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 未來五年旅游健身娛樂企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級戰(zhàn)略分析研究報告
- 未來五年梭子蟹企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級戰(zhàn)略分析研究報告
- 未來五年糜子企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級戰(zhàn)略分析研究報告
- 未來五年鮮、冷藏鵝肉企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級戰(zhàn)略分析研究報告
- 未來五年鐵路車輛修理和維護(hù)企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級戰(zhàn)略分析研究報告
- 未來五年多聯(lián)組合虎鉗企業(yè)ESG實踐與創(chuàng)新戰(zhàn)略分析研究報告
- 2026年挖礦機(jī)托管合同
- 三年級英語語法重點專項測試
- 敬畏技術(shù)安全的IT系統(tǒng)運維標(biāo)準(zhǔn)指南
- 中級會計資格考試復(fù)習(xí)題庫
- Roland羅蘭樂器AerophoneAE-20電吹管ChineseAerophoneAE-20OwnersManual用戶手冊
- 2025年保安員資格考試題目及答案(共100題)
- 2024年中國螢石礦行業(yè)調(diào)查報告
- 黨群工作部室部管理制度
- 2025至2030年中國兔子養(yǎng)殖行業(yè)市場現(xiàn)狀調(diào)查及投資方向研究報告
- 委外施工安全試題及答案
- DBT29-320-2025 天津市建筑工程消能減震隔震技術(shù)規(guī)程
- 產(chǎn)品技術(shù)維護(hù)與保養(yǎng)手冊
- 2024年國家電網(wǎng)招聘之電工類考試題庫(突破訓(xùn)練)
- 中建公司建筑機(jī)電設(shè)備安裝工程標(biāo)準(zhǔn)化施工手冊
- 心臟科醫(yī)生在心血管疾病治療及介入手術(shù)方面的總結(jié)
評論
0/150
提交評論