第九章 結(jié)構(gòu)體與鏈表_第1頁(yè)
第九章 結(jié)構(gòu)體與鏈表_第2頁(yè)
第九章 結(jié)構(gòu)體與鏈表_第3頁(yè)
第九章 結(jié)構(gòu)體與鏈表_第4頁(yè)
第九章 結(jié)構(gòu)體與鏈表_第5頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第九章第九章 結(jié)構(gòu)體與鏈表結(jié)構(gòu)體與鏈表結(jié)構(gòu)體概述結(jié)構(gòu)體概述 結(jié)構(gòu)體結(jié)構(gòu)體 結(jié)構(gòu)體是結(jié)構(gòu)體是一種構(gòu)造數(shù)據(jù)類(lèi)型一種構(gòu)造數(shù)據(jù)類(lèi)型 用途:把不同類(lèi)型的數(shù)據(jù)組合成一個(gè)整體用途:把不同類(lèi)型的數(shù)據(jù)組合成一個(gè)整體-自定義數(shù)據(jù)自定義數(shù)據(jù)類(lèi)型類(lèi)型 結(jié)構(gòu)體類(lèi)型定義結(jié)構(gòu)體類(lèi)型定義struct 結(jié)構(gòu)體名結(jié)構(gòu)體名 類(lèi)型標(biāo)識(shí)符類(lèi)型標(biāo)識(shí)符 成員名成員名1; 類(lèi)型標(biāo)識(shí)符類(lèi)型標(biāo)識(shí)符 成員名成員名2; .;成員類(lèi)型可以是成員類(lèi)型可以是基本型或構(gòu)造型基本型或構(gòu)造型struct是是關(guān)鍵字關(guān)鍵字,不能省略不能省略合法標(biāo)識(shí)符合法標(biāo)識(shí)符可省可省:無(wú)名結(jié)構(gòu)體無(wú)名結(jié)構(gòu)體 定義結(jié)構(gòu)體類(lèi)型,描述下列數(shù)據(jù)定義結(jié)構(gòu)體類(lèi)型,描述下列數(shù)據(jù) (1) (1)

2、學(xué)生情況學(xué)生情況: : 包含學(xué)生的學(xué)號(hào)、包含學(xué)生的學(xué)號(hào)、 姓名、姓名、 性別、性別、 年年齡、齡、C C語(yǔ)言課程成績(jī)語(yǔ)言課程成績(jī): :struct studentint no; /*學(xué)號(hào)學(xué)號(hào)*/ char name10; /*姓名姓名*/ char sex; /*性別性別*/ int age; /*年齡年齡*/ float score; /*C成績(jī)成績(jī)*/; /*注:注:;不能省不能省*/結(jié)構(gòu)體類(lèi)型定義描述結(jié)構(gòu)結(jié)構(gòu)體類(lèi)型定義描述結(jié)構(gòu)的組織形式的組織形式, ,不分配內(nèi)存不分配內(nèi)存如考慮如考慮1010門(mén)課程成績(jī),門(mén)課程成績(jī), 加上總成績(jī)與平均成績(jī),加上總成績(jī)與平均成績(jī),可作如下定義可作如下定義:

3、: struct studentint no; /*學(xué)號(hào)學(xué)號(hào)*/ char name10; /*姓名姓名*/ char sex; /*性別性別*/ int age; /*年齡年齡*/ float score10; /*10門(mén)課程成績(jī)門(mén)課程成績(jī)*/ float tcj, acj; /*總成績(jī),總成績(jī), 平均成績(jī)平均成績(jī)*/; 定義結(jié)構(gòu)體類(lèi)型,描述下列數(shù)據(jù)定義結(jié)構(gòu)體類(lèi)型,描述下列數(shù)據(jù) (2)(2)個(gè)人數(shù)據(jù)個(gè)人數(shù)據(jù): : 包含姓名、性別、年齡、身高、體重、包含姓名、性別、年齡、身高、體重、住址住址: :struct personchar name20; /*姓名姓名*/ char sex; /*性別

4、性別*/ int age; /*年齡年齡*/ float height; /*身高身高*/ float weight; /*體重體重*/ char addr50; /*住址住址*/; (3)(3)日期結(jié)構(gòu)體類(lèi)型包括日期結(jié)構(gòu)體類(lèi)型包括年、月、日年、月、日: :struct dateint year; /*年年*/month; /*月月*/day; /*日日*/;(4)(4)如職工信息結(jié)構(gòu)體類(lèi)型如職工信息結(jié)構(gòu)體類(lèi)型: :struct personchar name20; /*姓名姓名*/char address40; /*地址地址*/float salary; /*工資工資*/float cost

