C語(yǔ)言程序設(shè)計(jì):chapter09 用戶自己建立數(shù)據(jù)類型_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì):chapter09 用戶自己建立數(shù)據(jù)類型_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì):chapter09 用戶自己建立數(shù)據(jù)類型_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì):chapter09 用戶自己建立數(shù)據(jù)類型_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì):chapter09 用戶自己建立數(shù)據(jù)類型_第5頁(yè)
已閱讀5頁(yè),還剩41頁(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、第9章 用戶自己建立數(shù)據(jù)類型 C 語(yǔ)言程序設(shè)計(jì)2022/7/252本章主要內(nèi)容:9.1 結(jié)構(gòu)體9.2 結(jié)構(gòu)體變量的定義 9.3 結(jié)構(gòu)體變量的引用9.4 結(jié)構(gòu)體變量的初始化9.5 結(jié)構(gòu)體數(shù)組9.6 結(jié)構(gòu)體和指針9.7 共用體9.8 用typedef定義類型2022/7/2539.1 結(jié)構(gòu)體 結(jié)構(gòu)體是一種構(gòu)造數(shù)據(jù)類型 用途:把不同類型的數(shù)據(jù)組合成一個(gè)整體-自定義數(shù)據(jù)類型結(jié)構(gòu)體類型定義struct 結(jié)構(gòu)體名 類型標(biāo)識(shí)符 成員名; 類型標(biāo)識(shí)符 成員名; .;成員類型可以是基本型或構(gòu)造型struct是關(guān)鍵字,不能省略合法標(biāo)識(shí)符可省:無名結(jié)構(gòu)體2022/7/254例 struct student int

2、num; char name20; char sex; int age; float score; char addr30; ; namenumsexagescoreaddr2字節(jié)2字節(jié)20字節(jié)1字節(jié)4字節(jié)30字節(jié).結(jié)構(gòu)體類型定義描述結(jié)構(gòu)的組織形式,不分配內(nèi)存結(jié)構(gòu)體類型定義的作用域2022/7/255例 struct student int num; char name20; char sex; int age; float score; char addr30; struct student stu1,stu2; 9.2 結(jié)構(gòu)體變量的定義 1.先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體變量一般形式: s

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

4、me20; char sex; int age; float score; char addr30; stu1,stu2; 2022/7/2583.直接定義結(jié)構(gòu)體變量一般形式:struct 類型標(biāo)識(shí)符 成員名; 類型標(biāo)識(shí)符 成員名; .變量名表列;例 struct int num; char name20; char sex; int age; float score; char addr30; stu1,stu2; 用無名結(jié)構(gòu)體直接定義變量只能一次2022/7/2594.說明結(jié)構(gòu)體類型與結(jié)構(gòu)體變量概念不同類型:不分配內(nèi)存; 變量:分配內(nèi)存類型:不能賦值、存取、運(yùn)算; 變量:可以結(jié)構(gòu)體可嵌套結(jié)

5、構(gòu)體成員名與程序中變量名可相同,不會(huì)混淆結(jié)構(gòu)體類型及變量的作用域與生存期例 struct date int month; int day; int year; ; struct student int num; char name20; struct date birthday; stu;numnamebirthdaymonthdayyear2022/7/2510例 struct student int num; char name20; struct date int month; int day; int year; birthday; stu;numnamebirthdaymonthda

6、yyear2022/7/2511 9.3 結(jié)構(gòu)體變量的引用1.引用規(guī)則 結(jié)構(gòu)體變量不能整體引用,只能引用變量成員可以將一個(gè)結(jié)構(gòu)體變量賦值給另一個(gè)結(jié)構(gòu)體變量結(jié)構(gòu)體嵌套時(shí)逐級(jí)引用成員(分量)運(yùn)算符優(yōu)先級(jí): 1結(jié)合性:從左向右引用方式: 結(jié)構(gòu)體變量名.成員名例 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+;2022/7/2512例 stru

7、ct student int num; char 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; if(stu1=stu2). ()2022/7/2513例 struct s

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

9、名; 類型標(biāo)識(shí)符 成員名; .;struct 結(jié)構(gòu)體名 結(jié)構(gòu)體變量=初始數(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”;2022/7/25152.形式二:struct 結(jié)構(gòu)體名 類型標(biāo)識(shí)符 成員名; 類型標(biāo)識(shí)符 成員名; .結(jié)構(gòu)體變量=初始數(shù)據(jù);例 struct student int num; char name20; char sex; int age; char ad

10、dr30; stu1=112,“Wang Lin”,M,19, “200 Beijing Road”; 2022/7/25163.形式三:struct 類型標(biāo)識(shí)符 成員名; 類型標(biāo)識(shí)符 成員名; .結(jié)構(gòu)體變量=初始數(shù)據(jù);例 struct int num; char name20; char sex; int age; char addr30; stu1=112,“Wang Lin”,M,19, “200 Beijing Road”; 2022/7/25179.5 結(jié)構(gòu)體數(shù)組1.結(jié)構(gòu)體數(shù)組的定義三種形式:形式一: struct student int num; char name20; char

11、 sex; int age; ;struct student stu2;numnamesexagenumnamesexagestu0stu125B2022/7/2518形式二: struct student int num; char name20; char sex; int age; stu2;形式三: struct int num; char name20; char sex; int age; stu2;2022/7/25192.結(jié)構(gòu)體數(shù)組初始化分行初始化: struct student int num; char name20; char sex; int age; ;struct

12、student stu =100,“Wang Lin”,M,20, 101,“Li Gang”,M,19, 110,“Liu Yan”,F,19; 全部初始化時(shí)維數(shù)可省2022/7/2520順序初始化: 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 Yan”,F,19; 2022/7/2521例 struct int num; char name20; char sex; int age;

13、 stu =,;例 struct student int num; char name20; char sex; int age; stu =,;2022/7/25223.結(jié)構(gòu)體數(shù)組引用引用方式: 結(jié)構(gòu)體數(shù)組名下標(biāo).成員名 struct student int num; char name20; char sex; int age; str3;stu1.age+;strcpy(,”ZhaoDa”);2022/7/2523例 統(tǒng)計(jì)候選人選票#include#includestruct person char name20; int count;leader3=“Li”,0,“Z

14、hang”,0,”Wang“,0; void 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;i成員名結(jié)構(gòu)體變量名.成員名指向運(yùn)算符優(yōu)先級(jí): 1結(jié)合方向:從左向右例 int n; int *p=&n; *p=10; n=102022/7/2526void main() struct student long int num; char na

15、me20; char sex; float score; stu_1,*p; p=&stu_1; stu_1.num=89101; 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);例 指向結(jié)構(gòu)體的指針變量2022/7/25271.指向結(jié)構(gòu)體數(shù)組的指針例 指向結(jié)構(gòu)體數(shù)組的指針struct student int num; char name20; char sex; int age;stu3=1

16、0101,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);numnamesexagestu0pstu1stu2p+12022/7/25282.用指向結(jié)構(gòu)體的指針作函數(shù)參數(shù)用結(jié)構(gòu)體變量的成員作參數(shù)-值傳遞用指向結(jié)構(gòu)體變量或數(shù)組的指針作參數(shù)-地址傳遞用結(jié)構(gòu)體變量作參數(shù)-多值傳遞,效率低2022/7/2529struct data int a, b, c; ;void main() void func(struct d

17、ata); 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(

18、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); printf(Return.n);arga :27b: 3c :30(main)(func)parma :27b: 3c :30copyarga :27b: 3c :30(main)(func)parma :18b: 5c :90arga :27b: 3c :30(main)例 用結(jié)構(gòu)體變量作函數(shù)參數(shù)2022/7/2530struct data int a, b,

