第十一章 結(jié)構(gòu)體與共同體 V2.ppt_第1頁(yè)
第十一章 結(jié)構(gòu)體與共同體 V2.ppt_第2頁(yè)
第十一章 結(jié)構(gòu)體與共同體 V2.ppt_第3頁(yè)
第十一章 結(jié)構(gòu)體與共同體 V2.ppt_第4頁(yè)
第十一章 結(jié)構(gòu)體與共同體 V2.ppt_第5頁(yè)
已閱讀5頁(yè),還剩70頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、結(jié)構(gòu)體與共同體,數(shù)據(jù)類型分類,數(shù)據(jù)類型,基本類型,構(gòu)造類型,指針類型,空類型,數(shù)組類型,結(jié)構(gòu)體類型,共同體類型,基本類型數(shù)據(jù)在內(nèi)存中開辟一定的空間,與其他變量沒有關(guān)系。 char c1,c2; int i,j; float f;,c1,c2,i,j,f,數(shù)組數(shù)據(jù)開辟一段連續(xù)的空間,以存放一組類型相同的數(shù)據(jù)。這些類型相同的數(shù)組元素之間有一定的聯(lián)系。 int a3;,a0,而有一些不同類型數(shù)據(jù)間存在著聯(lián)系 如一個(gè)學(xué)生的信息有: 學(xué)號(hào)、姓名、性別、年齡 顯然,這些信息屬于不同的數(shù)據(jù)類型,不能用數(shù)組存放。 因?yàn)閿?shù)組內(nèi)元素類型一致。,想要有聯(lián)系的存放一個(gè)學(xué)生的信息 就要將這些不同類型的數(shù)據(jù)存放到某一個(gè)特

2、殊的數(shù)據(jù)類型中 結(jié)構(gòu)體,C語(yǔ)言允許用戶自己指定這樣一種數(shù)據(jù)結(jié)構(gòu),稱為“結(jié)構(gòu)體”(structure) 結(jié)構(gòu)體(structure)是一種數(shù)據(jù)類型,把互相聯(lián)系的不同類型的數(shù)據(jù)組合成一個(gè)有機(jī)的整體。,相當(dāng)于用戶自己定義了一種數(shù)據(jù)類型。 C沒有提供這種現(xiàn)成的數(shù)據(jù)類型,必須在程序中建立所需的結(jié)構(gòu)體類型。,任務(wù):建立一個(gè)這樣的數(shù)據(jù)類型 根據(jù)這種類型定義的每個(gè)變量要能夠?qū)W(xué)生的學(xué)號(hào)、姓名、性別、年齡、成績(jī)、地址都存放進(jìn)去,定義一個(gè)結(jié)構(gòu)體,struct student int num; /* 學(xué)號(hào) */ char name20; /* 姓名 */ char sex; /* 性別 */ int age; /*

3、 年齡 */ float score; /* 成績(jī) */ char addr30; /* 地址 */ ;,struct student int num; /* 學(xué)號(hào) */ char name20; /* 姓名 */ char sex; /* 性別 */ int age; /* 年齡 */ float score; /* 成績(jī) */ char addr30; /* 地址 */ ;,聲明結(jié)構(gòu)體類型時(shí)所必須使用的關(guān)鍵字,結(jié)構(gòu)體類型名,struct student int num; /* 學(xué)號(hào) */ char name20; /* 姓名 */ char sex; /* 性別 */ int age; /

4、* 年齡 */ float score; /* 成績(jī) */ char addr30; /* 地址 */ ;,成員類型,成員名,結(jié)構(gòu)體中的每一項(xiàng)數(shù)據(jù)稱為結(jié)構(gòu)體“成員”,struct student int num; /* 學(xué)號(hào) */ char name20; /* 姓名 */ char sex; /* 性別 */ int age; /* 年齡 */ float score; /* 成績(jī) */ char addr30; /* 地址 */ ;,struct student int num; /* 學(xué)號(hào) */ char name20; /* 姓名 */ char sex; /* 性別 */ int a

