版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、問(wèn)題的提出,結(jié)構(gòu)體類型與結(jié)構(gòu)體變量,結(jié)構(gòu)體數(shù)組,結(jié)構(gòu)體與函數(shù),共用體,第,8,章,結(jié)構(gòu)體與共用體,8.1,問(wèn)題的提出,學(xué)號(hào),姓名,性別,入學(xué)時(shí)間,計(jì)算機(jī)原理,C,語(yǔ)言,編譯原理,操作系統(tǒng),1,令狐沖,男,2006,90,83,72,82,2,林平之,男,2006,78,92,88,78,3,岳靈珊,女,2006,89,72,98,66,4,任瑩瑩,女,2006,78,95,87,90,5,6,如果只存儲(chǔ)某班的某門課程的成績(jī),可使用一維數(shù),組;只存儲(chǔ)若干門課程的成績(jī),可用二維數(shù)組;對(duì)于,下表該如何組織數(shù)據(jù),采用什么存儲(chǔ)結(jié)構(gòu)?,int,studentId30 = 1,2,3,4,5,6;,char
2、,瑳摵湥乴浡孥?孝?筻,令狐沖,林平之,屻,岳靈珊,任瑩瑩,;,char,瑳摵湥卻硥?孝?筻,男,男,女,女,;,int,timeOfEnter30 = 2006,2006,2006,2006;,int,scoreComputer30 = 90,78,89,78;,int,scoreEnglish30 = 83,92,72,95;,int,scoreMath30 = 72,88,98,87;,int,scoreMusic30 = 82,78,66,90;,采用分散的一維數(shù)組結(jié)構(gòu),?,數(shù)據(jù)的內(nèi)存管理方式,90,78,89,78,83,92,72,95,72,88,98,87,82,78,66,9
3、0,1,2,3,4,令狐沖,林平之,岳靈珊,任瑩瑩,男,男,女,女,2006,2006,2006,2006,2000,4000,4E00,F010,10F0,EE00,CE00,6600,存儲(chǔ)學(xué)生信息的設(shè)想,建立一個(gè)長(zhǎng)度為,30,的數(shù)組,其中的每一個(gè)數(shù),組元素就是一個(gè)學(xué)生的學(xué)生考試信息,每一個(gè),數(shù)組元素的理想存儲(chǔ)結(jié)構(gòu)可為:,學(xué)號(hào),姓,名,性別,入學(xué),原理,C,編譯,OS,一個(gè)完整的變量,StudentId,StudentName,StudentSesx,TimeOfEnter,Score_1,Score_2,Score_3,Score_4,8.2,結(jié)構(gòu)體類型與結(jié)構(gòu)體變量,格式,struct,標(biāo)
4、識(shí)符,類型,1,域名,1,;,類型,2,域名,2,;,類型,n,域名,n,;,;,其中:標(biāo)識(shí)符是定義的結(jié)構(gòu)體類型名;,結(jié)構(gòu)體名,成員、域,一、結(jié)構(gòu)體的聲明,舉例,定義學(xué)生檔案的結(jié)構(gòu)體,struct,personnel,int,num,;,char,name10,;,char,sex,;,int,age,;,float,score,;,char,addr30,;,;,變量說(shuō)明,struct personnel,person,;,二、定義結(jié)構(gòu)體的變量,struct,類型,變量名,,,;,1,、先聲明類型后定義變量,struct,personnel,int,num;,char,name10;,cha
5、r,sex;,int,age;,float,score;,char,addr30;,;,struct personnel,stu1, stu2,;,2,、在聲明同時(shí)定義變量,struct,personnel,int,num;,char,name10;,char,sex;,int,age;,float,score;,char,addr30;,student1, student2,;,struct,personnel,int,num;,char,name10;,char,sex;,int,age;,float,score;,char,addr30;,;,struct personnel,stude
6、nt1,student2;,等價(jià),3,、直接定義結(jié)構(gòu)類型變量,struct,int,num;,char name10;,char sex;,int,age;,float score;,char addr30;,student1, student2,;,如:,struct date, int month,;,int day;,int year;,;,struct student, int,num;,char,name10;,struct,date,birthday,;,stu1;,4,、成員也可以是一個(gè)結(jié)構(gòu)體變量,num,name,birthday,month,day,year,5,、定義指向結(jié)
7、構(gòu)體的指針變量,格式,struct,結(jié)構(gòu)類型名,*,指針名;,舉例,struct student,*p, stu1,;,p=,指針,p,即指向結(jié)構(gòu)體變量,stu1,的首地址。,三、結(jié)構(gòu)體變量的引用,格式,結(jié)構(gòu)體變量名,.,域名,舉例,輸出學(xué)生檔案數(shù)據(jù),printf(%d,person,.,num,);,printf(%s,person,.,name,);,printf(%c,person,.,sex,);,printf(%d,person,.,age,);,printf(%f,person,.,score,);,printf(%s,person,.,addr,);,1,、圓點(diǎn)運(yùn)算符,2,、箭頭
8、運(yùn)算符,域表示,結(jié)構(gòu)指針名,域名,舉例,p,num,等價(jià)于,(*p),.,num,struct personnel *p, stu1;,p=,結(jié)構(gòu)體變量引用說(shuō)明,不能將一個(gè)結(jié)構(gòu)體變量作為一個(gè),整體,進(jìn)行輸入和輸出。下面是錯(cuò)誤的:,printf(%d,%s,%c,%d,%f,%sn,student1);,而應(yīng)按成員輸入和輸出。,printf(“%d,n”,student1.num);,printf(“%s,n”,);,如果成員本身又屬一個(gè)結(jié)構(gòu)體類型,,則要用若干個(gè)成員運(yùn)算符,一級(jí)一級(jí)地,找到最低一級(jí)的成員。只能對(duì)最低一級(jí),的成員進(jìn)行賦值、存取和運(yùn)算。,struct da
9、te,struct student,int month; int num;,int day; char name10,int year;,struct date birthday;,; student1,student2;,例如:,student1.num,student1.birthday.month,對(duì)結(jié)構(gòu)體變量的成員可以像普通,變量一樣進(jìn)行各種運(yùn)算。,可以引用結(jié)構(gòu)體變量成員的地址,,也可以引用結(jié)構(gòu)體變量的地址。,例如:,scanf(%x, ,printf(%x, ,思考題,?,struct,point,int,x;,int,y;,;,struct,rect,struct,point pt
10、1;,struct,point pt2;,;,?,struct,rect rt, *rp=,?,下面表達(dá)式哪些合法?,rt.pt1.x,(*rp).pt1.x,rp-pt1.x,rt-pt1.x,?,上面合法的表達(dá)式都是等價(jià)的嗎?,5,、結(jié)構(gòu)體變量的初始化,struct,personnel,long int num;,char,name10;,char,sex;,int,age;,char,addr30;,stu,=,89031, li san , m, 18, 123 beijing road ,;,8.3,結(jié)構(gòu)體數(shù)組,struct personnel,int,num;,char name1
11、0;,char sex;,int,age;,float score;,char addr30;,;,1,、聲明結(jié)構(gòu)體,2,、定義結(jié)構(gòu)體數(shù)組,格式,struct,personnel,int num;,char name10;,char sex;,int age;,float score;,char addr30;,;,struct personnel,stu3;,3,、初始化結(jié)構(gòu)體數(shù)組,struct personnel,stu3,=,10101,Li lin,m,18,87.5,C Beijing road,10102,Zhang li,f,19,99,X Shanghai road,10103
12、,Wang bin,m,20,78.5, zhongshan road,;,num,name,sex,age,score,addr,10101,Li lin,m,18,87.5,103 beijing road,10102,Zhang li,f,19,99,130 shanghai road,10104,Wang bin,m,20,78.5,26 zhongshan road,stu0,stu1,stu2,4,、結(jié)構(gòu)體數(shù)組和指針,struct personnel,stu,30,*p,;,p,=stu;,*p,?,stu0,*(p+1),?,stu1,*(p+2),?,stu2,*(p+3),?
13、,stu3,stu1.,num,?,(*(p+1).,num,?,(p+1),-,num,5,、結(jié)構(gòu)體類型應(yīng)用舉例:,(1),已知:,struct,sk,int a;,float b;,data, *p;,若有,p = ,則正確的引用,data,中成員,a,的方是:,A.,(*p).data.a B. (*p).a,C. p-data.a D. p.data.a,B,(2),讀程序,寫出運(yùn)行結(jié)果。,main(), struct,int x;,int y;,4,*p=s;,printf(“%d,%d,n”,+p,-x,(+p)-x);,4,3,8.4,結(jié)構(gòu)體與函數(shù),把結(jié)構(gòu)體傳遞給函數(shù)的方式有三種
14、:,1.,用結(jié)構(gòu)體的單個(gè)成員作參數(shù),在一般情況下,用單個(gè)成員作為,實(shí)參,給函,數(shù)傳遞參數(shù)與普通的值傳遞沒(méi)有分別,可看成,普通的實(shí)參,是單向值傳遞,在函數(shù)內(nèi)部對(duì)參,數(shù)進(jìn)行操作不影響結(jié)構(gòu)體的變化。,main(), struct number,int num1;,int num2;,num;,num.num1=5;,num.num2=4;,f(num.num1, num.num2);,.,.,.,void f(int m,int n),for(i=1;i=m;i+),for(j=1;j=n;j+),printf(“*”);,2,、用結(jié)構(gòu)體整體作為實(shí)參,要求,實(shí)參和形參的數(shù)據(jù)類型相同,(,單向值傳遞,
15、),舉例,struct date,int year;,int month;,int day;,;,void func(struct date p),p.year = 2000;,p.month = 5;,p.day = 22;,main(),struct date d;,d.year = 1999;,d.month = 4;,d.day = 23;,printf(“%d,%d,%d,n”,d.year, d.month, d.day);,func(d);,printf(“%d,%d,%d,n”,d.year, d.month, d.day);,3,、用指向結(jié)構(gòu)體的指針作為實(shí)參,要求,實(shí)參和形參
16、指向相同的數(shù)據(jù)類型。,舉例,struct date,int year;,int month;,int day;,;,void func(struct date *p),(*p).year = 2000;,(*p).month = 5;,(*p).day = 22;,main(),struct date date1,*d=,d-year = 1999;,d-month = 4;,d-day = 23;,printf(%d,%d,%dn,(*d).year, (*d).month, (*d).day);,func(d);,printf(%d,%d,%dn,d-year, d-month, d-da
17、y);,4,、,Typedef,的使用,給已定義的數(shù)據(jù)類型定義別名。,功,能,舉,例,typedef,int integer,;,typedef,struct student,stu,;,說(shuō)明,struct student,stu1, stu2;,等價(jià)于,stu,stu1,stu2;,使用別名時(shí),可不使用,struct,。,8.5,共用體,聯(lián)合體,什么是共用體?,是,C,語(yǔ)言提供的一種存儲(chǔ)共享的設(shè)施。,即將若干個(gè)名稱不同、類型不同的數(shù)據(jù),共,享同一存儲(chǔ)單元,。也就是使用覆蓋技術(shù),,幾個(gè)長(zhǎng)度不同的變量相互覆蓋。,一、共用體類型的定義,格式,union,共用體名,類型,1,成員,1,;,類型,2,
18、成員,2,;,類型,n,成員,n,;,變量序列,;,舉例,union,data,int,i,;,char,ch,;,float,f,; ;,變量序列是,可選項(xiàng)。,union,data,int,i,;,char,ch,;,float,f,; ,a,;,說(shuō)明,共用體所占存儲(chǔ)單元長(zhǎng)度是成員的最大者。,二、共用體與結(jié)構(gòu)體的區(qū)別,結(jié)構(gòu)體的每一個(gè)成員都占用自己的,存儲(chǔ)空間。,共用體的每個(gè)成員共享同一個(gè)存儲(chǔ),單元。,結(jié)構(gòu)體所占存儲(chǔ)空間的大小是所有,成員所占空間大小的總和。,共用體所占存儲(chǔ)單元的大小是所有,成員中占用空間最大的。,三、共用體類型數(shù)據(jù)的訪問(wèn),格式,變量名,.,成員名,舉例,a.i,引用共用體變量,a,中的整形變量,i,a.ch,引用共用體變量,a,中的字符變量,ch,a.f,引用共用體變量,a,中的實(shí)型變量,f,說(shuō)明,不能只引用共用體變量,例如:,printf(%d, a);,而應(yīng)是:,printf(%d, a.i); ,printf(%c, a.ch); ,printf(%f, a.f); ,四、共用體類型數(shù)據(jù)的特點(diǎn),1.,不能把共用體變量作為
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- DB36-T 1351-2020 公路水運(yùn)工程BIM技術(shù)應(yīng)用管理導(dǎo)則
- 2024年泰順縣一級(jí)造價(jià)工程師《土建計(jì)量》巔峰沖刺試卷含解析
- 2024年企業(yè)安全生產(chǎn)月安全基礎(chǔ)知識(shí)試題與答案
- 語(yǔ)文園地八 教學(xué)設(shè)計(jì)-2023-2024學(xué)年語(yǔ)文五年級(jí)下冊(cè) 統(tǒng)編版
- 第九章 家庭用電 全章高頻考點(diǎn)專訓(xùn) 教學(xué)設(shè)計(jì)-2024-2025學(xué)年教科版物理九年級(jí)下冊(cè)
- 拋物線的光學(xué)性質(zhì) 教學(xué)設(shè)計(jì)
- Module 8 Unit 2教學(xué)設(shè)計(jì)2024-2025學(xué)年外研版英語(yǔ)八年級(jí)上冊(cè)
- Unit 1 You and Me Section B(1a-1d) 教案 2024-2025學(xué)年人教版英語(yǔ)七年級(jí)上冊(cè)
- 2024-2025學(xué)年高中數(shù)學(xué)第一章統(tǒng)計(jì)1.3統(tǒng)計(jì)圖表課時(shí)作業(yè)含解析北師大版必修31
- 新能源汽車智能化技術(shù)賽項(xiàng)考試題庫(kù)-下(多選、判斷題)
- Part 6 Unit 8 Green Earth 教案-【中職專用】高一英語(yǔ)精研課堂(高教版2021·基礎(chǔ)模塊2)
- 攝像基礎(chǔ)教學(xué)課程標(biāo)準(zhǔn)
- 自我肯定與社會(huì)肯定誰(shuí)更重要反方辯論稿
- 傳感器故障識(shí)別
- 高標(biāo)準(zhǔn)基本農(nóng)田監(jiān)理規(guī)劃
- 國(guó)開(kāi)2023秋《人文英語(yǔ)4》第1-4單元作文練習(xí)參考答案
- 旅游景區(qū)安全保衛(wèi)標(biāo)準(zhǔn)化管理工作手冊(cè)
- 膽囊結(jié)石科普宣教
- 機(jī)動(dòng)車檢測(cè)站儀器設(shè)備日常維護(hù)和保養(yǎng)作業(yè)指導(dǎo)書
- 玻璃鋼船體膠衣施工方案
- 2022年中建交通建設(shè)集團(tuán)有限公司校園招聘考試試題及答案解析
評(píng)論
0/150
提交評(píng)論