第六章 構(gòu)造數(shù)據(jù)類型_第1頁
第六章 構(gòu)造數(shù)據(jù)類型_第2頁
第六章 構(gòu)造數(shù)據(jù)類型_第3頁
第六章 構(gòu)造數(shù)據(jù)類型_第4頁
第六章 構(gòu)造數(shù)據(jù)類型_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、2021-7-7C與C+程序設(shè)計(jì)教程-第六章1 2021-7-7C與C+程序設(shè)計(jì)教程-第六章2 基本類型基本類型 構(gòu)造類型構(gòu)造類型派生類型派生類型 整型 int 結(jié)構(gòu)體 struct 數(shù)組類型 字符型 char 共用體(聯(lián)合)型 union 指針類型 實(shí)型 float 枚舉型 enum 雙精度型 Double 用戶定義類型 typedef 空值型 void 構(gòu)造數(shù)據(jù)類型(導(dǎo)出類型):構(gòu)造數(shù)據(jù)類型(導(dǎo)出類型): 由基本數(shù)據(jù)類型按一定規(guī)則組 合而成的。廣義上包括表中的 構(gòu)造類型和派生類型。 同一類型數(shù)據(jù) 的順序排列 類型不同但 相互關(guān)聯(lián) 2021-7-7C與C+程序設(shè)計(jì)教程-第六章3 6.1 結(jié)構(gòu)

2、體結(jié)構(gòu)體 6.2 共用體共用體 6.3 位字段位字段 6.4 枚舉類型枚舉類型 6.5 用用typedef定義類型定義類型 退出 2021-7-7C與C+程序設(shè)計(jì)教程-第六章4 6.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)體變量) 結(jié)構(gòu)體的成員結(jié)構(gòu)體的成員(成員成員):組成結(jié)構(gòu)體的每個(gè)數(shù)據(jù)。 6.1.1 結(jié)構(gòu)體類型定義 6.1.2 結(jié)構(gòu)體變量說明 6.1.3 結(jié)構(gòu)體變量的使用 6.1.4 結(jié)構(gòu)體變量的初始化 6.1.5 結(jié)構(gòu)體數(shù)組 6.1.6 結(jié)構(gòu)體和函數(shù) 返 回 2021-7-7C與C+程序設(shè)計(jì)教程-第六章5 struct 結(jié)構(gòu)體類型名結(jié)構(gòu)體類型名

3、類型名類型名 結(jié)構(gòu)體成員名;結(jié)構(gòu)體成員名; /*成員表成員表*/ ; 6.1.1 結(jié)構(gòu)體類型定義結(jié)構(gòu)體類型定義 例6.1描述通訊錄的結(jié)構(gòu)體類型。 struct person char name20; int age; char sex; char address100; long zipcode; ; 例6.2結(jié)構(gòu)體類型的嵌套定義。 struct birthday int year; int month; int day; ; struct person char name20; struct birthday date; char sex; char address100; long zip

4、code; ; 類型名 成員變量名 返 回 2021-7-7C與C+程序設(shè)計(jì)教程-第六章6 6.1.2 結(jié)構(gòu)體變量定義結(jié)構(gòu)體變量定義 q間接定義間接定義 q直接定義直接定義 q無名定義無名定義 qtypedef定義定義 struct birthday int year; int month; int day; ; struct person char name20; struct birthday data; char sex; char address100; long zipcode; ; struct person p; struct 結(jié)構(gòu)體類型名結(jié)構(gòu)體類型名 成員表;成員表; ; st

5、ruct 結(jié)構(gòu)體類型名結(jié)構(gòu)體類型名 變量名表;變量名表; 先定義類型,后單獨(dú)定義變量。在類型定義之后立即定義變量。 struct 結(jié)構(gòu)體類型名結(jié)構(gòu)體類型名 成員表;成員表; 結(jié)構(gòu)體變量名表結(jié)構(gòu)體變量名表; struct birthday int year; int month; int day; ; struct person char name20; struct birthday data; char sex; char address100; long zipcode; p; 定義一個(gè)無名結(jié)構(gòu)體類型,直接定義變量。 struct 成員表;成員表; 結(jié)構(gòu)體變量名表結(jié)構(gòu)體變量名表; stru