5、ge; /* 年齡 */ float score; /* 成績(jī) */ char addr30; /* 地址 */ ;,struct student int num; /* 學(xué)號(hào) */ char name20; /* 姓名 */ char sex; /* 性別 */ int age; /* 年齡 */ float score; /* 成績(jī) */ char addr30; /* 地址 */ ;,struct student int num; /* 學(xué)號(hào) */ char name20; /* 姓名 */ char sex; /* 性別 */ int age; /* 年齡 */ float score

6、; /* 成績(jī) */ char addr30; /* 地址 */ ;,struct student int num; /* 學(xué)號(hào) */ char name20; /* 姓名 */ char sex; /* 性別 */ int age; /* 年齡 */ float score; /* 成績(jī) */ char addr30; /* 地址 */ ;,struct student int num; /* 學(xué)號(hào) */ char name20; /* 姓名 */ char sex; /* 性別 */ int age; /* 年齡 */ float score; /* 成績(jī) */ char addr30;

7、/* 地址 */ ;,最后的分號(hào)不能省略!,與此同時(shí),名字叫做student的結(jié)構(gòu)體由6個(gè)成員組成,struct student,num,name20,sex,age,score,addr30,int,它們共同組成一個(gè)新的數(shù)據(jù)類型 struct student,6個(gè)成員有各自的類型,與數(shù)組不同的是結(jié)構(gòu)體中的成員或叫做結(jié)構(gòu)體中的元素可以是不同類型的,定義結(jié)構(gòu)體變量,上面是對(duì)一個(gè)結(jié)構(gòu)體類型的定義。 相當(dāng)于定義了一個(gè)用戶自己的存放數(shù)據(jù)的模型,并沒有具體的數(shù)據(jù)。 struct student的效力和int,char,float效力一樣,同屬于數(shù)據(jù)類型。,就是說,我們現(xiàn)在有了一個(gè)全新的數(shù)據(jù)類型struc

8、t student 這個(gè)類型的數(shù)據(jù)應(yīng)該是什么樣的,應(yīng)該包括什么,要占多少空間,是由我們自己來(lái)定的 struct student,int,char,float,想使用int這種類型的數(shù)據(jù),就要在程序中定義一個(gè)整型變量。 int i; 要想存放結(jié)構(gòu)體類型的數(shù)據(jù),就要在程序中定義這種類型的“結(jié)構(gòu)體變量”。 struct student stu1;,在前面已經(jīng)定義的結(jié)構(gòu)體struct student的基礎(chǔ)上,定義兩個(gè)結(jié)構(gòu)體變量。 struct student student1,student2;,變量類型,變量名稱,int i,j;,變量類型,變量名稱,struct student student1;

9、,int a10;,共占內(nèi)存字節(jié):,2x10=20,共占內(nèi)存字節(jié):,?,2,1x20,1,2,4,1x30,59,struct student int num; char name20; char sex; int age; float score; char addr30; ; struct student student1,student2;,struct student int num; char name20; char sex; int age; float score; char addr30; student1,student2;,定義結(jié)構(gòu)體同時(shí)定義變量,先定義結(jié)構(gòu)體類型后定義變

10、量,結(jié)構(gòu)體變量的兩種定義方式,幾點(diǎn)注意: struct student不是一個(gè)變量, 是一個(gè)數(shù)據(jù)類型! student1,student2才是變量名! 定義類型時(shí)不開辟內(nèi)存,只有在定義變量后系統(tǒng)才分配內(nèi)存空間。,任務(wù):建立一個(gè)用以存放日期的結(jié)構(gòu)體 包括年、月、日,struct date int year; int month; int day; ;,建立一個(gè)用以存放產(chǎn)品信息的結(jié)構(gòu)體 包括產(chǎn)品名、產(chǎn)品代號(hào)、價(jià)格,struct product char name20; int number; float price; ;,建立一個(gè)用以存放圖書信息的結(jié)構(gòu)體 包括書名、書號(hào)、作者、出版社,struct