19、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

20、-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); printf(Return.n);arga :18b: 5c :90(main)arga :27b: 3c :30(main)例 用結(jié)構(gòu)體指針變量作函數(shù)參數(shù)arga :27b: 3c :30(main)(func)parm*arga :18b: 5c :90(main)(func)parm*2

21、022/7/25319.7 共用體構(gòu)造數(shù)據(jù)類型,也叫聯(lián)合體用途:使幾個(gè)不同類型的變量共占一段內(nèi)存(相互覆蓋)1.共用體類型定義定義形式:union 共用體名 類型標(biāo)識(shí)符 成員名; 類型標(biāo)識(shí)符 成員名; .;例 union data int i; char ch; float f; ;fchi類型定義不分配內(nèi)存2022/7/2532形式一: union data int i; char ch; float f; a,b;形式二: union data int i; char ch; float f; ; union data a,b,c,*p,d3;形式三: union int i; char

22、ch; float f; a,b,c;1.共用體變量的定義fchifchiab共用體變量定義分配內(nèi)存,長(zhǎng)度=最長(zhǎng)成員所占字節(jié)數(shù)共用體變量任何時(shí)刻只有一個(gè)成員存在2022/7/25332.共用體變量引用引用方式:共用體指針名成員名共用體變量名.成員名(*共用體指針名).成員名union data int i; char ch; float f; ; union data a,b,c,*p,d3;a.i a.ch a.fp-i p-ch p-f(*p).i (*p).ch (*p).fd0.i d0.ch d0.f2022/7/2534例 a.i=1; a.ch=a; a.f=1.5; print

