C程序設(shè)計第四Chap9(新)譚浩強(qiáng)_第1頁
C程序設(shè)計第四Chap9(新)譚浩強(qiáng)_第2頁
C程序設(shè)計第四Chap9(新)譚浩強(qiáng)_第3頁
C程序設(shè)計第四Chap9(新)譚浩強(qiáng)_第4頁
C程序設(shè)計第四Chap9(新)譚浩強(qiáng)_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第第9 9章章 結(jié)構(gòu)體結(jié)構(gòu)體第第9章章 結(jié)構(gòu)體結(jié)構(gòu)體9.1 9.1 結(jié)構(gòu)體類型結(jié)構(gòu)體類型9.2 9.2 結(jié)構(gòu)體變量定義及成員引用結(jié)構(gòu)體變量定義及成員引用9.3 9.3 結(jié)構(gòu)體變量的初始化結(jié)構(gòu)體變量的初始化9.4 9.4 結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組9.5 9.5 結(jié)構(gòu)體指針結(jié)構(gòu)體指針9.6 9.6 單向鏈表概念單向鏈表概念9.7 9.7 單向鏈表建立、查找、遍歷、插入、刪除單向鏈表建立、查找、遍歷、插入、刪除9.8 typedef9.8 typedef定義類型別名定義類型別名第第9章章 結(jié)構(gòu)體結(jié)構(gòu)體9.1 9.1 結(jié)構(gòu)體類型結(jié)構(gòu)體類型9.2 9.2 結(jié)構(gòu)體變量定義及成員引用結(jié)構(gòu)體變量定義及成員引用9.

2、3 9.3 結(jié)構(gòu)體變量的初始化結(jié)構(gòu)體變量的初始化9.4 9.4 結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組9.5 9.5 結(jié)構(gòu)體指針結(jié)構(gòu)體指針9.6 9.6 單向鏈表概念單向鏈表概念9.7 9.7 單向鏈表建立、查找、遍歷、插入、刪除單向鏈表建立、查找、遍歷、插入、刪除9.8 typedef9.8 typedef定義類型別名定義類型別名結(jié)構(gòu)體類型結(jié)構(gòu)體類型 例:學(xué)生名冊中一個學(xué)生包括學(xué)號、姓名、性別、年齡、例:學(xué)生名冊中一個學(xué)生包括學(xué)號、姓名、性別、年齡、家庭住址、電話號碼等信息。家庭住址、電話號碼等信息。 long long no; char name10; int age; char gender3; char

3、 addr50; long long tel; 如果將學(xué)號、姓名、性別、年齡、家庭住址、電話號碼如果將學(xué)號、姓名、性別、年齡、家庭住址、電話號碼分別定義為相互獨立的變量,難以反映出它們之間的內(nèi)分別定義為相互獨立的變量,難以反映出它們之間的內(nèi)在聯(lián)系。在聯(lián)系。結(jié)構(gòu)體類型結(jié)構(gòu)體類型 結(jié)構(gòu)體是由不同數(shù)據(jù)類型的數(shù)據(jù)組結(jié)構(gòu)體是由不同數(shù)據(jù)類型的數(shù)據(jù)組成的集合。成的集合。 例如:學(xué)生名冊中包括學(xué)號、姓名、性別、年齡、家庭住址、電話號碼等信息。 可以構(gòu)成一個“學(xué)生名冊”結(jié)構(gòu)體。 構(gòu)成結(jié)構(gòu)體的數(shù)據(jù)稱為結(jié)構(gòu)體成員(域),例如“學(xué)號”、“姓名”、“年齡”、“住址”和“電話”都是“學(xué)生名冊”結(jié)構(gòu)體的成員。 結(jié)構(gòu)體類型結(jié)

4、構(gòu)體類型 結(jié)構(gòu)體類型的定義結(jié)構(gòu)體類型的定義struct 結(jié)構(gòu)體名 成員表 ; 其中【struct 結(jié)構(gòu)體名】是數(shù)據(jù)類型名; 【成員表】對每個成員進(jìn)行類型說明。 成員類型可以是任何類型(也可以是另一結(jié)構(gòu)類型)。結(jié)構(gòu)體類型結(jié)構(gòu)體類型 例例 struct Date struct Date int year,month,day; ; ; struct student struct student long long num; char name10; int age; char gender3; char addr50; long long tel; struct Date birthday; ; ;