5、; /*扣款扣款*/struct date hiredate; /*聘任日期聘任日期*/; 結(jié)構(gòu)體類(lèi)型可以嵌套定義即一個(gè)結(jié)結(jié)構(gòu)體類(lèi)型可以嵌套定義即一個(gè)結(jié)構(gòu)體類(lèi)型中的某些成員又是其他結(jié)構(gòu)體類(lèi)型中的某些成員又是其他結(jié)構(gòu)體類(lèi)型構(gòu)體類(lèi)型結(jié)構(gòu)體類(lèi)型變量的定義結(jié)構(gòu)體類(lèi)型變量的定義 先定義結(jié)構(gòu)體類(lèi)型,再定義結(jié)構(gòu)體變量先定義結(jié)構(gòu)體類(lèi)型,再定義結(jié)構(gòu)體變量一般形式:一般形式:例例 struct student int num; char name20; char sex; int age; float score; char addr30; ; struct student stu1,stu2; struct 結(jié)

6、構(gòu)體名結(jié)構(gòu)體名 類(lèi)型標(biāo)識(shí)符類(lèi)型標(biāo)識(shí)符 成員名;成員名; 類(lèi)型標(biāo)識(shí)符類(lèi)型標(biāo)識(shí)符 成員名;成員名; .;struct 結(jié)構(gòu)體名結(jié)構(gòu)體名 變量名表列變量名表列;例例 #define STUDENT struct student STUDENT int num; char name20; char sex; int age; float score; char addr30; ; STUDENT stu1,stu2; 定義結(jié)構(gòu)體類(lèi)型的同時(shí)定義結(jié)構(gòu)體變量定義結(jié)構(gòu)體類(lèi)型的同時(shí)定義結(jié)構(gòu)體變量一般形式:一般形式:struct 結(jié)構(gòu)體名結(jié)構(gòu)體名 類(lèi)型標(biāo)識(shí)符類(lèi)型標(biāo)識(shí)符 成員名;成員名; 類(lèi)型標(biāo)識(shí)符類(lèi)型標(biāo)識(shí)符 成員

7、名;成員名; .變量名表列變量名表列;例例 struct student int num; char name20; char sex; int age; float score; char addr30; stu1,stu2; 直接定義結(jié)構(gòu)體變量直接定義結(jié)構(gòu)體變量一般形式:一般形式:struct 類(lèi)型標(biāo)識(shí)符類(lèi)型標(biāo)識(shí)符 成員名;成員名; 類(lèi)型標(biāo)識(shí)符類(lèi)型標(biāo)識(shí)符 成員名;成員名; .變量名表列變量名表列;例例 struct int num; char name20; char sex; int age; float score; char addr30; stu1,stu2; 用用無(wú)名結(jié)構(gòu)體無(wú)名結(jié)

8、構(gòu)體直接定義直接定義變量變量只能一次只能一次結(jié)構(gòu)體類(lèi)型聲明的說(shuō)明結(jié)構(gòu)體類(lèi)型聲明的說(shuō)明 說(shuō)明說(shuō)明結(jié)構(gòu)體類(lèi)型與結(jié)構(gòu)體變量概念不同結(jié)構(gòu)體類(lèi)型與結(jié)構(gòu)體變量概念不同 類(lèi)型類(lèi)型:不分配內(nèi)存不分配內(nèi)存; 變量變量:分配內(nèi)存分配內(nèi)存 類(lèi)型類(lèi)型:不能賦值、存取、運(yùn)算不能賦值、存取、運(yùn)算; 變量變量:可以可以結(jié)構(gòu)體可嵌套結(jié)構(gòu)體可嵌套結(jié)構(gòu)體成員名與程序中變量名可相同,不會(huì)混淆結(jié)構(gòu)體成員名與程序中變量名可相同,不會(huì)混淆結(jié)構(gòu)體類(lèi)型及變量的作用域與生存期結(jié)構(gòu)體類(lèi)型及變量的作用域與生存期例例 struct date int month; int day; int year; ; struct student int num

