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

下載本文檔

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

文檔簡介

1、第10章 構(gòu)造數(shù)據(jù)類型南開大學(xué)非計(jì)算機(jī)專業(yè)理工科面向?qū)ο蟪绦蛟O(shè)計(jì)課程課程內(nèi)容安排課程內(nèi)容安排2 2課時(shí)課時(shí)構(gòu)造體構(gòu)造體枚舉枚舉類型重定義類型重定義typedeftypedef構(gòu)造體數(shù)組是由假設(shè)干同一類型的數(shù)據(jù)元素構(gòu)成的有序集合。例如可以用一個(gè)數(shù)組表示某個(gè)學(xué)生一切科目的成果,但是假設(shè)想要表示某個(gè)學(xué)生的學(xué)號、姓名、性別、年齡、成果等不同類型的數(shù)據(jù)集合,用數(shù)組顯然無法實(shí)現(xiàn)。這時(shí)程序員可以定義一個(gè)表示學(xué)生數(shù)據(jù)的構(gòu)造體數(shù)據(jù)類型,即學(xué)生構(gòu)造體類型,其中包括學(xué)生的各項(xiàng)數(shù)聽闡明,然后再根據(jù)新定義的構(gòu)造體類型定義相應(yīng)的構(gòu)造體變量,用來表示和存儲某個(gè)詳細(xì)的學(xué)生數(shù)據(jù)。 下面分別引見構(gòu)造體類型的定義、構(gòu)造體變量的定義

2、及其它們的運(yùn)用。 構(gòu)造體10.1.1 構(gòu)造體類型的定義構(gòu)造體類型定義的普通方式為:struct 構(gòu)造體類型名成員列表;其中,struct是關(guān)鍵字,表示構(gòu)造體類型的開場。struct后面就是定義的構(gòu)造體類型的稱號。大括號中是假設(shè)干個(gè)成員的闡明,每個(gè)成員闡明的方式為:類型 成員名;整個(gè)定義的最后以分號終了。構(gòu)造體 在這段構(gòu)造體類型的定義中,Student是構(gòu)造體類型名,即新定義的一種構(gòu)造數(shù)據(jù)類型。大括號中列出了學(xué)生構(gòu)造體中包含的各成員的類型及稱號,即學(xué)生類型包含的各項(xiàng)信息。定義了構(gòu)造體類型Student之后,就可以定義相應(yīng)的構(gòu)造體變量表示詳細(xì)的學(xué)生數(shù)據(jù)了。例如學(xué)生構(gòu)造體類型定義如下:struct

3、Studentchar num8;char name10;char sex;int age;float score;構(gòu)造體提示:構(gòu)造體類型定義以關(guān)鍵字struct開頭,一對大括號不能少,尤其不要忘記最后以分號終了。構(gòu)造體類型的定義普通放在程序開場的文件包含語句后面,也可以放到某個(gè)函數(shù)內(nèi)部。構(gòu)造體中的成員可以是前面學(xué)過的恣意類型,甚至可以是構(gòu)造體類型。構(gòu)造體類型定義只是定義了一種新的數(shù)據(jù)類型,并不是變量,不占用內(nèi)存空間。構(gòu)造體10.1.2 構(gòu)造體變量的定義和初始化1. 構(gòu)造體變量的定義構(gòu)造體變量的定義方法有三種1先定義構(gòu)造體類型,再定義構(gòu)造體變量 如前面定義過構(gòu)造體類型Student后,可以用以

4、下方式定義變量: Student s1,s2; 該語句定義了Student類型的構(gòu)造體變量s1和s2。s1和s2表示詳細(xì)的兩個(gè)學(xué)生變量,它們各自有學(xué)號、姓名、性別、年齡和成果等數(shù)據(jù)成員。構(gòu)造體2定義構(gòu)造體類型的同時(shí)定義構(gòu)造體變量struct Studentchar num8;char name10;char sex;int age;float score;stu1,stu2; 在定義構(gòu)造體類型的同時(shí)定義兩個(gè)構(gòu)造體變量,然后再以分號終了。構(gòu)造體3不聲明構(gòu)造體類型名,直接定義構(gòu)造體變量struct char num8;char name10;char sex;int age;float score