5、結(jié)構(gòu)體類型結(jié)構(gòu)體類型 結(jié)構(gòu)體類型的定義建立的是一個類型名,結(jié)構(gòu)體類型的定義建立的是一個類型名,不是變量,不分配存貯空間。不是變量,不分配存貯空間。 其用處與一般類型名(如其用處與一般類型名(如intint)相同,用)相同,用于定義變量、做函數(shù)參數(shù)類型、指針的于定義變量、做函數(shù)參數(shù)類型、指針的基類型等。基類型等。第第9章章 結(jié)構(gòu)體結(jié)構(gòu)體9.1 9.1 結(jié)構(gòu)體類型結(jié)構(gòu)體類型9.2 9.2 結(jié)構(gòu)體變量定義及成員引用結(jié)構(gòu)體變量定義及成員引用9.3 9.3 結(jié)構(gòu)體變量的初始化結(jié)構(gòu)體變量的初始化9.4 9.4 結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組9.5 9.5 結(jié)構(gòu)體指針結(jié)構(gòu)體指針9.6 9.6 單向鏈表概念單向鏈表概念

6、9.7 9.7 單向鏈表建立、查找、遍歷、插入、刪除單向鏈表建立、查找、遍歷、插入、刪除9.8 typedef9.8 typedef定義類型別名定義類型別名結(jié)構(gòu)體變量定義結(jié)構(gòu)體變量定義 與一般類型變量的定義相同。其類型名是“struct struct 結(jié)構(gòu)體名結(jié)構(gòu)體名”。例如:先定義類型名,再定義變量。 struct Date struct Date int year,month,day; int year,month,day; ; ; struct student struct student long long num; long long num; char name10; char n

7、ame10; int age; int age; char gender3; char gender3; char addr50; char addr50; long long tel; long long tel; struct Date birthday; struct Date birthday; ; ; struct student struct student student1,student2student1,student2; ;結(jié)構(gòu)體變量結(jié)構(gòu)體變量 結(jié)構(gòu)體變量的大?。?定義變量時分配存儲空間的大小是: sizeof(struct struct 結(jié)構(gòu)體名結(jié)構(gòu)體名) sizeof(

8、struct struct 結(jié)構(gòu)體名結(jié)構(gòu)體名) sizeof(成員成員)重要提示重要提示 不要混淆結(jié)構(gòu)體類型與結(jié)構(gòu)體變量不要混淆結(jié)構(gòu)體類型與結(jié)構(gòu)體變量之間的區(qū)別!之間的區(qū)別!結(jié)構(gòu)體變量的成員引用結(jié)構(gòu)體變量的成員引用 使用結(jié)構(gòu)體變量時,一般對其成員進(jìn)行引用,而不對結(jié)構(gòu)體變量進(jìn)行整體引用。有兩種方法引用結(jié)構(gòu)體成員: 結(jié)構(gòu)體變量. .成員名 結(jié)構(gòu)體指針變量-成員名 其中“.”是結(jié)構(gòu)體成員運算符;“-”是指向結(jié)構(gòu)體成員運算符。表達(dá)式類型是成員的類型。 例如: student1.num = 10001001; +student1.age;結(jié)構(gòu)體變量的成員引用結(jié)構(gòu)體變量的成員引用 若成員本身的類型是另一個

9、結(jié)構(gòu)體,則要用若干個“.”運算符,對最低一級的成員進(jìn)行引用。 例如: student1.birthday.year=1995; printf(%d年%d月%d日, student1.birthday.year, student1.birthday.month, student1.birthday.day);第第9章章 結(jié)構(gòu)體結(jié)構(gòu)體9.1 9.1 結(jié)構(gòu)體類型結(jié)構(gòu)體類型9.2 9.2 結(jié)構(gòu)體變量定義及成員引用結(jié)構(gòu)體變量定義及成員引用9.3 9.3 結(jié)構(gòu)體變量的初始化結(jié)構(gòu)體變量的初始化9.4 9.4 結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組9.5 9.5 結(jié)構(gòu)體指針結(jié)構(gòu)體指針9.6 9.6 單向鏈表概念單向鏈表概念9.

