




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第7章自定義數(shù)據(jù)類型7.1結(jié)構(gòu)體類型7.2共用體7.3枚舉類型7.4用typedef聲明類型基本的數(shù)據(jù)類型:int、float、double、char、 bool、指針類型、引用類型用戶自定義數(shù)據(jù)類型:
數(shù)組 結(jié)構(gòu)體(structure)類型 共用體(union)類型 枚舉(enumeration)類型
類(class)類型有時(shí)需要將不同類型的數(shù)據(jù)組合成一個(gè)有機(jī)的整體,以供用戶方便地使用。這些組合在一個(gè)整體中的數(shù)據(jù)是互相聯(lián)系的。例如,一個(gè)學(xué)生的學(xué)號(hào)、姓名、性別、年齡、成績(jī)、家庭地址等項(xiàng),都是這個(gè)學(xué)生的屬性。見圖7.1。 圖7.17.1結(jié)構(gòu)體類型
7.1.1結(jié)構(gòu)體概述利用結(jié)構(gòu)體將若干個(gè)類型不同的數(shù)據(jù)項(xiàng)組合在一起。它相當(dāng)于SQLServer中的記錄(record)。例如,定義一個(gè)學(xué)生的結(jié)構(gòu)體:structStudent
//聲明一個(gè)結(jié)構(gòu)體類型Student{
intnum;
//包括一個(gè)整型變量num
charname[20];
//包括一個(gè)字符數(shù)組name
charsex;
//包括一個(gè)字符變量sex
intage;
//包括一個(gè)整型變量age
floatscore;
//包括一個(gè)單精度型變量
charaddr[30];
//包括一個(gè)字符數(shù)組addr};
//最后有一個(gè)分號(hào)struct是聲明結(jié)構(gòu)體類型時(shí)所必須使用的關(guān)鍵字。Student是一個(gè)結(jié)構(gòu)體類型名,與int、char、float、double等一樣,可用來定義變量,只不過結(jié)構(gòu)體類型需要事先由用戶自己聲明。聲明一個(gè)結(jié)構(gòu)體類型的一般形式為:struct結(jié)構(gòu)體類型名{ 成員表列;};成員表列的聲明:類型名成員名;聲明結(jié)構(gòu)體類型的位置一般在文件的開頭,在所有函數(shù)(包括main函數(shù))之前,以便本文件中所有的函數(shù)都能利用它來定義變量。當(dāng)然也可以在函數(shù)中聲明結(jié)構(gòu)體類型。前面只是指定了一種結(jié)構(gòu)體類型,它相當(dāng)于一個(gè)模型,但其中并無具體數(shù)據(jù),系統(tǒng)也不為之分配實(shí)際的內(nèi)存單元。為了能在程序中使用結(jié)構(gòu)體類型的數(shù)據(jù),應(yīng)當(dāng)定義結(jié)構(gòu)體類型的變量,并在其中存放具體的數(shù)據(jù)。1.定義結(jié)構(gòu)體類型變量的方法可以采取以下3種方法定義結(jié)構(gòu)體類型的變量。(1)先聲明結(jié)構(gòu)體類型再定義變量名如上面已定義了一個(gè)結(jié)構(gòu)體類型Student,可以用它來定義結(jié)構(gòu)體變量。如Studentstudent1,student2;7.1.2結(jié)構(gòu)體類型變量以上定義了student1和student2為結(jié)構(gòu)體類型Student的變量,即它們具有Student類型的結(jié)構(gòu)。如圖7.2所示。圖7.2(2)在聲明類型的同時(shí)定義變量structStudent{ intnum; charname[20]; charsex;
intage; floatscore; charaddr[30];}student1,student2;
定義的一般形式為:struct結(jié)構(gòu)體名{ 成員表列}變量名表列;(3)直接定義結(jié)構(gòu)體類型變量struct//結(jié)構(gòu)體類型名省略{ 成員表列}變量名表列;提倡使用先定義類型后定義變量的第(1)種方法。struct{
intnum; charname[20]; charsex;
intage; floatscore; charaddr[30];}student1,student2;說明:(1)類型與變量是不同的概念,不要混淆。只能對(duì)結(jié)構(gòu)體變量中的成員賦值,而不能對(duì)結(jié)構(gòu)體類型賦值。在編譯時(shí),是不會(huì)為類型分配空間的,只為變量分配空間。(2)對(duì)結(jié)構(gòu)體中的成員,可以單獨(dú)使用,它的作用與地位相當(dāng)于普通變量。(3)成員也可以是一個(gè)結(jié)構(gòu)體變量。structDate//聲明一個(gè)結(jié)構(gòu)體類型Date{
intmonth;
intday;
intyear;};structStudent//聲明一個(gè)結(jié)構(gòu)體類型Student{
intnum; charname[20]; charsex;
intage; Datebirthday;
charaddr[30];}student1,student2;圖7.3(5)結(jié)構(gòu)體中的成員名可以與程序中的變量名相同,但二者沒有關(guān)系。例如,程序中可以另定義一個(gè)整型變量num,它與student中的num是兩回事,互不影響。Student的結(jié)構(gòu)見圖7.3所示。2.結(jié)構(gòu)體變量的初始化Studentstudent1={10001,"ZhangXin",'M',19,90.5,"Shanghai"};3.結(jié)構(gòu)體變量的引用(1)將一個(gè)結(jié)構(gòu)體變量的值賦給另一個(gè)具有相同結(jié)構(gòu)的結(jié)構(gòu)體變量。如:student1=student2;(2)引用結(jié)構(gòu)體變量中的一個(gè)成員的方式:
結(jié)構(gòu)體變量名.成員名 如:student1.num=1001;(3)如果成員本身也是一個(gè)結(jié)構(gòu)體類型,則要用若干個(gè)成員運(yùn)算符,一級(jí)一級(jí)地找到最低一級(jí)的成員。如果想引用student1變量中的birthday成員中的month成員,則必須逐級(jí)引用:
student1.birthday.month(4)不能將一個(gè)結(jié)構(gòu)體變量作為一個(gè)整體進(jìn)行輸入和輸出。如:cout<<student1;只能對(duì)結(jié)構(gòu)體變量中的各個(gè)成員分別進(jìn)行輸入和輸出。(5)對(duì)結(jié)構(gòu)體變量的成員可以像普通變量一樣進(jìn)行各種運(yùn)算(根據(jù)其類型決定可以進(jìn)行的運(yùn)算種類)。 student2.score=student1.score; sum=student1.score+student2.score; student1.age++;//“.”運(yùn)算符的優(yōu)先級(jí)最高 ++student1.age;(6)可以引用結(jié)構(gòu)體變量成員的地址,也可以引用結(jié)構(gòu)體變量的地址。如
cout<<&student1;
//輸出student1的首地址
cout<<&student1.age;
//輸出student1.age的地址結(jié)構(gòu)體變量的地址主要用作函數(shù)參數(shù),將結(jié)構(gòu)體變量的地址傳遞給形參。一個(gè)結(jié)構(gòu)體變量中可以存放一組數(shù)據(jù)(如一個(gè)學(xué)生的學(xué)號(hào)、姓名、成績(jī)等數(shù)據(jù))。如果有10個(gè)學(xué)生的數(shù)據(jù)需要參加運(yùn)算,顯然應(yīng)該用數(shù)組,這就是結(jié)構(gòu)體數(shù)組。結(jié)構(gòu)體數(shù)組與以前介紹過的數(shù)值型數(shù)組的不同之處在于:每個(gè)數(shù)組元素都是一個(gè)結(jié)構(gòu)體類型的數(shù)據(jù),它們都分別包括各個(gè)成員項(xiàng)。7.1.4結(jié)構(gòu)體數(shù)組1.定義結(jié)構(gòu)體數(shù)組和定義結(jié)構(gòu)體變量的方法相仿,定義結(jié)構(gòu)體數(shù)組時(shí)只需聲明其為數(shù)組即可。如structStudent//聲明結(jié)構(gòu)體類型Student{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};Studentstu[3];//定義Student類型的數(shù)組stustructStudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu[3];struct
{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu[3];或也可以直接定義一個(gè)結(jié)構(gòu)體數(shù)組,如見圖7.4。數(shù)組各元素在內(nèi)存中連續(xù)存放,見圖7.5示意。圖7.4圖7.52.結(jié)構(gòu)體數(shù)組的初始化對(duì)結(jié)構(gòu)體數(shù)組可以初始化。如structStudent{intnum; charname[20]; charsex;
intage;
floatscore; charaddr[30];}sty[3]={{10101,"LiLin",'M',18,87.5,"BeijingRoad"},{10102,"ZhangFun",'M',19,99,"ShanghaiRoad"},{10104,"WangMin",'F',20,78.5,"ZhongshanRoad"}};定義數(shù)組stu時(shí),可以不指定元素個(gè)數(shù),寫成如下形式:
stu[]={{…},{…},{…}};數(shù)組的初始化也可以用以下形式:Studentstu[]={{…},{…},{…}};
//已事先聲明了結(jié)構(gòu)體類型Student通過指向結(jié)構(gòu)體變量的指針引用結(jié)構(gòu)體變量中的成員 形式:指針變量->成員名7.1.5指向結(jié)構(gòu)體變量的指針也就是說,以下3種形式等價(jià):①結(jié)構(gòu)體變量.成員名。如stu.num。②(*p).成員名。如(*p).num。③p->成員名。如p->num。“->”稱為指向運(yùn)算符。2.用結(jié)構(gòu)體變量和指向結(jié)構(gòu)體變量的指針構(gòu)成鏈表鏈表是一種常見的重要的數(shù)據(jù)結(jié)構(gòu)。下圖表示最簡(jiǎn)單的一種鏈表(單向鏈表)的結(jié)構(gòu)。鏈表有一個(gè)“頭指針”變量,圖中以head表示,它存放一個(gè)地址。該地址指向一個(gè)元素。鏈表中的每一個(gè)元素稱為“結(jié)點(diǎn)”,每個(gè)結(jié)點(diǎn)都應(yīng)包括兩個(gè)部分:一是用戶需要用的實(shí)際數(shù)據(jù),二是下一個(gè)結(jié)點(diǎn)的地址。鏈表中的各個(gè)結(jié)點(diǎn)不是通過new
和delete動(dòng)態(tài)建立和釋放。而是事先申請(qǐng)好的單元,但刪除某節(jié)點(diǎn)時(shí),不能釋放空間。靜態(tài)鏈表的建立鏈表中的各個(gè)結(jié)點(diǎn)通過new
和delete動(dòng)態(tài)建立和釋放。動(dòng)態(tài)鏈表的建立本章到此結(jié)束謝謝! 第3篇基于對(duì)象的程序設(shè)計(jì) 第8章類和對(duì)象 4學(xué)時(shí) 第9章關(guān)于類和對(duì)象的進(jìn)一步討論 6學(xué)時(shí) 第10章運(yùn)算符重載 (自學(xué)) 第4篇面向?qū)ο蟮某绦蛟O(shè)計(jì) 第11章繼承與派生 8學(xué)時(shí) 第12章多態(tài)性與虛函數(shù) 8學(xué)時(shí) 第13章輸入輸出流 (自學(xué)) 第14章C++工具 4學(xué)時(shí)如何學(xué)好C++程序設(shè)計(jì)?考核辦法綜合成績(jī):平時(shí)成績(jī)、期中考試成績(jī)、 期末考試成績(jī)不及格率:至少20%第1章C++的初步知識(shí)第2章數(shù)據(jù)類型與表達(dá)式第1篇
基本知識(shí)第1章C++的初步知識(shí)*1.1從C到C++*1.2最簡(jiǎn)單的C++程序1.3C++程序的構(gòu)成和書寫形式1.4C++程序的編寫和實(shí)現(xiàn)1.5關(guān)于C++上機(jī)實(shí)踐C語(yǔ)言產(chǎn)生于20世紀(jì)70年代,不是為初學(xué)者設(shè)計(jì)的,而是為計(jì)算機(jī)專業(yè)人員設(shè)計(jì)的。大多數(shù)系統(tǒng)軟件和許多應(yīng)用軟件都是用C語(yǔ)言編寫的。 優(yōu)點(diǎn):功能豐富、表達(dá)能力強(qiáng)、使用靈活方便、應(yīng)用面廣、目標(biāo)程序效率高、可移植性好特點(diǎn):面向過程的結(jié)構(gòu)化和模塊化的語(yǔ)言
*1.1從C到C++C++是于20世紀(jì)80年代初在C語(yǔ)言的基礎(chǔ)上開發(fā)成功的。開發(fā)較大規(guī)模的程序,提高軟件開發(fā)的效率。
特點(diǎn):C++保留了C語(yǔ)言原有的所有優(yōu)點(diǎn),增加了面向?qū)ο蟮臋C(jī)制。C++是由C發(fā)展而來的,與C兼容。并在原來面向過程的機(jī)制基礎(chǔ)上,對(duì)C語(yǔ)言的功能做了不少擴(kuò)充。C++既可用于面向過程的結(jié)構(gòu)化程序設(shè)計(jì),又可用于面向?qū)ο蟮某绦蛟O(shè)計(jì),不要把面向?qū)ο蠛兔嫦蜻^程對(duì)立起來。C++上機(jī)實(shí)踐
C++編譯系統(tǒng)有很多,如VisualC++、C++Builder等;無論在什么環(huán)境下編譯和運(yùn)行一個(gè)C++程序,應(yīng)當(dāng)掌握標(biāo)準(zhǔn)C++。應(yīng)當(dāng)能在不同的C++環(huán)境下運(yùn)行自己的程序,并且了解不同的C++編譯系統(tǒng)的特點(diǎn)和使用方法,在需要時(shí)能將自己的程序方便地移植到不同的平臺(tái)上。例:輸出一行字符:“ThisisaC++program.”。#include<iostream>//包含頭文件iostreamusingnamespacestd;//使用命名空間stdintmain(){
cout<<″ThisisaC++program.″; return0;}*1.2最簡(jiǎn)單的C++程序例1.2求a和b兩個(gè)數(shù)之和。#include<iostream>//預(yù)處理命令usingnamespacestd;//使用命名空間stdintmain()//主函數(shù)首部{//函數(shù)體開始
inta,b,sum;//定義變量
cin>>a>>b;//輸入語(yǔ)句
sum=a+b;//賦值語(yǔ)句
cout<<″a+b=″<<sum<<endl;//輸出語(yǔ)句
return0;}
//函數(shù)結(jié)束“//使用命名空間std”是一個(gè)注釋,C++規(guī)定在一行中如果出現(xiàn)“//”,則從它開始到本行末尾之間的全部?jī)?nèi)容都作為注釋。(思考)應(yīng)用函數(shù)調(diào)用的方法編寫程序?例1.3給出三個(gè)數(shù)a、b和c,求三個(gè)數(shù)中的最大數(shù)。例1.4包含類的C++程序。#include<iostream>usingnamespacestd;classStudent//聲明一個(gè)類,類名為Student{private://以下為類中的私有部分
intnum;//私有變量num
intscore;//私有變量scorepublic://以下為類中的公用部分
voidsetdata()//定義公用函數(shù)setdata
{cin>>num;//輸入num的值
cin>>score;//輸入score的值 }
voiddisplay()//定義公用函數(shù)display{cout<<″num=″<<num<<endl;//輸出num的值
cout<<″score=″<<score<<endl;//輸出score的值
}};//類的聲明結(jié)束Studentstud1,stud2;intmain()//主函數(shù)首部{ stud1.setdata(); //調(diào)用對(duì)象stud1的setdata函數(shù)
stud2.setdata(); //調(diào)用對(duì)象stud2的setdata函數(shù)
stud1.display();//調(diào)用對(duì)象stud1的display函數(shù)
stud2.display();//調(diào)用對(duì)象stud2的display函數(shù)
return0;}在一個(gè)類中包含兩種成員:數(shù)據(jù)和函數(shù)。在C++中把一組數(shù)據(jù)和有權(quán)調(diào)用這些數(shù)據(jù)的函數(shù)封裝在一起,組成一種稱為“類(class)”的數(shù)據(jù)結(jié)構(gòu)。類可以體現(xiàn)數(shù)據(jù)的封裝性和信息隱蔽。在大多數(shù)情況下,會(huì)把所有數(shù)據(jù)指定為私有,以實(shí)現(xiàn)信息隱蔽。而把函數(shù)指定為公有。VisualC++編寫C++程序的三種方式1、創(chuàng)建單個(gè)文件
2、創(chuàng)建工程(Win32ConsoleApplication)往工程里添加文件3、創(chuàng)建工作區(qū)往工作區(qū)中添加工程往工程里添加文件C++程序的結(jié)構(gòu)和書寫格式歸納如下:(1)一個(gè)C++程序可以由一個(gè)程序文件或多個(gè)程序文件構(gòu)成。在程序編譯時(shí),編譯系統(tǒng)分別對(duì)各個(gè)文件進(jìn)行編譯,因此,一個(gè)文件是一個(gè)編譯單元。1.3C++程序的構(gòu)成和書寫形式(2)在一個(gè)程序單位中,可以包括以下幾個(gè)部分:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年自然生態(tài)保護(hù)服務(wù)項(xiàng)目建議書
- 人才招聘的市場(chǎng)分析與趨勢(shì)預(yù)測(cè)
- 中國(guó)人力資源市場(chǎng)趨勢(shì)分析
- 中如何插入動(dòng)畫效果
- 企業(yè)級(jí)產(chǎn)品的設(shè)計(jì)與實(shí)現(xiàn)過程分享
- 中醫(yī)藥的跨文化傳播與交流
- 2025年TFT系列偏光片合作協(xié)議書
- 員工績(jī)效考核與激勵(lì)體系設(shè)計(jì)
- 中醫(yī)藥的草藥研究進(jìn)展
- 發(fā)展戰(zhàn)略部的職責(zé)與政策分析
- 樓梯踏步抹灰標(biāo)準(zhǔn)合同7篇
- 【廈門大學(xué)】DeepSeek大模型賦能高校教學(xué)和科研
- 巧手包出小混沌(課件)三年級(jí)下冊(cè)勞動(dòng)人民版
- 2025-2030中國(guó)IC卡讀寫器行業(yè)市場(chǎng)現(xiàn)狀分析及競(jìng)爭(zhēng)格局與投資發(fā)展研究報(bào)告
- 2024-2025學(xué)年人教版初中地理七年級(jí)下冊(cè)課件 第8章 第4節(jié) 俄羅斯
- 2025年南京秦淮區(qū)一中七年級(jí)下3月份月考英語(yǔ)試卷
- 2025屆高三化學(xué)二輪復(fù)習(xí) 化學(xué)工藝流程 課件
- 2024廣東深圳市龍崗區(qū)產(chǎn)服集團(tuán)“春雨”第二批招聘筆試筆試參考題庫(kù)附帶答案詳解
- 2025年河南經(jīng)貿(mào)職業(yè)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)帶答案
- 蘇教版六年級(jí)數(shù)學(xué)下冊(cè)第4單元第9課《練習(xí)八》課件
- 2025風(fēng)電機(jī)組大型葉片全過程質(zhì)量認(rèn)證
評(píng)論
0/150
提交評(píng)論