9、; char name20; struct date birthday; stu;numnamebirthdaymonthdayyear例例 struct student int num; char name20; struct date int month; int day; int year; birthday; stu;numnamebirthdaymonthdayyear結(jié)構(gòu)體變量的使用結(jié)構(gòu)體變量的使用 由結(jié)構(gòu)體變量名引用其成員由結(jié)構(gòu)體變量名引用其成員結(jié)構(gòu)體變量結(jié)構(gòu)體變量不能整體引用不能整體引用,只能引用變量只能引用變量成員成員可以將可以將一個(gè)結(jié)構(gòu)體變量賦值給另一個(gè)結(jié)構(gòu)體變量一個(gè)結(jié)構(gòu)體

10、變量賦值給另一個(gè)結(jié)構(gòu)體變量結(jié)構(gòu)體嵌套時(shí)結(jié)構(gòu)體嵌套時(shí)逐級(jí)引用逐級(jí)引用引用方式:引用方式: 結(jié)構(gòu)體變量名結(jié)構(gòu)體變量名.成員名成員名成員成員( (分量分量) )運(yùn)算符運(yùn)算符優(yōu)先級(jí)優(yōu)先級(jí): : 1 1結(jié)合性結(jié)合性: :從左向右從左向右例例 struct student int num; char name20; char sex; int age; float score; char addr30; stu1,stu2; stu1.num=10;stu1.score=85.5;stu1.score+=stu2.score; stu1.age+;例例 struct student int num; ch

11、ar name20; char sex; int age; float score; char addr30; stu1,stu2; printf(“%d,%s,%c,%d,%f,%sn”,stu1); ( )stu1=101,“Wan Lin”,M,19,87.5,“DaLian”; ( )例例 struct student int num; char name20; char sex; int age; float score; char addr30; stu1,stu2; stu2=stu1; ( )例例 struct student int num; char name20; str

12、uct date int month; int day; int year; birthday; stu1,stu2;numnamebirthdaymonthdayyearstu1.birthday.month=12;例例 struct student int num; char name20; char sex; int age; float score; char addr30; stu1,stu2; if(stu1=stu2). ( )結(jié)構(gòu)體變量的初始化結(jié)構(gòu)體變量的初始化 形式一形式一:struct 結(jié)構(gòu)體名結(jié)構(gòu)體名 類(lèi)型標(biāo)識(shí)符類(lèi)型標(biāo)識(shí)符 成員名;成員名; 類(lèi)型標(biāo)識(shí)符類(lèi)型標(biāo)識(shí)符 成員名;

13、成員名; .;struct 結(jié)構(gòu)體名結(jié)構(gòu)體名 結(jié)構(gòu)體變量結(jié)構(gòu)體變量=初始數(shù)據(jù)初始數(shù)據(jù);例例 struct student int num; char name20; char sex; int age; char addr30; ; struct student stu1=112,“Wang Lin”,M,19, “200 Beijing Road”; 形式二形式二:struct 結(jié)構(gòu)體名結(jié)構(gòu)體名 類(lèi)型標(biāo)識(shí)符類(lèi)型標(biāo)識(shí)符 成員名;成員名; 類(lèi)型標(biāo)識(shí)符類(lèi)型標(biāo)識(shí)符 成員名;成員名; .結(jié)構(gòu)體變量結(jié)構(gòu)體變量=初始數(shù)據(jù)初始數(shù)據(jù);例例 struct student int num; char name20