5、;stu; 直接定義上面這種構(gòu)造體類型的變量stu,但是沒有給出類型名,以后就不能再定義該類型的變量了。構(gòu)造體2. 構(gòu)造體變量的初始化和其他類型的變量一樣,定義構(gòu)造體變量的同時(shí)可以對其進(jìn)展初始化,例如:Student s1=0911001,Zhang San,M,18,606;或struct Studentchar num8;char name10;char sex;int age;float score;s2=0911002,Wang Li,F,17,666;構(gòu)造體10.1.3 構(gòu)造體變量的援用定義構(gòu)造體變量之后,系統(tǒng)為其分配內(nèi)存并可以對其援用,即對其賦值和其他操作。但是要留意一個(gè)構(gòu)造體變量

6、由假設(shè)干成員組成,所以援用構(gòu)造體變量普通是對其各個(gè)成員的援用。援用構(gòu)造體變量的成員的方式如下:構(gòu)造體變量名.成員名其中,“.是成員運(yùn)算符。構(gòu)造體如已有定義“Student stu;,那么可以進(jìn)展如下操作:strcpy(stu.num, 0912019);;stu.sex=F;stu.age=16;cinstu.score;構(gòu)造體 另外,一樣類型的構(gòu)造體變量之間可以整體賦值,例如:Student s1,s2=0911001,Zhang San,M,18,606;s1=s2;這樣,s1和s2兩個(gè)變量的內(nèi)容完全一樣,相當(dāng)于將s2的各成員的值依次賦值給s1的各成員。構(gòu)造體【例10

7、-1】編寫程序,記錄某學(xué)生的學(xué)號、姓名和三科成果,計(jì)算并輸出其平均成果。/p10_1.cpp#include using namespace std;struct Student char num8;char name10;float score3;stu=0910128, Li Ming, 86, 91, 78;構(gòu)造體int main() float s=0;for(int i=0; i3; i+)s=s+stu.scorei;endls/3stu.score0;cinstu.score0;等方式。假設(shè)寫成等方式。假設(shè)寫成“stu=0910128

8、, Li Ming, 86, 91, 78;stu=0910128, Li Ming, 86, 91, 78;那么是那么是錯(cuò)誤的,不能同時(shí)對構(gòu)造體變量整體輸入輸出,如錯(cuò)誤的,不能同時(shí)對構(gòu)造體變量整體輸入輸出,如“cinstu;cinstu;“coutstu;coutstu;等都是錯(cuò)誤的。等都是錯(cuò)誤的。構(gòu)造體3假設(shè)構(gòu)造體成員依然是構(gòu)造體類型的,那么要對數(shù)據(jù)成員進(jìn)展多層援用。如:struct Dateint year,month,day;struct Student char num8, name10;Date birthday;float score3;stu;那么要援用學(xué)生stu的出生年份,就

9、應(yīng)該表示為:stu.birthday.year。構(gòu)造體10.1.4 構(gòu)造體指針構(gòu)造體變量定義后,系統(tǒng)為其分配內(nèi)存空間,詳細(xì)分配的字節(jié)數(shù)可由sizeof構(gòu)造體類型名或者sizeof變量名求得。構(gòu)造體變量的內(nèi)存空間的首地址表示為:&構(gòu)造體變量名??梢远x構(gòu)造體類型的指針變量,讓其指向構(gòu)造體變量,指針變量訪問構(gòu)造體變量的成員時(shí)借助箭頭成員運(yùn)算符“-,方式為:指針變量-成員名。構(gòu)造體【例10-2】利用構(gòu)造體指針變量實(shí)現(xiàn):輸入學(xué)生數(shù)據(jù),然后輸出平均成果。/p10_2.cpp#include using namespace std;struct Student char num8;char nam

10、e10;float score3;構(gòu)造體int main() Student stu,*p;p=&stu; /指針p指向變量stucout請輸入學(xué)生的學(xué)號、姓名和三科成果:p-nump-name;for(int i=0;ip-scorei;cout平均成果為:“ score0+p-score1+p-score2)/3num等價(jià)于stu.num,也可以表示為(*p).num。其他成員的訪問同理。構(gòu)造體10.1.5 構(gòu)造體數(shù)組假設(shè)要操作多個(gè)學(xué)生的信息,可以定義學(xué)生類型的構(gòu)造體數(shù)組,如語句“Student stu3;定義了構(gòu)造體數(shù)組stu,它有3個(gè)元素stu0、stu1、stu2,這3個(gè)元素