23、f(“%d”,a.i); (編譯通過,運(yùn)行結(jié)果不對(duì)) 引用規(guī)則不能引用共用體變量,只能引用其成員共用體變量中起作用的成員是最后一次存放的成員例 union int i; char ch; float f; a; a=1; () 2022/7/2535不能在定義共用體變量時(shí)初始化例 union int i; char ch; float f; a=1,a,1.5; () 可以用一個(gè)共用體變量為另一個(gè)變量賦值例 float x; union int i; char ch; float f; a,b; a.i=1; a.ch=a; a.f=1.5; b=a; () x=a.f; ()2022/7/2

24、5363.結(jié)構(gòu)體與共用體區(qū)別: 存儲(chǔ)方式不同struct node char ch2; int k;a;union node char ch2; int k;b;achkbchk變量的各成員同時(shí)存在任一時(shí)刻只有一個(gè)成員存在聯(lián)系: 兩者可相互嵌套2022/7/2537例 結(jié)構(gòu)體中嵌套共用體 namenumsexjobclasspositionLiWang10112086FMST501prof循環(huán)n次讀入姓名、號(hào)碼、性別、職務(wù)job=s真真假假讀入class讀入position輸出“輸入錯(cuò)”循環(huán)n次job=s真假輸出:姓名,號(hào)碼,性別,職業(yè),班級(jí)輸出:姓名,號(hào)碼,性別,職業(yè),職務(wù)job=tstru

25、ct int num; char name10; char sex; char job; union int class; char position10; category;person2;2022/7/25389.8 用typedef定義類型功能:用自定義名字為已有數(shù)據(jù)類型命名類型定義簡(jiǎn)單形式:typedef type name;例 typedef int INTEGER;類型定義語(yǔ)句關(guān)鍵字已有數(shù)據(jù)類型名用戶定義的類型名例 typedef float REAL;類型定義后,與已有類型一樣使用2022/7/2539例 INTEGER a,b,c; REAL f1,f2; int a,b,c; float f1,f2; 說明:1.typedef 沒有創(chuàng)造新數(shù)據(jù)類型2.typedef 是定義類型,不能定義變量3.typedef 與 define 不同 define typedef預(yù)編譯時(shí)處理 編譯時(shí)處理簡(jiǎn)單字符置換 為已有類型命名 2022/7/25403.typedef定義類型步驟按定義變量方法先寫出定義體 如 int i

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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)論