14、; char sex; int age; char addr30; stu1=112,“Wang Lin”,M,19, “200 Beijing Road”; 形式三形式三:struct 類(lèi)型標(biāo)識(shí)符類(lèi)型標(biāo)識(shí)符 成員名;成員名; 類(lèi)型標(biāo)識(shí)符類(lèi)型標(biāo)識(shí)符 成員名;成員名; .結(jié)構(gòu)體變量結(jié)構(gòu)體變量=初始數(shù)據(jù)初始數(shù)據(jù);例例 struct int num; char name20; char sex; int age; char addr30; stu1=112,“Wang Lin”,M,19, “200 Beijing Road”; 結(jié)構(gòu)體變量存儲(chǔ)分配示意圖結(jié)構(gòu)體變量存儲(chǔ)分配示意圖stru1100010

15、20100110231026name20sexagescore例例 9.1 求某同學(xué)上學(xué)期求某同學(xué)上學(xué)期8門(mén)課程的總成績(jī)與平均成績(jī)。門(mén)課程的總成績(jī)與平均成績(jī)。 程序如下:程序如下:main( ) int i; struct st char xm8; float cj9; float tcj, acj; stu; scanf(%s, stu.xm);); /*輸入輸入*/for(i=1; i=8;i+) scan(%f, &stu.cji);); stu.tcj=0.0; /*求總成績(jī)求總成績(jī)*/for(i=1; i=8;i+) stu.tcj+=stu.cji; stu.acj=stu

16、.tcji/8; /*求平均成績(jī)求平均成績(jī)*/printf(%s總成績(jī)總成績(jī)=%6.2f, 平均成績(jī)平均成績(jī)=%6.2f,stu.tcj,stu.acj);); 輸入數(shù)據(jù):輸入數(shù)據(jù): CHEN 80 86 79 98 88 72 96 66運(yùn)行結(jié)果:運(yùn)行結(jié)果: CHEN的總成績(jī)的總成績(jī)=577.00, 平均成績(jī)平均成績(jī)= 72.13結(jié)構(gòu)體類(lèi)型數(shù)組結(jié)構(gòu)體類(lèi)型數(shù)組 結(jié)構(gòu)體數(shù)組的定義結(jié)構(gòu)體數(shù)組的定義三種形式:形式一: struct student int num; char name20; char sex; int age; ;struct student stu2;形式二: struct stu

17、dent int num; char name20; char sex; int age; stu2;形式三: struct int num; char name20; char sex; int age; stu2;numnamesexagenumnamesexagestu0stu125B結(jié)構(gòu)體數(shù)組初始化與引用結(jié)構(gòu)體數(shù)組初始化與引用 結(jié)構(gòu)體數(shù)組初始化結(jié)構(gòu)體數(shù)組初始化例例 struct int num; char name20; char sex; int age; stu =,;順序初始化順序初始化: struct student int num; char name20; char sex

18、; int age; ;struct student stu =100,“Wang Lin”,M,20, 101,“Li Gang”,M,19, 110,“Liu Yan”,F,19; 例例 struct student int num; char name20; char sex; int age; stu =,;分行初始化分行初始化: struct student int num; char name20; char sex; int age; ;struct student stu =100,“Wang Lin”,M,20, 101,“Li Gang”,M,19, 110,“Liu Ya

19、n”,F,19; 全部初始化時(shí)維數(shù)可省全部初始化時(shí)維數(shù)可省 結(jié)構(gòu)體數(shù)組引用結(jié)構(gòu)體數(shù)組引用引用方式:引用方式: 結(jié)構(gòu)體數(shù)組名結(jié)構(gòu)體數(shù)組名下標(biāo)下標(biāo).成員名成員名 struct student int num; char name20; char sex; int age; str3;stu1.age+;strcpy(,”ZhaoDa”);例例 統(tǒng)計(jì)候選人選票統(tǒng)計(jì)候選人選票struct person char name20; int count;leader3=“Li”,0,“Zhang”,0,”Wang“,0; main() int i,j; char leader_name20

