




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第七章 用戶自定義數(shù)據(jù)類(lèi)型7.1 結(jié)構(gòu)體類(lèi)型7.1.1 結(jié)構(gòu)體的概述一個(gè)學(xué)生的學(xué)號(hào)、姓名、性別、年齡、成績(jī)、家庭住址 num name sex age score addr 10010 Li Fun M 18 87.5 BeiJing聲明一個(gè)新的結(jié)構(gòu)體的類(lèi)型:struct Studentint num;char name20;char sex;int age;float score;char addr30;7.1.2 結(jié)構(gòu)體類(lèi)型變量的定義方法及其初始化1. 定義結(jié)構(gòu)體變量的方法(1) 先聲明結(jié)構(gòu)體的類(lèi)型再定義變量名Student student1,student2;(2) 聲明類(lèi)型的同時(shí)定義變
2、量struct Studentint num;char name20;char sex;int age;float score;char addr30;std1,std2;(3) 直接定義結(jié)構(gòu)體類(lèi)型變量struct int num;char name20;char sex;int age;float score;char addr30;std1,std2;(4) 成員也可以是一個(gè)結(jié)構(gòu)體變量struct Dateint month;int day;int year;struct Studentint num;char name20;char sex;int age;Date birthday;f
3、loat score;char addr30;2. 結(jié)構(gòu)體變量的初始化struct Studentint num;char name20;char sex;int age;float score;char addr30;student1=10001,Zhang Xin,M,19,90.5,shanghai;Student student2=10002,Wang Li,F,20,98,Beijing;7.1.3 引用結(jié)構(gòu)體變量(1) 可以將一個(gè)結(jié)構(gòu)體變量的值賦給另一個(gè)具有相同結(jié)構(gòu)的結(jié)構(gòu)體變量。student1=student2;(2) 可以引用一個(gè)結(jié)構(gòu)體變量中的一個(gè)成員的值。student1.n
4、um=10010; .是成員運(yùn)算符,它的優(yōu)先級(jí)最高。(3) 對(duì)于結(jié)構(gòu)體嵌套,要逐級(jí)引用。student1.birthday.month=11;(引用student1中birthday中的month成員)。(4) 不能將一個(gè)結(jié)構(gòu)體變量作為一個(gè)整體進(jìn)行輸入和輸出。(5) 對(duì)于結(jié)構(gòu)體變量的成員可以像普通變量一樣進(jìn)行各種運(yùn)算。(6) 可以引用結(jié)構(gòu)體變量成員的地址,也可以引用結(jié)構(gòu)體變量的地址。cout&student1;cout&student1.age;例7.1 引用結(jié)構(gòu)體變量中的成員 P199#include using namespace std;struct Dateint month;int
5、day;int year;struct Studentint num;char name20;char sex;Date birthday;float score;char addr30;student1,student2=10002,Wang Li,F,5,23,1982,89.5;void main()student1=student2;coutstudent1.numendl;endl;coutstudent1.sexendl;coutstudent1.birthday.month/student1.birthday.day/student1.birth
6、day.yearendl;coutstudent1.scoreendl;10002Wang LiF5/23/1982 結(jié)構(gòu)體數(shù)組1. 定義結(jié)構(gòu)體數(shù)組struct Studentint num;char name20;char sex;int age;float score;char addr30;stu3;Student x8;2. 結(jié)構(gòu)體數(shù)組的初始化Student y2=10101,Li Lin,M,18,87.5,103 Beijing Road ,10102,Zhang Fun,M19,99,130 Shanghai Road;3. 結(jié)構(gòu)體數(shù)組應(yīng)用舉例例7.2 對(duì)候選人
7、得票統(tǒng)計(jì)程序.P202#include using namespace std;struct Personchar name20;int count;void main()Person leader3=Li,0,Zhang,0,Fun,0;int i,j;char leader_name20;for(i=0;ileader_name;for(j=0;j3;j+)if(strcmp(leader_name,)=0)leaderj.count+;break;for(i=0;i3;i+):leaderi.countendl;ZhangLiFun
8、LiZhangLiZhangLiFunWangLi:4Zhang:3Fun:27.1.5 指向結(jié)構(gòu)體變量的指針1. 通過(guò)指向結(jié)構(gòu)體變量的指針引用結(jié)構(gòu)體變量中的成員例7.3 指向結(jié)構(gòu)體變量的指針的應(yīng)用 P204#include #include using namespace std;void main()struct Studentint num;string name;char sex;float score;Student stu;Student *p=&stu;stu.num=10301;=Wang Fun;stu.sex=F;stu.score=89.5;coutstu
9、.num stu.sex stu.scoreendl;cout(*p).num (*p).name (*p).sex (*p).scoreendl;coutnum name sex score是指向運(yùn)算符,即指向結(jié)構(gòu)體變量運(yùn)算符。請(qǐng)分析以下幾種運(yùn)算:p-np-n+p-n#include #include using namespace std;void main()struct Studentint num;string name;char sex;float score;Student stu;Student *p=&stu;stu.num=10301;coutnumend
10、l;coutnum+endl;coutnumendl;coutstu.numendl;103011030110303103032. 用結(jié)構(gòu)體變量和指向結(jié)構(gòu)體變量的指針構(gòu)成鏈表struct Studentint num;float score;Student *next;利用指向自己的指針構(gòu)成鏈表。例7.4 P206#define NULL 0#include using namespace std;struct Studentint num;float score;Student *next;void main()Student a,b,c,*head,*p;a.num=31001;a.sco
11、re=89.5;b.num=31003;b.score=90;c.num=31007;c.score=85;head=&a;a.next=&b;b.next=&c;c.next=NULL;p=head;while(p!=NULL)coutnum scorenext;31001 89.531003 9031007 857.1.6 結(jié)構(gòu)體類(lèi)型數(shù)據(jù)作為函數(shù)參數(shù)例7.5(1) 用結(jié)構(gòu)體變量作函數(shù)參數(shù)。#include #include using namespace std;struct Studentint num;char name20;float score3;void main()void p
12、rint(Student);Student stu;stu.num=12345;strcpy(,Li Feng);stu.score0=67.5;stu.score1=89;stu.score2=78.5;print(stu);void print(Student stu)coutstu.num stu.score0 stu.score1 stu.score2endl;12345 Li Feng 67.5 89 78.5(2) 用指向結(jié)構(gòu)體變量的指針作實(shí)參數(shù)。#include #include using namespace std;struct Studen
13、tint num;char name20;float score3;void main()void print(Student*);Student stu=12345,Li Feng,67.5,89,78.5;print(&stu);void print(Student *p)coutnum name score0 score1 score2endl;12345 Li Feng 67.5 89 78.5(3) 用結(jié)構(gòu)體變量的引用做函數(shù)參數(shù)。#include #include using namespace std;struct Studentint num;string name;float
14、score3;void main()void print(const Student &);Student stu;stu.num=12345;=Li Feng;stu.score0=67.5;stu.score1=89;stu.score2=78.5;print(stu);void print(const Student &stu)coutstu.num stu.score0 stu.score1 stu.score2endl;12345 Li Feng 67.5 89 用new和delete運(yùn)算符進(jìn)行動(dòng)態(tài)分配和撤銷(xiāo)內(nèi)存空間int *p=
15、new int;delete p;int *p=new int(100);delete p;char *pc=new char10;delete pc;/刪除數(shù)組int (*pp)4=new int54;deletepp;/刪除數(shù)組例7.6 開(kāi)辟空間存放一個(gè)結(jié)構(gòu)體變量。#include using namespace std;struct Studentint num;string name;char sex;void main()Student *p;p=new Student;p-num=10123;p-name=Wang Fun;p-sex=M;coutname num sexendl;
16、delete p;Wang Fun 10123 M new和delete運(yùn)算符與含有指向自己的指針的結(jié)構(gòu)體,就可以實(shí)現(xiàn)動(dòng)態(tài)鏈表,在數(shù)據(jù)結(jié)構(gòu)課中要詳細(xì)介紹。7.2 共用體類(lèi)型7.2.1 共用體的概念幾個(gè)不同的變量共占同一段內(nèi)存的結(jié)構(gòu),稱(chēng)為共用體(有的書(shū)稱(chēng)之為聯(lián)合)。7.2.2 對(duì)共用體變量的訪問(wèn)方式【例】演示聯(lián)合的例子。這里exam是個(gè)聯(lián)合,為說(shuō)明數(shù)據(jù)成員val和h開(kāi)始于同一地址,考慮下面的程序:#include #includeunion examshort val; char h2;void main()exam var;var.h0= A;coutThe value of var.val:
17、var.valendl;coutThe value of var.h0:var.h0endl;var.val=66;var.h1=A;coutvar.valendl;coutvar.h0endl;coutvar.h1endl;/65*256+66=16706The value of var.val:65The value of var.h0:A16706BA7.2.3 共用體類(lèi)型數(shù)據(jù)的特點(diǎn)(1) 每一瞬時(shí)只有一個(gè)成員起作用,其它成員不起作用。(2) 共用體變量的地址和它的各個(gè)成員的地址都是同一地址。不能對(duì)共用體變量賦值;不能企圖引用變量名來(lái)得到一個(gè)值;不能在定義共用體變量時(shí)對(duì)它進(jìn)行初始化;不能
18、用共用體變量作為函數(shù)參數(shù)。7.3 枚舉類(lèi)型如果一個(gè)變量只有幾中可能的值,可以定義為枚舉類(lèi)型 enum colorRED,BLUE,GREEN;關(guān)鍵字enum標(biāo)志枚舉類(lèi)型定義開(kāi)始,分號(hào)標(biāo)志其結(jié)束。在C+中允許不寫(xiě)enum;enum后的標(biāo)識(shí)符color稱(chēng)為枚舉類(lèi)型名。枚舉元素(枚舉常量):花括號(hào)內(nèi)用逗號(hào)隔開(kāi)的標(biāo)識(shí)符是為這個(gè)類(lèi)型定義的常量,枚舉元素的缺省賦值:編譯器為這些枚舉常量賦予不同的值,第一個(gè)常量RED值為0,以后的常量的值是它前面常量的值增1,所以,BLUE為1,GREEN為2 。聲明枚舉變量:枚舉標(biāo)記可以用類(lèi)型名說(shuō)明具有該類(lèi)型的變量,例如: color CorVariable;上面的語(yǔ)句說(shuō)
19、明了變量CorVariable,可以將說(shuō)明類(lèi)型color時(shí)所列舉的枚舉常量中的任何一個(gè)置給變量CorVariable , 例如: CorVariable=GREEN; coutCorVariableendl;#includevoid main()enum colorRED,BLUE,GREEN;color CorVariable;CorVariable=GREEN;coutCorVariableendl;coutsizeof(GREEN)endl;/CorVariable=1;/這樣不行CorVariable=(color)1;24枚舉常量的自定義賦值:說(shuō)明可在枚舉常量名之后使用等號(hào)將一個(gè)(c
20、har或int類(lèi)型的)常量置給一個(gè)枚舉常量名,以改變編譯的缺省賦值,例如: enum color RED=-1,BLUE,GREEN=6,YELLOW;這里RED代表值1,而B(niǎo)LUE為它前 面的枚舉常量的值加1,所以BLUE代表值0。同樣,GREEN的值為6,而YELLOW的值為7。為枚舉常量指定重復(fù)的值也是合法的,例如: enum state FALSE,TRUE,FAIL=0,BAD=0;在這個(gè)說(shuō)明中FALSE,FAIL和BAD的值都為0。枚舉常量的類(lèi)型:枚舉常量的類(lèi)型隱含是unsigned char 或int類(lèi)型 ,但到底是何種類(lèi)型取決于枚舉常量的值。如果所有的值都可用unsigned
21、char表示,則它就是每個(gè)枚舉常量的類(lèi)型。例7.7 口袋中有紅、黃、藍(lán)、白、黑5種顏色的球若干個(gè)。每次從口袋中任意取出3個(gè)球,問(wèn)得到3種不同顏色球的可能取法,輸出每種排列的情況。#include#includeusing namespace std;enum colorred,yellow,blue,white,black;void main()void print(color);color pri;int i,j,k,n=0;for(i=red;i=black;i+)for(j=red;j=black;j+)if(i!=j)for(k=red;k=black;k+)if(k!=i)&(k!=
22、j)coutsetw(3)+n;pri=color(i);print(pri);pri=color(j);print(pri);pri=color(k);print(pri);coutendl;couttotal:nendl;void print(color co)coutsetw(8);switch(co)case red:coutred;break;case yellow:coutyellow;break;case blue:coutblue;break;case white:coutwhite;break;case black:coutblack;break;default:break;
23、 38 white red blue 39 white red black 40 white yellow red 41 white yellow blue 42 white yellow black 43 white blue red 44 white blue yellow 45 white blue black 46 white black red 47 white black yellow 48 white black blue 49 black red yellow 50 black red blue 51 black red white 52 black yellow red 53
24、 black yellow blue 54 black yellow white 55 black blue red 56 black blue yellow 57 black blue white 58 black white red 59 black white yellow 60 black white bluetotal:607.4 用typedef聲明類(lèi)型用typedef聲明一個(gè)新的類(lèi)型名來(lái)代替已有的類(lèi)型名。typedef int INTEGER;typedef float REAL;則,以下兩行等價(jià):int i,j;float a,b;INTEGER i,j;REAL a,b;typedef int NUM100;NUM n;/定義n為包含100整型元素?cái)?shù)組。typedef char *STRING;/STRING為字符指針類(lèi)型。STRING p,s10;/p為字符指針變量,s為字符指針數(shù)組.typedef int (*POINTER)(); /POINTER為指
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司電商活動(dòng)策劃方案
- 公司職員會(huì)議活動(dòng)方案
- 可摘義齒固位技術(shù)-洞察及研究
- 2025年供熱通風(fēng)與空調(diào)工程師考試試題及答案
- 2025年法律與生物倫理的考試試題及答案
- 2025年中國(guó)類(lèi)人膠原蛋白行業(yè)市場(chǎng)全景分析及前景機(jī)遇研判報(bào)告
- 2024年度浙江省護(hù)師類(lèi)之主管護(hù)師典型題匯編及答案
- 公寓防火安全教育
- 員工入職三級(jí)安全培訓(xùn)
- DB43-T 2864-2023 土家族非遺樂(lè)器咚咚喹通.用技術(shù)要求
- 2023年黑龍江省文化和旅游系統(tǒng)事業(yè)單位人員招聘筆試模擬試題及答案解析
- 2023年江西新余市數(shù)字產(chǎn)業(yè)投資發(fā)展有限公司招聘筆試題庫(kù)含答案解析
- LY/T 3323-2022草原生態(tài)修復(fù)技術(shù)規(guī)程
- 部編版六年級(jí)語(yǔ)文下冊(cè)課件第1課《北京的春節(jié)》《臘八粥》
- 涂裝工模擬練習(xí)題含答案
- 2023-2024學(xué)年河南省永城市小學(xué)數(shù)學(xué)二年級(jí)下冊(cè)期末評(píng)估測(cè)試題
- 乳腺疾病的超聲診斷 (超聲科)
- 服務(wù)精神:馬里奧特之路
- 《建筑施工安全檢查標(biāo)準(zhǔn)》JGJ59-2011圖解
- 華為大學(xué)人才培養(yǎng)與發(fā)展實(shí)踐
- 醫(yī)療垃圾廢物處理課件
評(píng)論
0/150
提交評(píng)論