6、ct birthday int year; int month; int day; ; struct char name20; struct birthday data; char sex; char address100; long zipcode; p; 例6.3求結(jié)構(gòu)體類型(或結(jié)構(gòu)體變量)的字節(jié)數(shù)。 #define NAMESIZE 20 #define ADDRSIZE 100 struct birthday int year; int month; int day; ; struct person char nameNAMESIZE; struct birthday date; ch

7、ar sex; char addressADDRSIZE; long zipcode; ; main() struct person p; printf(the p length: %dn,sizeof(p); printf(the struct person length:%dn,sizeof(struct person); The p length: 131 The struct person length: 131 結(jié)構(gòu)體變量的存儲(chǔ)結(jié)構(gòu): 對(duì)結(jié)構(gòu)體變量成員順序順序分配存儲(chǔ)空間。 返 回 2021-7-7C與C+程序設(shè)計(jì)教程-第六章7 6.1.3 結(jié)構(gòu)體變量的使用結(jié)構(gòu)體變量的使用 結(jié)構(gòu)體一

8、般不能作為一個(gè)整體參加數(shù)據(jù)處理,而參 加各種運(yùn)算和操作的是結(jié)構(gòu)體的各個(gè)成員項(xiàng)數(shù)據(jù)。對(duì)成 員的使用方式: 結(jié)構(gòu)體變量名結(jié)構(gòu)體變量名.成員名成員名 注:相同結(jié)構(gòu)體類型的變量可以相互賦值。 p.zipcode=130022; p.date.year=1980; struct person p1,p2; p1=p2; 返 回 2021-7-7C與C+程序設(shè)計(jì)教程-第六章8 6.1.4 結(jié)構(gòu)體變量的初始化結(jié)構(gòu)體變量的初始化 q 間接初始化間接初始化 q 直接初始化直接初始化 q 無名初始化無名初始化 例6.4結(jié)構(gòu)體變量的初始化。 #define NAMESIZE 20 #define ADDRSIZE

9、100 struct birthday int year; int month; int day; ; struct person char nameNAMESIZE; struct birthday date; char sex; char addressADDRSIZE; long zipcode; ; struct person p=LiPing,1994,12,25,m,zhong shan road,310000; main() printf(Name: %sn,); printf(birthday: %d,%d,%dn,p.date.year,p.date.month,

10、p.date.day); printf(sex: %cn,p.sex); printf(address: %sn,p.address); printf(zipcode: %ldn,p.zipcode); name: LiPing birthday: 1994,12,25 sex: m address: zhong shan road zipcode: 310000 返 回 2021-7-7C與C+程序設(shè)計(jì)教程-第六章9 6.1.5 結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組 1. 結(jié)構(gòu)體數(shù)組的定義 struct 結(jié)構(gòu)體類型名結(jié)構(gòu)體類型名 結(jié)構(gòu)體數(shù)組名結(jié)構(gòu)體數(shù)組名元素個(gè)數(shù)元素個(gè)數(shù); struct student aa

11、td10=“zhang ming”,18,m,“Lipiang”,20,f; struct student aatd=“zhang ming”,18,m,“Lipiang”,20,f; 2. 結(jié)構(gòu)體數(shù)組的初始化 struct 結(jié)構(gòu)體名結(jié)構(gòu)體名 數(shù)組名數(shù)組名元素個(gè)數(shù)元素個(gè)數(shù)=,; 例6.5對(duì)N個(gè)學(xué)生進(jìn)行年齡從小到大的排序。 #include stdio.h #define N 3 #define NAMESIZE 20 struct student char nameNAMESIZE; int age; char sex; ; struct student std10; main() int i

12、,j; struct student change; printf(Please input student datan); i=0; while(iN) printf(name: age: sex: ); scanf(%s,); scanf(%d, scanf(%c, i=i+1; for(i=0;iN-1;i+) for(j=i+1;jstdj.age) change=stdi; stdi=stdj; stdj=change; printf(The result after sortingn); for(i=0;iN;i+) printf(Name: %stAge: %d

13、tSex: %cn,,stdi.age,stdi.sex); 輸入:name: age: sex: aaa 21m name: age: sex: bbb 22f name: age: sex: ccc 25m 輸出:name:aaa age:21 sex:m name:bbb age:22 sex:f name:ccc age:25 sex:m 例6.6結(jié)構(gòu)體數(shù)組初始化。 struct s int num; char color; char type; ; main() static struct s car= 101,G,c, 210,Y,m, 105,R,l, 222,

14、B,s, 308,P,b ; int i; printf(number color typen); for(i=0;i5;i+) printf(%-9d%- 6c%cn,cari.num,cari.color,cari.type); number color type 101 G c 210 Y m 105 R l 222 B s 308 P b 返 回 2021-7-7C與C+程序設(shè)計(jì)教程-第六章10 結(jié)構(gòu)體變量作為函數(shù)的參數(shù)是以復(fù)制的方式傳遞給 函數(shù),是單向復(fù)制傳遞的過程。 6.1.6 結(jié)構(gòu)體和函數(shù)結(jié)構(gòu)體和函數(shù) 例6.7向函數(shù)傳遞結(jié)構(gòu)體變量。 struct data int a; int

15、b; int c; ; main() 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); func(parm) struct data parm; printf(parm.a=%d parm.b=%d parm.c=%dn,parm.a,parm.b,

16、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); arg.a=27 arg.b=3 arg.c=30 CALL FUNC( ) parm.a=27 parm.b=3 parm.c=30 PROCESS parm.a=18 parm.b=5 parm.c=23 RETURN arg.a=27 arg.b=3 arg.c=30返 回 2021-7-

17、7C與C+程序設(shè)計(jì)教程-第六章11 union u char ch; int i; float f; ; 共用體共用體:其中所有成員均放在以同一地址開始的存儲(chǔ) 空間中,使用覆蓋的方式共享存儲(chǔ)單元。共用體所占的空 間的大小取決于占存儲(chǔ)空間最大的那個(gè)成員。 6.2 共用體共用體 1.共用體類型的定義共用體類型的定義 union 共用體類型名共用體類型名 類型名類型名 成員名;成員名; ; ch/i/f i/f f f 2021-7-7C與C+程序設(shè)計(jì)教程-第六章12 2.共用體變量的定義共用體變量的定義 q間接定義間接定義 q直接定義直接定義 q無名定義無名定義 union u char ch;

18、int i; float f; ; union u a,b; union共用體類型名共用體類型名 類型名類型名 成員名;成員名; ; union 共用體類型名共用體類型名 變量名表;變量名表; 分別定義類型和變量。 放在一起定義類型和變量。 struct 結(jié)構(gòu)體類型名結(jié)構(gòu)體類型名 成員表;成員表; 結(jié)構(gòu)體變量名表結(jié)構(gòu)體變量名表; union u char ch; int i; float f; a,b; 直接定義變量而無類型名。 union 類型名類型名 成員名;成員名; 變量名表;變量名表; union char ch; int i; float f; a,b; 注:共用體變量不能在定義時(shí)賦

19、初值。 2021-7-7C與C+程序設(shè)計(jì)教程-第六章13 3.共用體成員的使用共用體成員的使用 共用體變量名共用體變量名.成員名成員名 注:不能對(duì)共用體變量進(jìn)行整體操作,只能單獨(dú)使 用其成員。共用體變量不能作為函數(shù)參數(shù)或函數(shù)值,但 可以使用指向共用體的指針變量。 a.ch 2021-7-7C與C+程序設(shè)計(jì)教程-第六章14 4.共用體變量的存儲(chǔ)結(jié)構(gòu)共用體變量的存儲(chǔ)結(jié)構(gòu) 其所占空間的大小取決于占存儲(chǔ)空間最大的那個(gè)成員, 它使幾個(gè)不同數(shù)據(jù)類型的數(shù)據(jù)共用同一個(gè)存儲(chǔ)空間。 union person char name20; int age; char sex; char address50; long

20、zipcode; ; / 20 / 2 /1 /50 /4 / 50 返 回 2021-7-7C與C+程序設(shè)計(jì)教程-第六章15 6.3 位字段位字段 C語言中數(shù)據(jù)類型的最小長度char占一個(gè)字節(jié)(8位), 而有時(shí)只需1位或幾位來表示信息。 位字段數(shù)據(jù)位字段數(shù)據(jù):命令字、方式字和狀態(tài)字等以二進(jìn)制位為 單位的信息。C語言可以對(duì)之處理,這是高級(jí)語言的低級(jí)形 式的一種表現(xiàn)。 2021-7-7C與C+程序設(shè)計(jì)教程-第六章16 1. 位字段的定義位字段的定義 借助結(jié)構(gòu)體類型,以二進(jìn)制位為單位來說明結(jié)構(gòu) 體中成員所占空間。 struct 結(jié)構(gòu)體名結(jié)構(gòu)體名 unsigned 位段名位段名:常量表達(dá)式;:常量表

21、達(dá)式; /*常量表達(dá)式表示位字段寬度(位)常量表達(dá)式表示位字段寬度(位)*/ ; struct bit unsigned a: 2; unsigned b: 2; unsigned c: 1; unsigned d: 1; unsigned e: 2; ; 注:(1)位段寬度用常量表達(dá)式來指定,不得超過機(jī)器字 長。 (2)無名位段若其寬度為0,則下一位段從一個(gè)新的字 節(jié)開始存放。 (3)不能定義位字段結(jié)構(gòu)的數(shù)組。 ( (4)位字段結(jié)構(gòu)的存儲(chǔ)大小與int相同。即實(shí)際小于2 個(gè)字節(jié)也要占2個(gè)字節(jié);若實(shí)際大小于2個(gè)字節(jié)則占用下一 個(gè)連續(xù)字節(jié),且不允許其一個(gè)成員項(xiàng)跨越兩個(gè)int空間的 邊界。 2021

22、-7-7C與C+程序設(shè)計(jì)教程-第六章17 2.位字段變量的說明位字段變量的說明 q間接定義間接定義 q直接定義直接定義 q無名定義無名定義 struct bit unsigned bundbit: 2; unsigned charbit: 2; unsigned paribit: 1; unsigned evenbit: 1; unsigned stopbit: 2; unsigned dummybit: 8; ; struct bit mod; struct 結(jié)構(gòu)體名結(jié)構(gòu)體名 unsigned 位段名位段名:常量表達(dá)式;:常量表達(dá)式; ; struct 結(jié)構(gòu)體名結(jié)構(gòu)體名 變量名表;變量名表;

23、 分別定義類型和變量。 放在一起定義類型和變量。 struct結(jié)構(gòu)體名結(jié)構(gòu)體名 unsigned 位段名位段名:常量表達(dá)式;:常量表達(dá)式; 變量名表;變量名表; 直接定義變量而無類型名。 struct unsigned 位段名位段名:常量表達(dá)式;常量表達(dá)式; 變量名表;變量名表; struct bit unsigned bundbit:2; unsigned charbit:2; unsigned paribit:1; unsigned evenbit:1; unsigned stopbit:2; unsigned dummybit:8; mod; struct unsigned bundbi

24、t:2; unsigned charbit:2; unsigned paribit:1; unsigned evenbit:1; unsigned stopbit:2; unsigned dummybit:8; mod; 2021-7-7C與C+程序設(shè)計(jì)教程-第六章18 3.位字段變量的使用位字段變量的使用 位字段成員的使用: 位字段變量位字段變量.位段名(成員名)位段名(成員名) 可賦值,但不能溢出。例mod.bundbit=5;不合法。 變量的使用: (1)不能讀入位字段值,不能對(duì)位字段求地址,不能用指 針指向位字段。 (2)可以按整形格式描述符輸出(%d,%u,%o,%x等)。 (3)可

25、用整數(shù)對(duì)之賦值,超出位字段總長時(shí)取整數(shù)值的低 位。 (4)位字段可以參與各種算術(shù)表達(dá)式的運(yùn)算,系統(tǒng)自動(dòng)將 其轉(zhuǎn)換成整型。 返 回 2021-7-7C與C+程序設(shè)計(jì)教程-第六章19 6.4 枚舉類型枚舉類型 枚舉枚舉:將變量的值一一列舉出來,變量的取值僅限于列 舉值的范圍內(nèi)。 1. 枚舉類型的定義枚舉類型的定義 enum 枚舉類型名枚舉類型名 枚舉元素枚舉元素1=整型常量整型常量1,枚舉元素,枚舉元素2=整型常量整型常量 2, ; 枚舉元素枚舉元素:又稱枚舉值枚舉值、枚舉常量枚舉常量。 enum weekday sun,mon,tue,wed,thu,fri,sat; 2021-7-7C與C+程序設(shè)計(jì)教程-第六章20 2.枚舉變量的定義枚舉變量的定義 q間接定義間接定義 q直接定義直接定義 q無名定義無名定義 union u char ch; int i; float f; ; union u a,b; enum枚舉類型名枚舉類型名 枚舉元素枚舉元素1=整型常量整型常量1,枚舉元,枚舉元 素素2

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論