20、; 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;i成員名成員名結(jié)構(gòu)體變量名結(jié)構(gòu)體變量名.成員名成員名指向運(yùn)算符優(yōu)先級(jí): 1結(jié)合方向:從左向右例例 指向結(jié)構(gòu)體的指針變量指向結(jié)構(gòu)體的指針變量main() struct student long int num; char name20; char sex; float score; stu_1,*p; p=&stu_1; stu_1.num=89101;

21、 strcpy(stu_1.name,Li Lin); p-sex=M; p-score=89.5; printf(nNo:%ldnname:%snsex:%cnscore:%fn, (*p).num,p-name,stu_1.sex,p-score);例例 int n; int *p=&n; *p=10; n=10struct student stu1;struct student *p=&stu1;stu1.num=101; (*p).num=101總結(jié):結(jié)構(gòu)體成員變量引用方式總結(jié):結(jié)構(gòu)體成員變量引用方式結(jié)構(gòu)體變量結(jié)構(gòu)體變量.成員名成員名(*p).成員名成員名p-成員名成員

22、名其中,其中,-稱為指向運(yùn)算符稱為指向運(yùn)算符 請(qǐng)分析下列幾種運(yùn)算:請(qǐng)分析下列幾種運(yùn)算:p-np-n+p-n指向結(jié)構(gòu)體數(shù)組元素的指針指向結(jié)構(gòu)體數(shù)組元素的指針例例 指向結(jié)構(gòu)體數(shù)組的指針指向結(jié)構(gòu)體數(shù)組的指針struct student int num; char name20; char sex; int age;stu3=10101,Li Lin,M,18, 10102,Zhang Fun,M,19, 10104,Wang Min,F,20;main() struct student *p; for(p=stu;pnum,p-name,p-sex,p-age);numnamesexagestu0p

23、stu1stu2p+1結(jié)構(gòu)體變量作為函數(shù)參數(shù)結(jié)構(gòu)體變量作為函數(shù)參數(shù) 用結(jié)構(gòu)體變量的成員作參數(shù)用結(jié)構(gòu)體變量的成員作參數(shù)-值傳遞值傳遞用指向結(jié)構(gòu)體變量或數(shù)組的指針作參數(shù)用指向結(jié)構(gòu)體變量或數(shù)組的指針作參數(shù)-地地址傳遞址傳遞用結(jié)構(gòu)體變量作參數(shù)用結(jié)構(gòu)體變量作參數(shù)-多值傳遞多值傳遞,效率低,效率低struct data int a, b, c; ;main() void func(struct data); struct data arg; arg.a=27; arg.b=3; arg.c=arg.a+arg.b; printf(arg.a=%d arg.b=%d arg.c=%dn,arg.a,arg.

24、b,arg.c); printf(Call Func().n); func(arg); printf(arg.a=%d arg.b=%d arg.c=%dn,arg.a,arg.b,arg.c);void func(struct data parm) printf(parm.a=%d parm.b=%d parm.c=%dn,parm.a,parm.b,parm.c); printf(Process.n); parm.a=18; parm.b=5; parm.c=parm.a*parm.b; printf(parm.a=%d parm.b=%d parm.c=%dn,parm.a,parm.b

25、,parm.c); printf(Return.n);例例 用結(jié)構(gòu)體變量作函數(shù)參數(shù)用結(jié)構(gòu)體變量作函數(shù)參數(shù)struct data int a, b, c; ;main() void func(struct data *parm); struct data arg; arg.a=27; arg.b=3; arg.c=arg.a+arg.b; printf(arg.a=%d arg.b=%d arg.c=%dn,arg.a,arg.b,arg.c); printf(Call Func().n); func(&arg); printf(arg.a=%d arg.b=%d arg.c=%dn,arg.a,arg.b,arg.c);void func(struct data *parm) printf(parm-a=%d parm-b=%d parm-c=%dn,parm-a,parm-b,parm-c); printf(Process.n); parm-a=18; parm-b=5; parm-c=parm-a*parm-b; printf(parm-a=%d parm-b=%d parm-c=%dn,parm-a,parm-b,parm-c);

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論