




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、復(fù)雜數(shù)據(jù)類型yh第第7章章 復(fù)雜數(shù)據(jù)類型復(fù)雜數(shù)據(jù)類型7.1 結(jié)構(gòu)體結(jié)構(gòu)體7.2 聯(lián)合體聯(lián)合體7.3 枚舉類型枚舉類型7.4 復(fù)雜數(shù)據(jù)類型應(yīng)用綜合舉例復(fù)雜數(shù)據(jù)類型應(yīng)用綜合舉例復(fù)雜數(shù)據(jù)類型yh7.1 結(jié)構(gòu)體結(jié)構(gòu)體 在實(shí)際問題中,一組數(shù)據(jù)往往具有不同的數(shù)據(jù)類型。例如,在學(xué)生登記表中,姓名應(yīng)為字符型;學(xué)號可為整型或字符型;年齡應(yīng)為整型;性別應(yīng)為字符型;成績可為整型或?qū)嵭汀?顯然不能用一個數(shù)組來存放這一組數(shù)據(jù)。因?yàn)閿?shù)組中各元素的類型和長度都必須一致,以便于編譯系統(tǒng)處理。 “結(jié)構(gòu)體”是一種構(gòu)造類型,它是由若干“成員”組成的。每一個成員可以是一個基本數(shù)據(jù)類型或者又是一個構(gòu)造類型。 復(fù)雜數(shù)據(jù)類型yh7.1.1
2、 結(jié)構(gòu)體類型的定義結(jié)構(gòu)體類型的定義 在學(xué)生登記表中,每個學(xué)生的記錄都是由編號,姓名,性別和工資等數(shù)據(jù)項組成,這些數(shù)據(jù)項描述了一個員工的幾個方面的信息。 如果分開用獨(dú)立的變量表示,很難看出這些數(shù)據(jù)有什么聯(lián)系,處理起來也不方便。 C語言提供了結(jié)構(gòu)體數(shù)據(jù)類型,將不同類型的數(shù)據(jù)組織成一個整體 。復(fù)雜數(shù)據(jù)類型yh7.1.1 結(jié)構(gòu)體類型的定義結(jié)構(gòu)體類型的定義 定義一個結(jié)構(gòu)體的一般形式為: struct 結(jié)構(gòu)體名結(jié)構(gòu)體名 成員列表;成員列表; ; struct是關(guān)鍵字,表示一個結(jié)構(gòu)體類型,成員列表由若干個成員組成, 每個成員都是該結(jié)構(gòu)體的一個組成部分。對每個成員也必須作類型說明,其形式為:類型說明符類型說明
3、符 成員名成員名; 成員名的命名應(yīng)符合標(biāo)識符的書寫規(guī)定。應(yīng)注意在括號后的分號是不可少的。復(fù)雜數(shù)據(jù)類型yh7.1.2 結(jié)構(gòu)體變量的定義和引用結(jié)構(gòu)體變量的定義和引用 定義一個結(jié)構(gòu)體變量有以下三種方法: 1. 先定義結(jié)構(gòu)體,再說明結(jié)構(gòu)體變量。如: struct workerint num;char name20;char sex;float wage;struct worker person1,person2;復(fù)雜數(shù)據(jù)類型yh7.1.2 結(jié)構(gòu)體變量的定義和引用結(jié)構(gòu)體變量的定義和引用 關(guān)鍵字struct說明該變量是結(jié)構(gòu)體類型,而worker指定變量為某一特定的結(jié)構(gòu)體類型。 說明了結(jié)構(gòu)體變量后,系統(tǒng)就會
4、為每個結(jié)構(gòu)體變量分配一段連續(xù)的內(nèi)存空間 char genderchar name20int numperson1float wagechar genderchar name20int numfloat wageperson2復(fù)雜數(shù)據(jù)類型yh7.1.2 結(jié)構(gòu)體變量的定義和引用結(jié)構(gòu)體變量的定義和引用 2. 在定義結(jié)構(gòu)體類型的同時說明結(jié)構(gòu)體變量。例如: struct workerint num;char name20;char sex;float wage;person1,person2;復(fù)雜數(shù)據(jù)類型yh7.1.2 結(jié)構(gòu)體變量的定義和引用結(jié)構(gòu)體變量的定義和引用 3. 直接說明結(jié)構(gòu)體變量。例如: st
5、ructint num;char name20;char sex;float wage;person1,person2; 復(fù)雜數(shù)據(jù)類型yh7.1.2 結(jié)構(gòu)體變量的定義和引用結(jié)構(gòu)體變量的定義和引用在結(jié)構(gòu)體類型中,成員也可以是一個結(jié)構(gòu)體, 即構(gòu)成了嵌套的結(jié)構(gòu)體。如: struct dateint month;int day;int year;structint num;char name20;char sex;struct date birthday;float wage;person1,person2; 復(fù)雜數(shù)據(jù)類型yh7.1.2 結(jié)構(gòu)體變量的定義和引用結(jié)構(gòu)體變量的定義和引用 引用結(jié)構(gòu)體變量的成
6、員可以通過成員運(yùn)算符“.”來表示。 結(jié)構(gòu)體變量名結(jié)構(gòu)體變量名.成員名成員名 例如:person1.num 即第一個人的學(xué)號person2.sex 即第二個人的性別 person1.birthday.month 即第一個人出生的月份 復(fù)雜數(shù)據(jù)類型yh7.1.2 結(jié)構(gòu)體變量的定義和引用結(jié)構(gòu)體變量的定義和引用 定義一個指向結(jié)構(gòu)體變量person1的指針:struct worker *p1;p1 = &person1; 要引用指針指向的結(jié)構(gòu)體成員,可以這樣來表示:指針變量名指針變量名-結(jié)構(gòu)體成員結(jié)構(gòu)體成員例如:用p1-num, p1-name, p1-sex等來引用結(jié)構(gòu)體中的成員。復(fù)雜數(shù)據(jù)類型
7、yh7.1.3 結(jié)構(gòu)體變量的賦值結(jié)構(gòu)體變量的賦值 結(jié)構(gòu)體變量的賦值就是給各成員賦值,可直接通過賦值語句來完成,如:person1.num=28536;strcpy(,“Liu Xing); 結(jié)構(gòu)體變量的賦值也可以通過對成員的輸入語句來實(shí)現(xiàn),如:scanf(%c %f,&person1.sex, &person1.wage);復(fù)雜數(shù)據(jù)類型yh7.1.4 簡化結(jié)構(gòu)體類型名簡化結(jié)構(gòu)體類型名struct 結(jié)構(gòu)體類型名結(jié)構(gòu)體類型名 結(jié)構(gòu)體變量名結(jié)構(gòu)體變量名定義結(jié)構(gòu)體變量時,不能只指定為“struct”而不指定結(jié)構(gòu)體名,必須用“struct 結(jié)構(gòu)體類型名”兩個符號一
8、起來表示一個結(jié)構(gòu)體類型。 用宏定義簡化結(jié)構(gòu)體類型名的方法如下:#define 宏名 struct 結(jié)構(gòu)體類型名 宏名結(jié)構(gòu)體成員列表;宏名 結(jié)構(gòu)體變量名; 復(fù)雜數(shù)據(jù)類型yh7.1.4 簡化結(jié)構(gòu)體類型名簡化結(jié)構(gòu)體類型名 還可以通過typedef命令來簡化結(jié)構(gòu)體類型名。typedef命令是定義新的類型名來代替已有的類型名。如:typedef int INTEGER;該語句指定用INTEGER表示int類型 用typedef定義一個結(jié)構(gòu)體類型的方法如下:typedef structint num;char name20;char sex;float wage; WKER;WKER person1, p
9、erson2;復(fù)雜數(shù)據(jù)類型yh7.1.5 結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組一個結(jié)構(gòu)體類型的變量也可以作為一個數(shù)組的元素,因此可以構(gòu)成結(jié)構(gòu)體型數(shù)組。 struct workerint num;char *name;char sex;float wage;person5; 定義了一個結(jié)構(gòu)體數(shù)組person,共有5個元素,person0person4。每個數(shù)組元素都具有struct worker的結(jié)構(gòu)形式。 復(fù)雜數(shù)據(jù)類型yh7.1.5 結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組struct workerint num;char *name;char sex;float wage;person5=28535,Li ping,M,250
10、0,28536,Liu Xing,M,2300,28537,He fang,F,2360,28538,Cheng ling,F,2680,28539,Wang ming,M,2400;復(fù)雜數(shù)據(jù)類型yh7.2 聯(lián)合體聯(lián)合體 在實(shí)際問題中有很多這樣的例子。例如在學(xué)校的學(xué)生信息中填寫以下表格: 學(xué) 號 姓 名課 程 成 績 對于“成績”一項,有的課程用分?jǐn)?shù)表示,有的課程用等級A,B,C,D來表示。如果有分?jǐn)?shù)表示成績,可用一個整型變量,但如果用等級A,B,C,D來表示,就只能用字符類型的變量。要求把這兩種類型不同的數(shù)據(jù)都填入“成績”這個變量中,就必須把“成績”定義為包含整型和字符型這兩種類型的“聯(lián)合體
11、”。 在結(jié)構(gòu)體中各成員有各自的內(nèi)存空間,一個結(jié)構(gòu)體變量的總長度是各成員長度之和。而在“聯(lián)合體”中,各成員共享一段內(nèi)存空間,一個聯(lián)合體變量的長度等于各成員中最長的長度。 復(fù)雜數(shù)據(jù)類型yh7.2.1 聯(lián)合體類型的定義聯(lián)合體類型的定義 定義一個聯(lián)合體類型的一般形式為: union 聯(lián)合體名聯(lián)合體名 成員表成員表 ; 成員表中含有若干成員,成員的一般形式為: 類型說明符類型說明符 成員名成員名 復(fù)雜數(shù)據(jù)類型yh7.2.1 聯(lián)合體類型的定義聯(lián)合體類型的定義例如:union resultInt score;char level;定義了一個名為result的聯(lián)合體類型,它含有兩個成員,一個為整型,成員名為s
12、core;另一個為字符類型,成員名為level。 復(fù)雜數(shù)據(jù)類型yh7.2.2 聯(lián)合體變量的定義和引用聯(lián)合體變量的定義和引用 聯(lián)合體變量的說明和結(jié)構(gòu)體變量的說明方式相同,也有三種形式。 1.先定義,再說明 union resultint score;char level;union result a,b; 2.定義同時說明 union result int score;char level; a,b; 3.直接說明 union int score;char level; a,b; 復(fù)雜數(shù)據(jù)類型yh7.2.2 聯(lián)合體變量的定義和引用聯(lián)合體變量的定義和引用 經(jīng)說明后的a,b變量均為result類型。
13、 聯(lián)合體的score成員為整型,占用內(nèi)存2個字節(jié)空間,level成員為一個字符,占用內(nèi)存1個字節(jié)空間,它們共用內(nèi)存中的2個字節(jié)單元。 因此,a,b變量的長度應(yīng)等于 result的成員中最長的長度,即等于score成員的長度,共2個字節(jié)。 復(fù)雜數(shù)據(jù)類型yh7.2.2 聯(lián)合體變量的定義和引用聯(lián)合體變量的定義和引用 聯(lián)合體變量的成員引用方式為: 聯(lián)合變量名聯(lián)合變量名.成員名成員名 例如,a被說明為result類型的變量之后,可使用a.score或a.level來引用聯(lián)合體變量的成員。 聯(lián)合體變量的成員可以像普通變量一樣進(jìn)行其數(shù)據(jù)類型允許的運(yùn)算操作,如:賦值操作,輸入輸出操作,代數(shù)運(yùn)算,關(guān)系運(yùn)算等。
14、復(fù)雜數(shù)據(jù)類型yh7.2.3 聯(lián)合體變量的賦值聯(lián)合體變量的賦值對聯(lián)合體變量的賦值和使用都只能是對變量的成員進(jìn)行。如:a.score = 87;a.score +;printf(“score=%dn”,a.score);不允許只用聯(lián)合體變量名作賦值或其它操作。以下兩種操作都是錯誤的:a = b;printf(“score=%dn”,a);也不允許對聯(lián)合體變量作初始化賦值,賦值只能在程序中進(jìn)行。如:union result int score;char level; a = 87,”A”;復(fù)雜數(shù)據(jù)類型yh7.2.3 聯(lián)合體變量的賦值聯(lián)合體變量的賦值 例7-6:用聯(lián)合體變量實(shí)現(xiàn)不同類型數(shù)據(jù)的輸出。 #
15、include stdio.hunion dataint i;float f;main()union data d;d.i=200;printf(“i:%dn”,d.i);d.f=200.0;printf(“f:%fn”,d.f);程序運(yùn)行結(jié)果為:i:200f:200.000000復(fù)雜數(shù)據(jù)類型yh7.3 枚舉類型枚舉類型 在實(shí)際問題中,有些變量的取值被限定在一個有限的范圍內(nèi)。例如,一個星期內(nèi)只有七天,一年只有十二個月,一個班每周有六門課程等等。 如果把這些量說明為整型,字符型或其它類型顯然是不妥當(dāng)?shù)?。為此,語言提供了一種稱為“枚舉”的類型。 在“枚舉”類型的定義中列舉出所有可能的取值,被說明為
16、該“枚舉”類型的變量取值不能超過定義的范圍。 復(fù)雜數(shù)據(jù)類型yh7.3 枚舉類型枚舉類型 枚舉類型定義的一般形式為: enum 枚舉名枚舉名 枚舉值表枚舉值表 ; enum為關(guān)鍵字,表示定義一個枚舉類型。枚舉名表示定義的具體枚舉類型的名字。在枚舉值表中應(yīng)羅列出該枚舉類型的所有可用值,這些值也稱為枚舉元素。例如: enum weekday sun,mou,tue,wed,thu,fri,sat ; 該枚舉名為weekday,枚舉值共有7個,即一周中的七天。凡被說明為weekday類型變量的取值只能是七天中的某一天,并用枚舉值表中的7個可用值分別表示。復(fù)雜數(shù)據(jù)類型yh7.3 枚舉類型枚舉類型 枚舉變
17、量的說明 :enum weekday.;enum weekday a,b,c; 或者為:enum weekday.a,b,c; 或者為: enum.a,b,c;復(fù)雜數(shù)據(jù)類型yh7.3 枚舉類型枚舉類型使用說明:1.枚舉值是常量,不是變量。不能在程序中用賦值語句再對它賦值。例如 : sun=5;mon=2;sun=mon; 都是錯誤語句。 2.枚舉元素本身由系統(tǒng)定義了一個表示序號的數(shù)值,從0 開始順序定義為0,1,2。 如在weekday中,sun值為0,mon值為1, ,sat值為6。 main()enum weekday sun,mon,tue,wed,thu,fri,sat a,b,c;a
18、=sun;b=mon;c=tue;printf(%d,%d,%d,a,b,c);輸出結(jié)果為:1,2,3復(fù)雜數(shù)據(jù)類型yh7.3 枚舉類型枚舉類型3. 只能把枚舉值賦予枚舉變量,不能把元素的數(shù)值直接賦予枚舉變量。 如:a=sum;b=mon; 這兩個賦值語句是正確的。 而: a=0;b=1; 這兩個賦值語句是錯誤的。 如一定要把數(shù)值賦予枚舉變量,則必須用強(qiáng)制類型轉(zhuǎn)換,如:a=(enum weekday)2;其意義是將順序號為2的枚舉元素賦予枚舉變量a,相當(dāng)于:a=tue; 還應(yīng)該說明的是枚舉元素不是字符常量也不是字符串常量,使用時不要加單、雙引號。如: a=tue;a=”mon”; 這兩種賦值語句
19、都是錯誤的。復(fù)雜數(shù)據(jù)類型yh7.3 枚舉類型枚舉類型4枚舉定義的時候可以自己定義元素的順序號。若給某個元素定義了順序號,其后面的順序號依次加1,如:enum string x1=5,x2,x3,x4;enum string x=x3;此時,枚舉變量x實(shí)際上的順序號是7。枚舉變量缺省是認(rèn)為第一個元素的順序號是0,然后依次加1,如果遇到用戶自定義順序號,則按照用戶的定義號,后面的元素一次加1。如: enum string x1,x2=0,x3=50,x4x;由于枚舉變量x的第一個元素x1沒有定義順序號,所以缺省認(rèn)為x1=0。而第二個和第三個元素x2和x3是用戶自定義順序號,x2=0,x3=50。第四個元素x4沒有定義順序號,則按照前一個元素的順序號加1,因此x4
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 武威市重點(diǎn)中學(xué)2025屆九年級化學(xué)第一學(xué)期期末復(fù)習(xí)檢測試題含解析
- 河南省鎮(zhèn)平縣聯(lián)考2025屆八年級物理第一學(xué)期期末質(zhì)量檢測試題含解析
- 和君職業(yè)學(xué)院《工程施工課程設(shè)計》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣西崇左市2025屆物理八上期末經(jīng)典試題含解析
- 陜西省西安交大附中2024-2025學(xué)年物理八上期末監(jiān)測試題含解析
- 撫順師范高等??茖W(xué)校《美學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 云南機(jī)電職業(yè)技術(shù)學(xué)院《運(yùn)動訓(xùn)練》2023-2024學(xué)年第一學(xué)期期末試卷
- 湖南省湘西土家族苗族自治州鳳凰縣2024-2025學(xué)年九年級化學(xué)第一學(xué)期期末檢測試題含解析
- 甘肅省定西市渭源縣2024年物理八年級第一學(xué)期期末調(diào)研模擬試題含解析
- 綿陽城市學(xué)院《跆拳道高級》2023-2024學(xué)年第一學(xué)期期末試卷
- 內(nèi)科四大穿刺診療規(guī)范
- DGJ08-81-2015 現(xiàn)有建筑抗震鑒定與加固規(guī)程
- 醫(yī)源性早發(fā)性卵巢功能不全臨床治療與管理指南
- 商務(wù)客服禮儀培訓(xùn)
- 房屋租賃合同范本15篇
- 2025至2030年中國飛行控制器行業(yè)市場供需態(tài)勢及未來趨勢研判報告
- 2025年汽車維修工職業(yè)資格考試試卷及答案
- 安全B證題庫-安全生產(chǎn)知識考試用書
- 2025至2030年中國錦氨綸汗布市場分析及競爭策略研究報告
- 2024年江蘇地質(zhì)局所屬事業(yè)單位招聘考試真題
- 2025年中小學(xué)暑假安全教育主題家長會 課件
評論
0/150
提交評論