11、就是3個(gè)構(gòu)造體變量,表示3個(gè)學(xué)生,而每個(gè)元素都有學(xué)號、姓名等成員,用stui.num、其中i的取值為0、1、2等方式援用。構(gòu)造體對構(gòu)造體數(shù)組可以在定義的同時(shí)進(jìn)展初始化,例如:struct Student char num8;char name10;float score3;stu2=0910127, Li Ming, 86, 91, 78,0910128, Zhou Xun, 88, 81, 79;構(gòu)造體【例 10-3】學(xué)生構(gòu)造體類型包括學(xué)號、姓名、英語成果、數(shù)學(xué)成果、計(jì)算機(jī)成果,求某班計(jì)算機(jī)成果的最高分。#include using namespace std;struct

12、 Student char num8;char name10;float score3;構(gòu)造體int main()const int N=3;Student stuN;for(int i=0;iN;i+)cout輸入學(xué)號、姓名和三科成果:;for(int j=0;jstui.scorej;構(gòu)造體 float maxScore=stu0.score2; for(int i=1;imaxScore)maxScore=stui.score2;cout全班計(jì)算機(jī)最高成果為:maxScoreendl; return 0;回答以下問題時(shí)間回答以下問題時(shí)間請思索并回答:請思

13、索并回答:1 1如何求每位學(xué)生的成果最高分如何求每位學(xué)生的成果最高分maxmax?2 2如何求全班一切學(xué)生的三科成果中有不及格成果如何求全班一切學(xué)生的三科成果中有不及格成果的學(xué)生總?cè)藬?shù)?的學(xué)生總?cè)藬?shù)?3 3如何對學(xué)生按照某科成果進(jìn)展排序?如何對學(xué)生按照某科成果進(jìn)展排序?構(gòu)造體10.1.6 構(gòu)造體與函數(shù)構(gòu)造體類型的數(shù)據(jù)可以作為函數(shù)參數(shù),在函數(shù)內(nèi)對該參數(shù)進(jìn)展操作。另外函數(shù)的前往值也可以是構(gòu)造體類型的數(shù)據(jù),函數(shù)的前往值可以是構(gòu)造體類型的數(shù)據(jù)或構(gòu)造體類型的指針。構(gòu)造體類型作為函數(shù)參數(shù)有以下幾種情況:1構(gòu)造體變量作為函數(shù)參數(shù);2構(gòu)造體數(shù)組作為函數(shù)參數(shù);3構(gòu)造體指針或援用作為函數(shù)參數(shù)。構(gòu)造體【例10-4】

14、學(xué)生構(gòu)造體類型包括學(xué)號、姓名、英語成果、數(shù)學(xué)成果、計(jì)算機(jī)成果,輸入N個(gè)學(xué)生的數(shù)據(jù),然后求N個(gè)學(xué)生一切成果的最高分。#include using namespace std;struct Student char num8;char name10;float score3;構(gòu)造體void Input(Student &s) /構(gòu)造體援用作參數(shù),輸入某個(gè)學(xué)生的數(shù)據(jù)cout輸入學(xué)號、姓名和三科成果:;for(int j=0;js.scorej;構(gòu)造體void Output(Student s) /構(gòu)造體變量作參數(shù),輸出某個(gè)學(xué)生的數(shù)據(jù)couts.num ;f

15、or(int j=0;j3;j+)couts.scorej ;coutendl;構(gòu)造體float FindMax(Student *s,int m,int n) /構(gòu)造體指針數(shù)組作參數(shù),求最高成果float maxScore=s0.score0; for(int i=0;im;i+)for(int j=0;jmaxScore)maxScore=si.scorej;return maxScore;構(gòu)造體int main() const int N=3;Student stuN;int i;for(i=0;iN;i+)Input(stui);coutN個(gè)學(xué)生的信息如下:endl;for(i=0;i

16、N;i+)Output(stui);float max=FindMax(stu,N,3);cout全班最高成果為:maxendl; return 0;構(gòu)造體Input()函數(shù)中,構(gòu)造體援用作為函數(shù)參數(shù)。主函數(shù)中調(diào)用Input()函數(shù)時(shí),實(shí)參stui傳送給形參s,s成為stui的援用,Input()函數(shù)中對s的操作相當(dāng)于對主函數(shù)中stu的操作。構(gòu)造體Output()函數(shù)中,構(gòu)造體變量作為函數(shù)參數(shù)。主函數(shù)調(diào)用Output()函數(shù)時(shí),將實(shí)參stui的值傳送給形參s,在函數(shù)中輸出s,相當(dāng)于將主函數(shù)中stui的值輸出;但是和援用作參數(shù)不同的是,變量作參數(shù),是形參向?qū)崊⒌膯蜗蛑祩魉?,?shí)參獲得形參的值之后,