10、7 9.7 單向鏈表建立、查找、遍歷、插入、刪除單向鏈表建立、查找、遍歷、插入、刪除9.8 typedef9.8 typedef定義類型別名定義類型別名結(jié)構(gòu)體變量的初始化結(jié)構(gòu)體變量的初始化 struct struct 結(jié)構(gòu)體名結(jié)構(gòu)體名 結(jié)構(gòu)體變量結(jié)構(gòu)體變量 = = 每個成員的初值每個成員的初值 ;結(jié)構(gòu)體變量的初始化結(jié)構(gòu)體變量的初始化 例例 struct studentstruct student long long num; long long num; char name10; char name10; int age; int age; char gender3; char gender3

11、; struct date birthday; struct date birthday; char addr50; char addr50; long long tel; long long tel;結(jié)構(gòu)體變量的初始化結(jié)構(gòu)體變量的初始化 例例int main()int main() struct student s1=10001001,struct student s1=10001001,張三張三,20, M,20, M, 1995,1,1,XXX,123456 ; 1995,1,1,XXX,123456 ; printf(No.:%I64d Name:%s Age:%d Gender:%s

12、 printf(No.:%I64d Name:%s Age:%d Gender:%s Birthday:%d-%d-%d Address:%s Birthday:%d-%d-%d Address:%s Tel.:%I64dn,s1.num,, Tel.:%I64dn,s1.num,, s1.age,s1.gender,s1.birthday.year, s1.age,s1.gender,s1.birthday.year, s1.birthday.month,s1.birthday.day, s1.birthday.month,s1.birthday.day, s1.

13、addr,s1.tel); s1.addr,s1.tel); return 0; return 0; 第第9章章 結(jié)構(gòu)體結(jié)構(gòu)體9.1 9.1 結(jié)構(gòu)體類型結(jié)構(gòu)體類型9.2 9.2 結(jié)構(gòu)體變量定義及成員引用結(jié)構(gòu)體變量定義及成員引用9.3 9.3 結(jié)構(gòu)體變量的初始化結(jié)構(gòu)體變量的初始化9.4 9.4 結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組9.5 9.5 結(jié)構(gòu)體指針結(jié)構(gòu)體指針9.6 9.6 單向鏈表概念單向鏈表概念9.7 9.7 單向鏈表建立、查找、遍歷、插入、刪除單向鏈表建立、查找、遍歷、插入、刪除9.8 typedef9.8 typedef定義類型別名定義類型別名結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組 數(shù)組的元素類型是一個結(jié)構(gòu)體類型。

14、 例如: struct student students10; struct student s3 = 10001001,張三,20, M,1985,1,1,XXX,123456 , , ;結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組 struct student s = 10001001,張三,20, M,1985,1,1,XXX,123456 , , ;結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組 例例例例 對候選人得票進(jìn)行統(tǒng)計。 設(shè)有3個候選人,每次輸入一個得票的候選人名字,最后輸出每人得票數(shù)。結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組 例例 struct person char name20; int count; ;struct person char

15、 name20; int count; ;int main()int main() struct person candidate=Li,0,zhang,0,Fun,0;struct person candidate=Li,0,zhang,0,Fun,0; int i,j; char election20; int i,j; char election20; for(i=1;i=10;i+) for(i=1;i=10;i+) scanf(%s,election); scanf(%s,election); for(j=0;j3;j+) for(j=0;j3;j+) if (strcmp(elec

16、tion, if (strcmp(election,)=0) )=0) candidatej.countcandidatej.count+;+; for(i=0;i3;i+) for(i=0;inumps-num, ,ps-nameps-name, , ps-gender ps-gender, ,ps-scoreps-score);); return 0; return 0; 結(jié)構(gòu)體指針結(jié)構(gòu)體指針 - -的優(yōu)先級高的優(yōu)先級高 ps-num+ps-num+ +ps-num +ps-num (+ps)-num (+ps)-num 結(jié)構(gòu)體指

17、針結(jié)構(gòu)體指針 指向結(jié)構(gòu)體數(shù)組的指針指向結(jié)構(gòu)體數(shù)組的指針: : struct student s10; struct student *ps = s; 結(jié)構(gòu)體指針結(jié)構(gòu)體指針 例例struct studentstruct student long long num; long long num; char name20; char name20; char gender3; char gender3; double score; double score; 結(jié)構(gòu)體指針結(jié)構(gòu)體指針 例例int main()int main() struct student s3= struct student s3=

