




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、第十一章 結(jié)構(gòu)體與共用體,教學(xué)目標(biāo) 掌握結(jié)構(gòu)體類型及結(jié)構(gòu)體變量的定義與引用方法; 理解結(jié)構(gòu)體變量的存儲結(jié)構(gòu); 初步掌握鏈表的概念及對鏈表的基本操作; 了解共用體類型及共用體類型變量的定義 ; 了解枚舉類型的定義方法及枚舉類型數(shù)據(jù)的使用 ; 了解用typedef定義數(shù)據(jù)類型別名的方法。 基本要求 能夠閱讀、編寫和調(diào)試有關(guān)結(jié)構(gòu)體的應(yīng)用程序,初步掌握有關(guān)鏈表的一些基本操作。,第十一章 結(jié)構(gòu)體與共用體,11.1 結(jié)構(gòu)體類型 結(jié)構(gòu)體是一種構(gòu)造數(shù)據(jù)類型 用途:把不同類型的數(shù)據(jù)組合成一個整體-自定義數(shù)據(jù)類型,struct 結(jié)構(gòu)體名 類型標(biāo)識符 成員名; 類型標(biāo)識符 成員名; . ;,成員類型可以是 基本型或
2、構(gòu)造型,struct是關(guān)鍵字, 不能省略,合法標(biāo)識符 可省:無名結(jié)構(gòu)體,一、結(jié)構(gòu)體類型的定義,struct student int num; char name20; char sex; int age; float score; char addr30; ;,結(jié)構(gòu)體類型定義只描述結(jié)構(gòu)的組織形式,不分配內(nèi)存。,例:結(jié)構(gòu)體類型的定義,struct 結(jié)構(gòu)體名 類型標(biāo)識符 成員名; 類型標(biāo)識符 成員名; ; struct 結(jié)構(gòu)體名 變量名表列;,例 struct student int num; char name20; char sex; int age; float score; char ad
3、dr30; ; struct student stu1,stu2;,1. 先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體變量,二、結(jié)構(gòu)體變量的定義(三種形式),一般形式1:,struct 結(jié)構(gòu)體名 類型標(biāo)識符 成員名; 類型標(biāo)識符 成員名; . 變量名表列;,例 struct student int num; char name20; char sex; int age; float score; char addr30; stu1,stu2;,一般形式2:,2. 定義結(jié)構(gòu)體類型的同時定義結(jié)構(gòu)體變量,一般形式3:,struct 類型標(biāo)識符 成員名; 類型標(biāo)識符 成員名; . 變量名表列;,例 struct i
4、nt num; char name20; char sex; int age; float score; char addr30; stu1,stu2;,用無名結(jié)構(gòu)體直接定義 變量,只能一次.,3. 直接定義無名結(jié)構(gòu)體變量,結(jié)構(gòu)體類型與結(jié)構(gòu)體變量概念不同。 類型:不分配內(nèi)存; 變量:分配內(nèi)存 類型:不能賦值,存取,運算; 變量:可以賦值,存取,運算 結(jié)構(gòu)體類型可以嵌套定義。 結(jié)構(gòu)體類型及變量的作用域與生存期。,例 struct date int month; int day; int year; ; struct student int num; char name20; struct dat
5、e birthday; stu;,說明:,變量stu的存儲結(jié)構(gòu):,1. 引用方式: 結(jié)構(gòu)體變量名.成員名,2. 引用規(guī)則:結(jié)構(gòu)體變量不能整體引用,只能引用變量成員,三、結(jié)構(gòu)體變量的引用,成員(分量)運算符 優(yōu)先級: 15(最高) 結(jié)合性:從左向右,結(jié)構(gòu)體變量的引用示例,例 struct student int num; char name20; struct date int month; int day; int year; birthday; stu1,stu2 =101,Wan Lin;,stu1.birthday.month=12;,3. 結(jié)構(gòu)體嵌套時應(yīng)逐級引用,stu1=102,Wa
6、n Lin; (),4. 特例: C語言允許:將一個結(jié)構(gòu)體變量的值 整體賦值給另一個結(jié)構(gòu)體變量。 例如:stu1=stu2; (),struct 結(jié)構(gòu)體名 類型標(biāo)識符 成員名; 類型標(biāo)識符 成員名; . ; 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;,四、結(jié)構(gòu)體變量的初始化 形式一:,struct 結(jié)構(gòu)體名 類型標(biāo)識符 成員名; 類型
7、標(biāo)識符 成員名; . 結(jié)構(gòu)體變量=初始數(shù)據(jù);,例 struct student int num; char name20; char sex; int age; char addr30; stu1=112,Wang Lin,M,19, 200 Beijing Road;,形式二:,struct 類型標(biāo)識符 成員名; 類型標(biāo)識符 成員名; . 結(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;,形式三:,形式一: s
8、truct student int num; char name20; char sex; int age; ; struct student stu2;,形式二: struct student int num; char name20; char sex; int age; stu2;,形式三: struct int num; char name20; char sex; int age; stu2;,11.2 結(jié)構(gòu)體數(shù)組一、結(jié)構(gòu)體數(shù)組的定義,順序初始化: struct student int num; char name20; char sex; int age; ; struct stu
9、dent stu =100,Wang Lin,M,20, 101,Li Gang,M,19, 110,Liu Yan,F,19;,例:定義類型時省略類型名 struct int num; char name20; char sex; int age; stu =,;,二、結(jié)構(gòu)體數(shù)組初始化,例:定義類型的同時定義變量并初始化 struct student int num; char name20; char sex; int age; stu =,;,結(jié)構(gòu)體數(shù)組初始化示例,引用方式: 結(jié)構(gòu)體數(shù)組名下標(biāo).成員名,struct student int num; char name20; char s
10、ex; int age; stu3;,stu1.age+; stu2.age=18;,strcpy(, ZhaoDa);,三、結(jié)構(gòu)體數(shù)組引用,struct person char name20; int count; leader3=Li1,0, Zhang2,0, Wang3,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.coun
11、t+; for(i=0;i3;i+) printf(%5s:%dn,,leaderi.count); ,例 統(tǒng)計后選人選票,存放結(jié)構(gòu)體變量在內(nèi)存中的起始地址,1. 定義形式:struct 結(jié)構(gòu)體名 *結(jié)構(gòu)體指針名; 例 struct student *p;,11.3 指向結(jié)構(gòu)體的指針 一、指向結(jié)構(gòu)體變量的指針,(*結(jié)構(gòu)體指針名).成員名,結(jié)構(gòu)體指針名-成員名,指向成員運算符 優(yōu)先級: 15 (最高) 結(jié)合方向:從左向右,例 指向結(jié)構(gòu)體的指針變量,struct student stu1; struct student *p=,2. 使用結(jié)構(gòu)體指針變量引用成員,main()
12、 struct student long int num; char name20; char sex; float score; stu_1,*p; p= ,例 指向結(jié)構(gòu)體的指針變量,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); ,例 指向結(jié)構(gòu)體數(shù)組的指針,二、指向結(jié)構(gòu)體數(shù)
13、組的指針,11.4 結(jié)構(gòu)體與函數(shù),1. 結(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.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 fu
14、nc(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); printf(Return.n); ,2.函數(shù)可以返回結(jié)構(gòu)體類型的值(例11.7),#include #include struct student char num10; char nam
15、e20; float score; void PrintStruct(struct student stud) printf(%s %s %gn,stud.num,,stud.score); struct student InitialStruct(char *num,char *name,float score) struct student stud; strcpy(stud.num,num); strcpy(,name); stud.score=score; return stud; void main() struct student stud ;
16、stud=InitialStruct(00001,Xiao Li,98.5); PrintStruct(stud); ,struct data int a, b, c; ; void 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( ,3. 用結(jié)構(gòu)體指針變量作函數(shù)參數(shù),11.5 鏈表,鏈表是一種常
17、見的重要數(shù)據(jù)結(jié)構(gòu),它的主要功能是進行動態(tài)存、取數(shù)據(jù)。 鏈表的實現(xiàn)方式是:構(gòu)造一個結(jié)構(gòu)體,在此結(jié)構(gòu)體中除了數(shù)據(jù)成員外;還有一個指針成員,用來記錄下一個數(shù)據(jù)的位置。這樣的結(jié)構(gòu)體我們稱之為鏈表中的結(jié)點。,圖11.11 鏈表結(jié)構(gòu)示意圖,struct tag /*數(shù)據(jù)成員列表*/ struct tag *nextPtr; ;,1.靜態(tài)鏈表,#include struct node int data; struct node *nextPtr; void main() struct node a,b,c,*h,*p; a.data=3; b.data=6; c.data=9; p=h= ,運行結(jié)果為: 3
18、 6 9,2.動態(tài)鏈表,p=(struct node*)malloc(sizeof(struct node) p-data=100; c.nextPtr = p; /*將新節(jié)點加到鏈表的尾部*/ p-nextPtr= 0; /*NULL*/ p=(struct node*)malloc(sizeof(struct node) p-data=200; c.nextPtr.nextPtr =p; p-nextPtr= 0; /*NULL*/ free(p) /*從內(nèi)存中將p所指向的內(nèi)存塊刪除*/,NCRE 2004年4月考題(幾乎每次都考),#include #include struct NOD
19、E int num; struct NODE *next; ; void main() struct NODE *p,*q,*r; int sum=0; p=(struct NODE *) malloc(sizeof(struct NODE); q=(struct NODE *) malloc(sizeof(struct NODE); r=(struct NODE *) malloc(sizeof(struct NODE); p-num=1; q-num=2; r-num=3; p-next=q; q- next=r; r-next=NULL; sum+=q-next-num; sum+=p-
20、num; printf(sum=%dn ,sum); /* sum= 4*/ free(p); free(q); free(r); ,union 共用體名 類型標(biāo)識符 成員名; 類型標(biāo)識符 成員名; . ;,例 union data int i; char ch; float f; ;,類型定義不分配內(nèi)存,共用體是一種構(gòu)造數(shù)據(jù)類型,也叫聯(lián)合體。 用途:所有的成員均共用一段存儲區(qū)域(相互覆蓋)。 一、共用體類型定義 定義形式:,11.6 共用體,形式二: union data int i; char ch; float f; a,b;,形式一: union data int i; char ch
21、; float f; ; union data a,b,*p,d3;,形式三: union int i; char ch; float f; a,b,c;,共用體變量定義分配內(nèi)存,長度=最長成員所占字節(jié)數(shù),二、共用體變量的定義,引用規(guī)則特例 可以用一個共用體變量為另一個變量賦值,引用規(guī)則 只能引用其成員,不能引用共用體變量。,union data int i; char ch; float f; ; union data a,b,d3,*p=d;,a.i=8; a.ch=A; a.f=1.5;,p-i ; p-ch ; p-f ;,(*p).i; (*p).ch ; (*p).f;,d0.i
22、; d0.ch ; d0.f;,三、共用體變量引用,a=1; (),b=a; (),#include union int i ; char ch ; float f ; a; main() a.i=65; printf(a.i=%d, a, ch=%dn, a.i, a.ch); a.ch=a; printf(a.i=%d, a.ch=%dn, a.i, a.ch); a.f=1.5; printf(a.f=%f, a.i=%dn, a.f, a.i); ,引用規(guī)則 不能在定義共用體變量時初始化 共用體變量中起作用的成員是最后一次存放的成員,例 union int i; char ch; fl
23、oat f; a=1, a,1.5; (),共用體變量引用示例,運行結(jié)果: i=60501 ch0=101,ch1=141 ch0=A,ch1=a,main() union int_char int i; char ch2; x; x.i=24897; printf(i=%on,x.i); printf(ch0=%o,ch1=%on ch0=%c,ch1=%cn, x.ch0,x.ch1,x.ch0,x.ch1); ,例 將一個整數(shù)按字節(jié)輸出,區(qū)別: 存儲方式不同 聯(lián)系: 兩者可相互嵌套,四、結(jié)構(gòu)體與共用體的區(qū)別,struct int num; char name10; char sex; c
24、har job; union int class; char position10; category; person2;,例 結(jié)構(gòu)體中嵌套共用體,11.7 枚舉類型,C語言提供了另一種用戶定義類型稱為枚舉(enumeration)。枚舉就是用標(biāo)識符表示的整數(shù)常量的集合,用關(guān)鍵字enum定義。 從效果上看,枚舉常量是自動設(shè)置值的符號常量。枚舉常量的起始值默認(rèn)為0,以后的值依次遞增1。 枚舉類型的定義形式為: enum 枚舉類型名 成員名=整數(shù)常量 ; 如:enum monthsJAN,FEB,MAR ; 則:JAN=0, FEB=1, MAR=2 。 如:enum monthsJAN=1,FE
25、B,MAR ; 則:JAN=1, FEB=2, MAR=3 。 如:enum monthsJAN=100,FEB,MAR=200 ; 則:JAN=100, FEB=101, MAR=200 。 枚舉型的作用:增加程序的可讀性。,功能:用自定義名字為已有數(shù)據(jù)類型命名 1. 類型定義簡單形式: typedef type name;,例 typedef int INTEGER; typedef float REAL;,類型定義語句關(guān)鍵字,已有數(shù)據(jù)類型名,用戶定義的類型名,類型定義后,與已有類型一樣使用,例 INTEGER a,b,c; REAL f1,f2;,說明: 1.typedef 沒有創(chuàng)造新數(shù)據(jù)類型 2.typedef 是定義類型,不能定義變量 3.typedef 與 define 不同,define typedef 預(yù)編譯時處理 編譯時處理 簡單字符置換 為已有類型命名,11.8 用typedef定義類型,例 定義數(shù)組類型 int a100; int ARRAY100; typedef int ARRAY100; ARRAY a,b,
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 健康的營養(yǎng)師課件
- 營口市辦公經(jīng)費管理辦法
- 藍城區(qū)投資項目管理辦法
- 西安抗疫網(wǎng)格化管理辦法
- 補辦結(jié)婚證檔案管理辦法
- 西華大學(xué)專升本管理辦法
- 西秀區(qū)經(jīng)營場所管理辦法
- 設(shè)備維修防污染管理辦法
- 試述ABC庫存管理辦法
- 財務(wù)經(jīng)理人管理辦法心得
- 部編版九年級語文上冊教案
- XX灌縫施工方案
- 2023-2024學(xué)年黑龍江省寧安市初中語文七年級下冊期末高分通關(guān)試卷
- GB/T 6075.3-2011機械振動在非旋轉(zhuǎn)部件上測量評價機器的振動第3部分:額定功率大于15 kW額定轉(zhuǎn)速在120 r/min至15 000 r/min之間的在現(xiàn)場測量的工業(yè)機器
- GB/T 5594.4-2015電子元器件結(jié)構(gòu)陶瓷材料性能測試方法第4部分:介電常數(shù)和介質(zhì)損耗角正切值測試方法
- 預(yù)防保健科護理質(zhì)量控制考核標(biāo)準(zhǔn)
- 起重作業(yè)吊裝令
- 林州重機710采煤機電控箱裝配流程
- 醫(yī)院檢驗科實驗室生物安全管理委員會及工作職責(zé)
- 個人求職簡歷兩頁 (46)應(yīng)聘履歷參考模板可編輯修改
- 統(tǒng)編版小學(xué)語二升三銜接閱讀專項訓(xùn)練—課外閱讀(二)【含答案】
評論
0/150
提交評論