11、 book char name20; int number; char author20; char publish20; ;,建立一個(gè)用以存放空間某個(gè)點(diǎn)的結(jié)構(gòu)體 包括三個(gè)點(diǎn)的坐標(biāo),struct point float x; float y; float z; ;,建立一個(gè)結(jié)構(gòu)體,用以在空間中確定某個(gè)球 球心和半徑,struct globe float x; float y; float z; float r; ;,結(jié)構(gòu)體中的成員可以單獨(dú)使用,作用與地位相當(dāng)于普通變量。 成員名可以與程序中變量名相同,互不干擾。 一個(gè)結(jié)構(gòu)體中的成員也可以是另外一個(gè)結(jié)構(gòu)體變量。,建立一個(gè)結(jié)構(gòu)體,用以在空間中確定某

12、個(gè)球體 球心和半徑,struct globe float x; float y; float z; float r; ;,struct point float x; float y; float z; ;,struct point p1;,struct date int month; int day; int year; ; struct student int num; char name20; char sex; int age; struct date birthday; char addr30; student1, student2;,另外一個(gè)結(jié)構(gòu)體變量,num,name20,sex,

13、age,birthday,addr30,month,day,year,結(jié)構(gòu)體變量引用,方式:結(jié)構(gòu)體變量.成員名 student1.num student1.num=1001; 用這種方式可以訪問結(jié)構(gòu)體中的成員。 這些成員可以當(dāng)做普通變量一樣使用,在程序中進(jìn)行各種合法的運(yùn)算。,struct student student1;,student1.num,student1.age,student1.addr,,struct student student1;,struct date birthday;,student1.birthday.month,student1.bir