17、它們之間就沒有關(guān)系了,假設(shè)在函數(shù)內(nèi)部改動實(shí)參的值,不會影響形參。構(gòu)造體FindMax()函數(shù)中,構(gòu)造體指針作為函數(shù)參數(shù),接納到的實(shí)參是主函數(shù)中的構(gòu)造體數(shù)組名即數(shù)組的首地址,形參s指向了主函數(shù)中的數(shù)組stu,在函數(shù)中對si的操作相當(dāng)于對主函數(shù)中stui的操作。本程序中留意各形參和實(shí)參的對應(yīng)關(guān)系和書寫格式。枚舉10.2 枚 舉實(shí)踐運(yùn)用中,有些變量只需幾個(gè)能夠的值,而且可以用整數(shù)來表示這些值,如一周有7天,一年有12個(gè)月等。這時(shí),可以定義枚舉enumeration類型,將幾個(gè)能夠的值列舉出來。枚舉10.2.1 枚舉類型的定義枚舉類型的定義方式為:enum 枚舉類型名枚舉常量列表;其中,enum是枚舉

18、類型關(guān)鍵字,枚舉類型名是新定義的一種構(gòu)造數(shù)據(jù)類型,大括號中將這種枚舉類型能夠有的幾個(gè)常量的名字列舉出來,最后以分號終了。枚舉例如:enum Weekdaysun,mon,tue,wed,thu,fri,sat;定義了枚舉類型Weekday,這個(gè)類型的7個(gè)數(shù)據(jù)在大括號中被列舉出來,sun,mon,tue, wed,thu,fri,sat等被稱為Weekday的枚舉常量,表示一周中的七天,而且它們默許對應(yīng)7個(gè)整數(shù)值0,1,2,3,4,5,6。枚舉在定義枚舉類型時(shí),也可以指定枚舉常量對應(yīng)的整數(shù)值。例如:enum Weekdaysun=7,mon=1,tue,wed,thu,fri,sat;這時(shí),枚舉

19、常量的值依次是7,1,2,3,4,5,6。又如:enum Colorred,green,blue,white=0,black;枚舉常量的值依次是0,1,2,0,1。枚舉10.2.2 枚舉變量的定義和援用定義枚舉類型之后,就可以定義相應(yīng)的枚舉變量,可以先定義枚舉類型,再定義枚舉變量,也可以在定義枚舉類型的同時(shí)定義枚舉變量。例如:enum Colorred,green,blue,white,blackco1,co2;或者:enum Colorred,green,blue,white,black;Color co1,co2;枚舉定義了枚舉變量之后,可以對枚舉變量進(jìn)展援用即可以對枚舉變量進(jìn)展初始化、賦

20、值或其他操作,不過應(yīng)該留意的是對枚舉變量只能賦值為枚舉常量之一。如:enum Colorred,green,blue,white,blackco1=red,co2;co2=blue; /不能寫為:co2=2;但是在參與其他計(jì)算或操作時(shí),co1的值相當(dāng)于整數(shù)0,co2的值相當(dāng)于整數(shù)2,如:coutco2endl;的輸出結(jié)果為2;coutco1+5endl;的輸出結(jié)果為5;枚舉【例10-5】函數(shù)Output的功能是輸出參數(shù)對應(yīng)的顏色。/p10_5.cpp#include using namespace std;enum Colorred,green,blue,white,black;枚舉void Output(Color co)switch(co)case 0:coutredendl;break;case 1:coutgreenendl;break;case 2:coutblueendl;break;case 3:coutwhiteendl;break;case 4:coutblackendl;break;枚舉int main(

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論