18、 , ; ; struct student struct student * *ps;ps; printf(No. Name Gender Score printf(No. Name Gender Score for ( for (ps=s;pss+3;ps+ps=s;psnumps-num, , ps-name ps-name, ,ps-genderps-gender, ,ps-scoreps-score);); return 0; return 0; 結(jié)構(gòu)體函數(shù)參數(shù)結(jié)構(gòu)體函數(shù)參數(shù) 結(jié)構(gòu)體作為函數(shù)參數(shù)結(jié)構(gòu)體作為函數(shù)參數(shù): : void f(struct student); struct st

19、udent s; f(s); 函數(shù)調(diào)用時,實參整體作為形參的初值。 結(jié)構(gòu)體函數(shù)參數(shù)結(jié)構(gòu)體函數(shù)參數(shù) 例例 有一個結(jié)構(gòu)體變量s,內(nèi)含學(xué)號、姓名和3門課程的成績,要求在main函數(shù)中賦值,在print函數(shù)中輸出相關(guān)信息。 結(jié)構(gòu)體函數(shù)參數(shù)結(jié)構(gòu)體函數(shù)參數(shù) 例例struct studentstruct student long long num; long long num; char name20; char name20; double score3; double score3; 結(jié)構(gòu)體函數(shù)參數(shù)結(jié)構(gòu)體函數(shù)參數(shù) 例例void print(void print(struct student sstruc

20、t student s) ) printf(%I64d%-20s%7.2f%7.2f%7.2fn, printf(%I64d%-20s%7.2f%7.2f%7.2fn, s.nums.num, ,, , s.score0 s.score0, ,s.score1s.score1, ,s.score2s.score2);); 結(jié)構(gòu)體函數(shù)參數(shù)結(jié)構(gòu)體函數(shù)參數(shù) 例例int main()int main() struct student s; struct student s; s.num=1001000; s.num=1001000; strcpy(,Li); str

21、cpy(,Li); s.score0=90; s.score0=90; s.score1=77.5; s.score1=77.5; s.score2=95.5; s.score2=95.5; print( print(s s);); return 0; return 0; 結(jié)構(gòu)體指針結(jié)構(gòu)體指針 例例 有一個結(jié)構(gòu)體變量s,內(nèi)含學(xué)號、姓名和3門課程的成績,要求在main函數(shù)中賦值,在print函數(shù)中輸出相關(guān)信息。使用結(jié)構(gòu)體指針作為函數(shù)參數(shù)。 結(jié)構(gòu)體指針結(jié)構(gòu)體指針 例例struct studentstruct student long long num; long long num; c

22、har name20; char name20; double score3; double score3; 結(jié)構(gòu)體指針結(jié)構(gòu)體指針 例例void print(void print(struct studentstruct student* * ps ps) ) printf(%I64d%-20s%7.2f%7.2f%7.2fn, printf(%I64d%-20s%7.2f%7.2f%7.2fn, ps-numps-num, , ps-name ps-name, , ps-score0 ps-score0, , ps-score1 ps-score1, , ps-score2 ps-score

23、2);); 結(jié)構(gòu)體指針結(jié)構(gòu)體指針 例例int main()int main() struct student s;struct student s; scanf(%I64d%s%lf%lf%lf,&s.num,, scanf(%I64d%s%lf%lf%lf,&s.num,, &s.score0,&s.score1,&s.score2); &s.score0,&s.score1,&s.score2); print(&s); print(&s); return 0;return 0; 第第9章章 結(jié)構(gòu)體結(jié)構(gòu)體9.1 9.1 結(jié)構(gòu)體類型結(jié)構(gòu)體類型9.2 9.2 結(jié)構(gòu)體變量定義及成員引用結(jié)構(gòu)體變量定義及成員引用9.3 9.3 結(jié)構(gòu)體變量的初始化結(jié)構(gòu)體變量的初始化9.4 9.4 結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組9.5 9.5 結(jié)構(gòu)體指針結(jié)構(gòu)體指針9.6 9.6 單向鏈表概念單向鏈表概念9.7 9.7 單向鏈表建立、查找、遍歷、插入、刪除單向鏈表建立、查找、遍歷、插入、刪除9.8 typedef9.8 typedef定義類型別名定義類型別名typedeftypedef定義類型別名定義類型別名 使用typedef 定義已有類型的別名(不是定義新的類型

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論