14、thday.year,main() struct student int num; char name20; char sex; int age; float score; char addr30; ; struct student student1;,scanf(“%d”, ,EXP1100.C,結(jié)構(gòu)體變量初始化,可以在定義時(shí)指定初始值 struct student long int num; char name20; char sex; char addr20; a=89031,Li Lin,M,123 Beijing Road;,EXP1101.C,struct student long

15、 int num=89031; char name20=Li Lin; char sex=M; char addr20=123 Beijing Road; a;,建立一個(gè)結(jié)構(gòu)體變量(當(dāng)然在這之前要先進(jìn)行結(jié)構(gòu)體的聲明),用以存放一個(gè)球員的姓名、號(hào)碼、年齡、身高、體重、以及在季后賽進(jìn)總得分、籃板和助攻數(shù)。 分別從鍵盤輸入這些信息到結(jié)構(gòu)體變量中 再將這些信息輸出,main() struct off int score; int reboard; int assit; ; struct player char name20; int num; int age; float height; float

16、weight; struct off p1; ; struct player player1;,scanf(%s,); scanf(%d,printf(%sn,); printf(%dn,player1.num); printf(%dn,player1.age); printf(%fn,player1.height); printf(%fn,player1.weight); printf(%dn,player1.p1.score); printf(%dn,player1.p1.reboard); printf(%dn,player1.p1.ass

17、it); getch(); printf(nn);,結(jié)構(gòu)體數(shù)組,首先,是個(gè)數(shù)組。 也是由一些元素組成的。 與以前的數(shù)值型數(shù)組不同的是結(jié)構(gòu)體數(shù)組的每個(gè)元素都是一個(gè)結(jié)構(gòu)體類型的數(shù)據(jù)。 數(shù)組內(nèi)數(shù)據(jù)類型要一致指的是數(shù)值型數(shù)組。,struct student int num; char name20; char sex; int age; float score; char addr30; ; struct student stu3;,結(jié)構(gòu)體數(shù)組定義,結(jié)構(gòu)體類型的定義,定義這種結(jié)構(gòu)體類型的數(shù)組,10101,10102,10104,Li Lin,Zhang Fun,Wang Min,M,M,F,18,19

18、,20,87.5,99,78.5,103 Beijing Road,130 Shanghai Road,1010 Zhongshan Road,stu0,stu1,stu2,num,name,sex,age,score,addr,stu0,stu1,stu2,各個(gè)元素在內(nèi)存中連續(xù)存放,存放這樣一個(gè)結(jié)構(gòu)體數(shù)組用多少個(gè)字節(jié)連續(xù)的內(nèi)存地址,?,3x59=177,結(jié)構(gòu)體數(shù)組初始化,struct student int num; char name20; char sex; int age; float score; char addr30; stu3=10101,Li Lin,M, 18,87.5,1

19、03 Bejing Road“, 10102,Zhang Fun,M,19,99,130 Shanghai Roaad, 10104,Wang Min,F,20,78.5,1010 Zhongshan Road;,二維數(shù)組初始化 int a33=1,2,3,4,5,6,7,8,9,要求:建立一個(gè)結(jié)構(gòu)體數(shù)組,數(shù)組元素4個(gè),結(jié)構(gòu)體成員包括:學(xué)號(hào)、姓名、成績(jī)。,struct student int num; char name20; float score; ; struct student stu4;,剛剛定義的這個(gè)結(jié)構(gòu)體數(shù)組,在內(nèi)存中是怎么放的?,stu,結(jié)構(gòu)體數(shù)組程序舉例,用結(jié)構(gòu)體數(shù)組存放三個(gè)

20、點(diǎn)的坐標(biāo)。 計(jì)算由這三個(gè)點(diǎn)所組成的三角型的周長(zhǎng)。 并判斷這個(gè)三角形是否為等腰或等邊三角形。,struct point float x; float y; ; struct triangle struct point p3; float a; float b; float c; s;,p3,定義了一個(gè)變量s。這個(gè)變量是由這些內(nèi)容組成的,它在內(nèi)存中的存儲(chǔ)方式是這樣的:,int i; for(i=0;i3;i+) scanf(%f,結(jié)構(gòu)體數(shù)組程序舉例,對(duì)候選人得票的統(tǒng)計(jì)程序。 設(shè)有三個(gè)候選人,每次輸入一個(gè)得票的候選人的名字,要求最后輸出各候選人得票結(jié)果。,EXP1102.C,#include std

21、io.h #include string.h struct person char name20; int count; leader3=Li,0,Zhang,0,Fun,0;,main() int i,j; char leader_name20; for(i=1;i=10;i+) scanf(%s,leader_name); for(j=0;j3;j+) if(strcmp(leader_name,)=0) leaderj.count+; ,for(i=0;i3;i+) printf(%5s:%dn, ,leaderi.count); getc

22、h(); printf(nn); ,指向結(jié)構(gòu)體數(shù)據(jù)的指針變量,結(jié)構(gòu)體變量指針就是該變量所占的內(nèi)存段的內(nèi)存起始地址。 結(jié)構(gòu)體變量指針可以用來(lái)指向結(jié)構(gòu)體數(shù)組中的元素。這些元素都是結(jié)構(gòu)體。 指向的是整個(gè)結(jié)構(gòu)體,而不是結(jié)構(gòu)體內(nèi)的某個(gè)成員。,struct student int num; char name20; float score; ;,int a4; int *p;,struct student stu4; struct student *p;,int a4; int *p;,p=a;,struct student stu4; struct student *p;,p=stu;,p+;,?,p=

23、p+2;,?,stu3.num,P,?,(*p).name,?,(*p).name,p=p+;,P,p=p+;,P,p-score,p-score,指向?,例、輸入4個(gè)學(xué)生的學(xué)號(hào)、姓名、成績(jī),將成績(jī)最高的學(xué)生的所有信息輸出。 要用結(jié)構(gòu)體數(shù)組、結(jié)構(gòu)體數(shù)組指針 步驟: 定義結(jié)構(gòu)體及要應(yīng)用的變量 輸入4個(gè)學(xué)生的數(shù)據(jù) 比較并找到成績(jī)最好的學(xué)生 將這個(gè)學(xué)生的所有信息輸出,struct student int num; char name20; float score; ;,main() struct student int num; char name20; float score; ; struct student stu4; struct student *p; int i

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論