C高級語言程序設(shè)計(jì)第四章課件_第1頁
C高級語言程序設(shè)計(jì)第四章課件_第2頁
C高級語言程序設(shè)計(jì)第四章課件_第3頁
C高級語言程序設(shè)計(jì)第四章課件_第4頁
C高級語言程序設(shè)計(jì)第四章課件_第5頁
已閱讀5頁,還剩88頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、C+高級語言程序設(shè)計(jì)第4章 數(shù)組及其他自定義類型北京郵電大學(xué)信息與通信工程學(xué)院2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院1第1頁,共93頁。第4章 數(shù)組及其他自定義類型4.1 數(shù)組數(shù)組基本概念、數(shù)組初始化、訪問數(shù)組元素、字符型數(shù)組、多維數(shù)組4.2 枚舉類型枚舉類型的定義、枚舉型變量的定義及使用4.3 結(jié)構(gòu)類型結(jié)構(gòu)類型的定義、結(jié)構(gòu)變量的定義及初始化、結(jié)構(gòu)變量的使用4.4 聯(lián)合類型聯(lián)合類型的定義、聯(lián)合型變量的定義及使用2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-2-第2頁,共93頁。4.1 數(shù)組數(shù)組是具有一定順序關(guān)系的若干相同類型變量的集合,組成數(shù)組的變量稱為該數(shù)組的元素。數(shù)組屬于構(gòu)造

2、類型。數(shù)組是實(shí)際編程中經(jīng)常使用的一種數(shù)據(jù)結(jié)構(gòu)。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-3-第3頁,共93頁。4.1.1 數(shù)組定義及初始化1. 一維數(shù)組的定義一維數(shù)組定義的語法形式 類型標(biāo)識符 數(shù)組名常量表達(dá)式;說明 類型標(biāo)識符:任何合法的類型標(biāo)識符,用于說明數(shù)組元素的類型;數(shù)組名 :程序員對該數(shù)組的命名,數(shù)組的命名規(guī)則同變量命名;方括號及常量表達(dá)式:用于說明該數(shù)組中元素的個(gè)數(shù)。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-4-第4頁,共93頁。4.1.1 數(shù)組定義及初始化例: 10級119班30名同學(xué)“C+程序設(shè)計(jì)”課程的成績 int Cscore30; 實(shí)驗(yàn),測得一組電阻R隨溫

3、度T變化的值 float Ri30; short Tc30;2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-5-第5頁,共93頁。4.1.1 數(shù)組定義及初始化一維數(shù)組在內(nèi)存中存儲映射 int score 5;2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-6-第6頁,共93頁。4.1.1 數(shù)組定義及初始化注意定義一個(gè)數(shù)組,系統(tǒng)為這個(gè)數(shù)組保留一定數(shù)量的連續(xù)內(nèi)存單元,數(shù)組元素依次占用這一連續(xù)內(nèi)存空間,這段內(nèi)存空間起始地址的外部標(biāo)識就是數(shù)組名;數(shù)組名是一個(gè)地址常量,禁止給數(shù)組名賦值;數(shù)組各元素用數(shù)組名及下標(biāo)(或稱索引值)來標(biāo)識,score0,score1,score4分別表示數(shù)組的第15個(gè)元素;

4、C語言和C+語言中,元素的下標(biāo)從0開始計(jì),數(shù)組元素的最大下標(biāo)比元素個(gè)數(shù)少1,數(shù)組score最大下標(biāo)對應(yīng)的元素是score4,而不是score5(訪問越界);2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-7-第7頁,共93頁。4.1.1 數(shù)組定義及初始化注意數(shù)組名表示數(shù)組在內(nèi)存中的起始地址,可以將元素的下標(biāo)理解為元素存放位置相對于數(shù)組名的偏移量,第i個(gè)元素scorei的起始地址相對于數(shù)組的起始地址偏移了i個(gè)int型變量所占空間;每個(gè)元素可以視為一個(gè)同類型的變量,如scorei可以視為一個(gè)整型變量;數(shù)組的每個(gè)元素占用空間大小與同類型變量占用的內(nèi)存大小一樣;數(shù)組占用的內(nèi)存空間是其全部元素所占空間

5、的總和,如果數(shù)組有N個(gè)元素,它所占的字節(jié)數(shù)可以通過以下方式得到:sizeof (數(shù)組名) 或 N*sizeof (數(shù)組類型)。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-8-第8頁,共93頁。4.1.1 數(shù)組定義及初始化2. 數(shù)組初始化在定義數(shù)組時(shí),直接給出賦給數(shù)組元素的值,稱為數(shù)組初始化。數(shù)組初始化語法形式 類型標(biāo)識符 數(shù)組名常量表達(dá)式 = 以逗號隔開的初始化值; 2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-9-第9頁,共93頁。4.1.1 數(shù)組定義及初始化例: 定義并初始化整型數(shù)組score5的語句為: int score5 = 80,70,90,95,60; 初始化列表中的數(shù)

6、據(jù)依次賦給元素score0、score1、score2、score3、score4。注意不要丟掉語句最后的分號。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-10-第10頁,共93頁。4.1.1 數(shù)組定義及初始化注意初始化數(shù)組時(shí),給定的初始化數(shù)值不能比數(shù)組元素多,但可以比數(shù)組元素少;如果少,初始化列表中的初始值將從下標(biāo)0開始依次分配給各元素,后面沒有得到初始值的元素被初始化為0。 double d10 = 1.0 ,2.0;如果使用初始化列表,則表內(nèi)至少包含一個(gè)初始值,否則編譯將出現(xiàn)錯誤。如果沒有初始化列表,即只定義不做初始化,一般在函數(shù)內(nèi)部定義的自動局部數(shù)組,其各元素的值是隨機(jī)值,使用時(shí)

7、需要重新給數(shù)組元素賦值。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-11-第11頁,共93頁。4.1.1 數(shù)組定義及初始化如果在初始化列表中給定數(shù)組元素的全部值,可以省略中括號中元素個(gè)數(shù)常量表示式。上述score數(shù)組的初始化也可以寫成: int score = 80,70,90,95,60; 此時(shí),編譯器自動計(jì)算出數(shù)組元素的個(gè)數(shù)為5,給score數(shù)組分配能夠存放5個(gè)int型數(shù)據(jù)的連續(xù)空間。思考題:如何將一個(gè)在某函數(shù)內(nèi)部定義的自動局部數(shù)組的所有元素都初始化為0?最簡單的方法是什么?2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-12-第12頁,共93頁。4.1.1 數(shù)組定義及初始化例4-

8、1 定義各種基本類型的數(shù)組并初始化,利用debug調(diào)試方式觀察數(shù)組各元素得到的值、數(shù)組占用的空間、數(shù)組元素占用的空間。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-13-第13頁,共93頁。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-14-/例4-1數(shù)組的定義、初始化,查看數(shù)組的大小 #include using namespace std; void main() const int N = 5; char chArrayN; short int shArrayN = 1,2,3,4,5; int iArrayN = 10; float fArray = 3.1f, 4.1f, 5

9、.0f; double dArrayN = 3.14, 6.28; int k; 第14頁,共93頁。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-15- for (k=0; kN; k+) coutchArrayk, ; coutendl; for (k=0; kN; k+) coutshArrayk, ; coutendl; for (k=0; kN; k+) coutiArrayk, ; coutendl; for (k=0; k3; k+) coutfArrayk, ; coutendl; for (k=0; kN; k+) coutdArrayk, ; coutendl; 運(yùn)行結(jié)

10、果: ? ? ? ? ? 1, 2, 3, 4, 5, 10, 0, 0, 0, 0, 3.1, 4.1, 5, 3.14, 6.28, 0, 0, 0,說明符號常量N,用于說明數(shù)組的大小;使用符號常量說明數(shù)組的大小便于程序修改,如果想讓數(shù)組的大小為100,只需修改N的值即可,其他語句不需要修改;在多文件結(jié)構(gòu)中,可將一些符號常量的定義放在頭文件中,更利于工程的維護(hù)和修改。第15頁,共93頁。4.1.2 訪問數(shù)組元素 數(shù)組元素是用下標(biāo)來區(qū)分的,指定要訪問的數(shù)組元素的語法形式為: 數(shù)組名下標(biāo)表達(dá)式 下標(biāo)表達(dá)式:可以是常量、變量或表達(dá)式,其值大于或等于0,小于數(shù)組的大小。例: const int N

11、 = 8; float angleN; for (int k=0; kN; k+) anglek = 3.14f / N * k; /給元素賦值,寫操作 coutanglek , ; /讀取元素值 2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-16-第16頁,共93頁。4.1.2 訪問數(shù)組元素例4-2 將正弦函數(shù)的一個(gè)周期2分為N等份,定義數(shù)組分別存儲自變量值和函數(shù)值,并顯示數(shù)組元素的值。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-17-第17頁,共93頁。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-18-/例4-2用數(shù)組存儲和顯示正弦函數(shù)一周期內(nèi)的值 #include #in

12、clude #include using namespace std; void main() const int N = 8; double xN; /自變量值 double yN; /函數(shù)值 const double PI2 = 3.14159 * 2; double delta = PI2 / N; coutsetw(8)弧度setw(12)sin(x)endl; for (int k=0; kN; k+) xk = k * delta; yk = sin(xk); coutsetw(10)xk, ykendl; 運(yùn)行結(jié)果: 弧度 sin(x) 0, 0 0.785397, 0.7071

13、06 1.57079, 1 2.35619, 0.707108 3.14159, 2.65359e-006 3.92699, -0.707104 4.71238, -1 5.49778, -0.70711第18頁,共93頁。4.1.2 訪問數(shù)組元素訪問數(shù)組元素時(shí)需要注意(1)數(shù)組元素的下標(biāo)表達(dá)式的結(jié)果必須為0或正整數(shù)。(2)數(shù)組元素的下標(biāo)值不得超過數(shù)組聲明時(shí)所限定的上下界。數(shù)組元素下標(biāo)的下界是0,上界是相應(yīng)維數(shù)大小減1。例:int a10; /a數(shù)組可使用的有效下標(biāo)為09float f50; /f數(shù)組可使用的有效下標(biāo)為0492022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-19-第19頁,共9

14、3頁。4.1.2 訪問數(shù)組元素訪問數(shù)組元素時(shí)需要注意(3)越界訪問問題如果訪問數(shù)組元素時(shí),使用的下標(biāo)不是有效范圍內(nèi)的值,會造成“越界訪問”錯誤。由于編譯器在編譯程序時(shí)不會檢查這種錯誤,所以編輯人員要特別小心,盡可能杜絕這類錯誤發(fā)生。使用面向?qū)ο蟪绦蛟O(shè)計(jì)技術(shù)的讀者可以定義下標(biāo)不能越界的數(shù)組,也就是C+中的vector類,相關(guān)內(nèi)容可參見附錄。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-20-第20頁,共93頁。4.1.3 字符數(shù)組char型的數(shù)組稱為字符數(shù)組,通常用來存儲字符串。定義并且初始化字符數(shù)組: char chArray = hello world!; 2022/8/17北京郵電大學(xué)

15、信息與通信工程學(xué)院-21-第21頁,共93頁。4.1.3 字符數(shù)組1初始化字符數(shù)組兩種方法:(1)用雙引號內(nèi)的字符串初始化字符數(shù)組例:char array10=hello; 可以省略大括號,簡化為: char array10= hello; 用這種方法初始化時(shí),系統(tǒng)自動在數(shù)組最后一個(gè)元素后面補(bǔ)0(結(jié)束符)。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-22-第22頁,共93頁。4.1.3 字符數(shù)組(2)用字符常量來初始化字符數(shù)組例: char array10= h, e, l, l, o, 0; 該方法將初始值一一列舉在初始化列表中,這種方法通常用于輸入不容易在鍵盤上生成的不可見字符。下面

16、的代碼中初始化值包含兩個(gè)制表符。 char array10= a, t, b, t, 0; 注意,此種方式下,編程者要自己添加字符串結(jié)束符(0),同時(shí)不要忘記為最后的0留出空間。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-23-第23頁,共93頁。4.1.3 字符數(shù)組2字符數(shù)組的輸入和輸出字符數(shù)組的輸入是給數(shù)組各元素賦值的過程在循環(huán)中通過cin一個(gè)一個(gè)地輸入通過cin整串輸入調(diào)用I/O流類的成員函數(shù)輸入,例如使用getline()函數(shù)輸入一行字符。 char buffer80; for(int k=0; kbufferk; cinbuffer; cin.getline(buffer, 8

17、0, n); 2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-24-第24頁,共93頁。4.1.3 字符數(shù)組2字符數(shù)組的輸入和輸出字符數(shù)組的輸出逐元素輸出通過數(shù)組名輸出。例如,下面的語句輸出字符數(shù)組buffer中的字符串: coutbuffer; 例4-3 從鍵盤輸入一行或多行字符串,用字符數(shù)組存儲,并統(tǒng)計(jì)所輸入的字符串中26個(gè)字母出現(xiàn)的次數(shù)。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-25-第25頁,共93頁。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-26-/例4-3輸入26個(gè)英文字符的分布統(tǒng)計(jì) #include using namespace std; void main(

18、) /數(shù)組及變量定義; const int N = 80; char bufferN; int k =0; const int NUM = 26; int countsNUM = 0; char lettersNUM; int i = 0; 第26頁,共93頁。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-27- do /循環(huán)輸入每一行字符 coutenter a string:n; cin.getline(buffer, N,n); /獲得一行輸入字符串 k = 0; /對于輸入的每一行字符,統(tǒng)計(jì)字符出現(xiàn)的次數(shù) while (bufferk != 0) i =tolower( buffe

19、rk) - a; countsi+; k+; /countstolower( bufferk+) - a+; /用此行可代替前三句 while (buffer0!=0); 第27頁,共93頁。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-28- coutthe statistics result:endl; for (i=0; i0) coutlettersi: countsiendl; 第28頁,共93頁。思考題:如何統(tǒng)計(jì)一個(gè)txt文件中各種字符出現(xiàn)的次數(shù)?2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-29-第29頁,共93頁。4.1.4 多維數(shù)組1多維數(shù)組的定義定義多維數(shù)組語法形式

20、如下。二維數(shù)組類型標(biāo)識符 數(shù)組名標(biāo)識符常量表達(dá)式1常量表達(dá)式2; 三維數(shù)組類型標(biāo)識符 數(shù)組名標(biāo)識符常量表達(dá)式1常量表達(dá)式2常量表達(dá)式3; n維數(shù)組類型標(biāo)識符 數(shù)組名標(biāo)識符常量表達(dá)式1常量表達(dá)式n; 2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-30-第30頁,共93頁。4.1.4 多維數(shù)組例: bool seat106; /座位 unsigned char image256128;/256行128列圖像 float matrix33;/三元一次線性方程組的系數(shù)矩陣 char table58; /課表二維數(shù)組元素的下標(biāo)從左至右稱為行、列。 char book2003240; /書三維數(shù)組元素

21、的下標(biāo)由左至右可稱為頁、行、列或?qū)印⑿?、列?022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-31-第31頁,共93頁。4.1.4 多維數(shù)組在定義多維數(shù)組時(shí),需要注意首先要根據(jù)所要表示的對象內(nèi)容,選擇合適的數(shù)據(jù)類型(數(shù)組的類型,也就是數(shù)組元素的類型);其次確定數(shù)組的維數(shù),即幾維數(shù)組(有幾維就有幾對中括號);最后確定每一維的大?。ㄖ欣ㄌ杻?nèi))。特別強(qiáng)調(diào):數(shù)組每一維的大小必須用常量表達(dá)式聲明,否則,編譯會出錯。這也是C和C+數(shù)組的一大缺陷:數(shù)組的使用不夠靈活。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-32-第32頁,共93頁。4.1.4 多維數(shù)組2多維數(shù)組在內(nèi)存中的映像例:int d15;

22、int d223; int d3232;2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-33-第33頁,共93頁。4.1.4 多維數(shù)組2多維數(shù)組在內(nèi)存中的映像一維數(shù)組在內(nèi)存中從數(shù)組名所代表的起始地址開始,按下標(biāo)次序存儲;數(shù)組d1的第i個(gè)元素在內(nèi)存中的起始位置相對于數(shù)組名所代表的地址偏移了i個(gè)int型變量空間大小。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-34-第34頁,共93頁。4.1.4 多維數(shù)組2多維數(shù)組在內(nèi)存中的映像二維數(shù)組在內(nèi)存中從數(shù)組名所代表的起始地址開始,按行優(yōu)先依次存儲;數(shù)組d2的第i行第j列元素在內(nèi)存中的起始位置相對于數(shù)組起始地址偏移了 行號列數(shù)+列號個(gè)int型變量空

23、間大小。例如,元素d2ij的起始地址計(jì)算: &d200 + (i 3 + j)2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-35-第35頁,共93頁。4.1.4 多維數(shù)組2多維數(shù)組在內(nèi)存中的映像三維數(shù)組在內(nèi)存中從數(shù)組名所代表的起始地址開始,按頁、行、列依次存儲,即按使數(shù)組元素最右邊的下標(biāo)值最快地變化來存儲。數(shù)組d3的第k頁第i行第j列元素在內(nèi)存中的起始位置相對于數(shù)組起始地址偏移了頁號(行數(shù)列數(shù))+行號列數(shù)+列號 個(gè)int型變量空間大小。例如,元素d3kij的起始地址為:&d3000+(k32+i2+j)。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-36-第36頁,共93頁。4.1.4

24、 多維數(shù)組3初始化多維數(shù)組提供數(shù)組元素的全部初始值提供部分元素的初始值這些初始化值位于大括號內(nèi),構(gòu)成初始值列表,多維數(shù)組初始化時(shí)需要使用嵌套的括號。 int a24=4, 3, 2, 1, 1,2,3,4; double d34=l.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0; 2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-37-第37頁,共93頁。4.1.4 多維數(shù)組3初始化多維數(shù)組可以省略內(nèi)層的括號,只要程序好讀即可。例如用換行的方式: int a24= 4, 3, 2, 1, 1, 2, 3, 4 ; dou

25、ble d34= l.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0;2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-38-第38頁,共93頁。4.1.4 多維數(shù)組3初始化多維數(shù)組 多維數(shù)組的初始化,也可以只給出部分值;例: int a24= 4, 3; 則只有a00、a01分別得到初始值4和3,其余各元素的值為0??衫么颂匦詫⒁恍┯米鲇?jì)數(shù)器的多維數(shù)組初始化為0。例:定義并初始化二維整型計(jì)數(shù)器counts: int counts512256 = 0; 這是將多維數(shù)組元素置0的最簡便方法之一。2022/8/17北京郵電大

26、學(xué)信息與通信工程學(xué)院-39-第39頁,共93頁。4.1.4 多維數(shù)組4訪問多維數(shù)組的元素訪問多維數(shù)組的元素時(shí),只要指定要訪問的數(shù)組元素的具體下標(biāo)值即可,語法形式為: 數(shù)組名下標(biāo)表達(dá)式1下標(biāo)表達(dá)式n 其中,下標(biāo)表達(dá)式的個(gè)數(shù)同數(shù)組維數(shù),“下標(biāo)表達(dá)式i”(1in)可以用常量、變量或表達(dá)式,其值大于或等于0,小于數(shù)組對應(yīng)維的大小,即 0下標(biāo)表達(dá)式i的值第i維的大小 2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-40-第40頁,共93頁。4.1.4 多維數(shù)組例: const int M = 8, N = 4; char matrixMN; for (int i=0; iM; i+) for (int

27、 j=0; jmatrixij; /給元素賦值,寫操作 2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-41-第41頁,共93頁。4.1.4 多維數(shù)組例4-5 編程實(shí)現(xiàn)矩陣轉(zhuǎn)置功能,矩陣行數(shù)為M,列數(shù)為N,用二維數(shù)組表示矩陣。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-42-第42頁,共93頁。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-43-/例4-5矩陣轉(zhuǎn)置 #include #include #include using namespace std; void main() const int M = 5; const int N = 6; int matrixMN; /矩

28、陣 int tMatrixNM; /轉(zhuǎn)置矩陣 srand(unsigned int) time(NULL); int i, j; 第43頁,共93頁。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-44- coutmatrix:endl; for (i=0; iM; i+) /生成矩陣 for (j=0; jN; j+) matrixij = rand()%100; /給數(shù)組元素賦值 coutsetw(4)matrixij ; coutendl; 第44頁,共93頁。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-45- couttranspose of matrix:endl; for

29、(i=0; iN; i+) /得到轉(zhuǎn)置矩陣 for (j=0; jM; j+) tMatrixij = matrixji; /給數(shù)組元素賦值 coutsetw(4)tMatrixij ; coutendl; 第45頁,共93頁。4.1.5 數(shù)組應(yīng)用舉例例4-6 40個(gè)學(xué)生用110的分?jǐn)?shù)評價(jià)學(xué)生食堂的質(zhì)量(1表示很差,10表示很好),將40個(gè)分?jǐn)?shù)放在整型數(shù)組中,并匯總調(diào)查結(jié)果。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-46-第46頁,共93頁。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-47-/例4-6 匯總評分結(jié)果 #include #include using namespac

30、e std; void main() const int cStuNum=40; /學(xué)生人數(shù) const int cScoreNum=11; /分?jǐn)?shù)個(gè)數(shù) int scorecStuNum = 1, 2, 6, 4, 8, 5, 9, 7, 8, 10, 1, 6, 3 ,8, 6, 10, 3, 8, 2, 6, 6, 5, 6, 8, 7, 7, 5, 5, 6, 7, 4, 6, 8,10, 3, 1, 2, 7, 9, 6; /全部分?jǐn)?shù) int countscScoreNum = 0; /分?jǐn)?shù)統(tǒng)計(jì)計(jì)數(shù)器,初始化為0 第47頁,共93頁。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-4

31、8- int k; for (int k =0; kcStuNum; k+) /統(tǒng)計(jì)分?jǐn)?shù) counts score k +; coutscoresetw(10)countsendl; for(k=1; kcScoreNum; k+) /輸出結(jié)果 coutsetw(6)ksetw(10)countskendl; 第48頁,共93頁。4.1.5 數(shù)組應(yīng)用舉例例4-7 編程實(shí)現(xiàn)計(jì)算兩個(gè)N階方陣乘積矩陣的功能,矩陣元素為整形,N = 5。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-49-第49頁,共93頁。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-50-/例4-7求兩個(gè)N階方陣乘積矩陣

32、#include #include #include using namespace std; void main() const int N = 5; int aNN, bNN; /兩個(gè)相乘的矩陣 int cNN=0; /乘積矩陣 int i, j, k; srand(unsigned int)time(NULL); /生成矩陣a和b for(i=0; iN; i+) /行循環(huán) for(j=0; jN; j+) /列循環(huán) aij = rand() % 100; bij = rand() % 100; 第50頁,共93頁。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-51- /顯示矩陣a,

33、再顯示矩陣b coutmatrix a:endl; for(i=0; iN; i+) for(j=0; jN; j+) coutsetw(5)aij; coutendl; coutmatrix b:endl; for(i=0; iN; i+) for(j=0; jN; j+) coutsetw(5)bij; coutendl; 第51頁,共93頁。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-52- /計(jì)算乘積矩陣c,并顯示 for(i=0; iN; i+) for(j=0; jN; j+) for( k=0; kN; k+) /求c的一個(gè)元素 cij += aik * bkj; cout

34、matrix c:endl; for(i=0; iN; i+) for(j=0; jN; j+) coutsetw(10)cij; coutendl; 第52頁,共93頁。4.1.5 數(shù)組應(yīng)用舉例例4-8 給定二維數(shù)組,編程計(jì)算元素的均值和方差。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-53-第53頁,共93頁。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-54-/例4-8計(jì)算一組數(shù)據(jù)的均值和方差 #include #include #include using namespace std; void main() const int ROWS=20; const int COLS

35、=10; int matrixROWSCOLS=0; int row,col; srand( (unsigned)time( NULL ) ); for( row=0; rowROWS; row+ ) /生成數(shù)據(jù) for( col=0; colCOLS; col+ ) matrixrowcol = rand() % 100; coutsetw(4)matrixrowcol,; coutendl; 第54頁,共93頁。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-55- /統(tǒng)計(jì)均值 float mean(0), var(0); for( row=0; rowROWS; row+ ) for(

36、 col=0; col0) mean /= size; else mean = 0; 第55頁,共93頁。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-56- /統(tǒng)計(jì)方差 for( row=0; rowROWS; row+ ) for( col=0; col0) var /= size; else var = 0; /顯示統(tǒng)計(jì)結(jié)果 coutmean=mean; stdvar=varendl; 第56頁,共93頁。4.2 枚 舉 類 型C+語言不僅有豐富的基本數(shù)據(jù)類型,而且允許用戶自己定義數(shù)據(jù)類型。枚舉、結(jié)構(gòu)、聯(lián)合都屬于自定義類型2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-57-第57

37、頁,共93頁。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-58-4.2.1 枚舉類型定義枚舉型數(shù)據(jù)類型(簡稱枚舉類型) 有些問題中所處理數(shù)據(jù)的取值可以一一列舉出來例: 一周七天: 星期日、星期1、星期2、星期3、星期4、星期5、星期6定義一種數(shù)據(jù)類型,一一列舉這種數(shù)據(jù)類型的變量的可能值,稱為枚舉類型,聲明形式為: enum 枚舉類型名枚舉元素列表; 可以使用這種自定義數(shù)據(jù)類型來定義變量。第58頁,共93頁。4.2.2 枚舉變量定義及使用例如:enum weekdaysun, mon, tue, wed, thu, fri, sat;weekday day; /定義一個(gè)weekday類型的

38、變量:變量day的取值范圍: 類型定義時(shí),表里列舉出來的七種標(biāo)識符,把這些標(biāo)識符看作符號常量。例如:day = sat;枚舉常量在機(jī)器內(nèi)部仍然是用整型數(shù)來存取定義某個(gè)枚舉類型的變量時(shí),分配幾個(gè)字節(jié)的內(nèi)存空間呢?2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-59-自定義的數(shù)據(jù)類型枚舉元素或枚舉常量第59頁,共93頁。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-60-使用枚舉類型注意:enum weekdaysun, mon, tue, wed, thu, fri, sat;在類型定義之后,對枚舉元素按常量處理,不能對它們賦值。sat=6; 枚舉元素具有默認(rèn)值,它們依次為:0,1,2,。

39、也可以在類型聲明時(shí)另行指定枚舉元素的值。enum weekdaysun=7,mon=1,tue,wed,thu,fri,sat4.2.2 枚舉變量定義及使用第60頁,共93頁。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-61-使用枚舉類型注意:枚舉值可以進(jìn)行關(guān)系運(yùn)算。整數(shù)值不能直接賦給枚舉變量;如需要將整數(shù)值賦給枚舉變量,應(yīng)進(jìn)行強(qiáng)制類型轉(zhuǎn)換. 例: int x=2; weekday day; day=x;? day= ( weekday)x;? 4.2.2 枚舉變量定義及使用第61頁,共93頁。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-62-例4-9讀入1-7之間的一個(gè)數(shù)代表今天

40、,輸出明天是星期幾。第62頁,共93頁。#include using namespace std;enum weekday sun=7,mon=1,tue,wed,thu,fri,sat;void main()coutn;weekday today = (weekday)n;weekday tomorrow = (weekday)(today+1)%7); tomorrow=0? sun:tomorrow; switch (tomorrow) case sun: coutTomorrow is Sunday.endl; break; case mon: coutTomorrow is Mond

41、ay.endl; break;第63頁,共93頁。 case tue: coutTomorrow is Tuesday.endl; break; case wed: coutTomorrow is Wednesday.endl;break; case thu: coutTomorrow is Thursday.endl; break; case fri: coutTomorrow is Friday.endl; break; case sat: coutTomorrow is Saturday.endl; break; default: coutinput error!endl; 第64頁,共

42、93頁。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-65-例:口袋中有紅、黃、藍(lán)、白、黑五種顏色的球若干個(gè)。每次從口袋中取出3個(gè)不同顏色的球,問有多少種取法。分析:由于球只能是五種顏色之一,故可用枚舉類型表示球的顏色。設(shè)取出的球?yàn)閕、j、k,根據(jù)題意,i、j、k分別可以有五種取值,且ijk??梢杂酶F舉法,逐個(gè)檢驗(yàn)每一種可能的組合,從中找出符合要求的組合并輸出。第65頁,共93頁。#includeenum colorred,yellow,blue,white,black;void main() enum color print; int n,loop,i,j,k; char c; n=0;

43、 for(i=red;i=black;i+) for(j=red;j=black;j+) if(i!=j) /前兩個(gè)球不同 for(k=red;k=black;k+)第66頁,共93頁。if(k!=i)&(k!=j) /第三個(gè)球不同于前兩個(gè) n=n+1; cout.width(4); coutn; for(loop=1;loop=3;loop+) switch(loop) case 1: print=(enum color)i; break;case 2: print=(enum color)j; break;case 3: print=(enum color)k; break;default

44、: break; 第67頁,共93頁。 switch(print) case red: coutred; break; case yellow: coutyellow; break; case blue: coutblue; break; case white: coutwhite; break; case black: coutblack; break; default: break; /end of for loop coutendl; /end of if /end of if couttotal:nendl;第68頁,共93頁。4.3 結(jié) 構(gòu) 類 型結(jié)構(gòu)類型 把現(xiàn)實(shí)生活中意義密切相關(guān)的

45、一組數(shù)據(jù)組合成一個(gè)整體,即由各種數(shù)據(jù)類型(可以是基本數(shù)據(jù)類型或已聲明的自定義數(shù)據(jù)類型)的數(shù)據(jù)組成一個(gè)集合,稱為結(jié)構(gòu)類型。 例如,一個(gè)學(xué)生的學(xué)號、姓名、年齡、成績等,雖然分別屬于不同的數(shù)據(jù)類型,但它們之間是密切相關(guān)的,因?yàn)槊恳唤M信息屬于一個(gè)人。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-69-第69頁,共93頁。2022/8/17北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-70-結(jié)構(gòu)類型的定義結(jié)構(gòu)的聲明形式:struct 結(jié)構(gòu)類型名 數(shù)據(jù)類型標(biāo)識符1 成員名1; 數(shù)據(jù)類型標(biāo)識符2 成員名2; 數(shù)據(jù)類型標(biāo)識符n 成員名n;;4.3.1 結(jié)構(gòu)類型的定義和初始化struct student long

46、 num; /學(xué)號 char name20; /姓名 char sex; /性別 int age; /年齡 float score;/成績 char addr30; /住址; /必須以分號結(jié)束結(jié)構(gòu)的定義 第70頁,共93頁。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-71-2結(jié)構(gòu)成員的訪問定義結(jié)構(gòu)類型的變量: 結(jié)構(gòu)類型名 結(jié)構(gòu)變量名;例: 定義student類型的變量: student s1;4.3.1 結(jié)構(gòu)類型的定義和初始化第71頁,共93頁。2022/8/17北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-72-結(jié)構(gòu)類型的變量所占的存儲空間是結(jié)構(gòu)中所有成員所占空間的總和 例 sizeof(s

47、tudent)= sizeof(long)+20*sizeof(char) +sizeof(char)+sizeof(int) +sizeof(float)+30*sizeof(char) sizeof(s1)=sizeof(student)結(jié)構(gòu)類型的變量所占的存儲空間考慮到對齊的要求,系統(tǒng)會將占空間不是4的倍數(shù)的成員空間調(diào)整為4的倍數(shù):將成員sex調(diào)整為4字節(jié),將成員addr調(diào)整為32字節(jié),總共占用68字節(jié)。第72頁,共93頁。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-73-結(jié)構(gòu)成員的訪問: 結(jié)構(gòu)變量名.成員名例: student s1; s1.num=1; couts1.numen

48、dl; endl;如同使用一個(gè)變量如同使用一個(gè)數(shù)組訪問結(jié)構(gòu)成員第73頁,共93頁。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-74-3結(jié)構(gòu)變量的初始化定義結(jié)構(gòu)變量時(shí)直接初始化 student s2=20191118,”Li Li”,18,90;分別給各個(gè)成員賦值 student s1; s1.num=20191118; strcpy(, “Li Li”);4.3.1 結(jié)構(gòu)類型的定義和初始化第74頁,共93頁。例4-10 結(jié)構(gòu)類型的聲明,變量的定義和初始化#include #include using namespace std;struct stude

49、nt /聲明新的數(shù)據(jù)類型 long num;/學(xué)號 char name20; /姓名 char sex;/性別 int age;/年齡stu=20191118,Li Li,F,18;void main() coutsetw(8)stu.numsetw(10) setw(3)stu.sexsetw(3)stu.ageendl;運(yùn)行結(jié)果:20191118 Li Li F 18第75頁,共93頁。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-76-結(jié)構(gòu)體可以由不同數(shù)據(jù)類型的成員構(gòu)成,這些成員可能是基本數(shù)據(jù)類型,也可能是自定義的數(shù)據(jù)類型,例如已聲明的另一個(gè)結(jié)構(gòu)類型。 例4-11 訪

50、問帶有結(jié)構(gòu)體類型成員的結(jié)構(gòu)體變量。 第76頁,共93頁。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-77-/例4-11結(jié)構(gòu)體定義的嵌套#include using namespace std;struct dateint year;int month;int day;struct Weather date today; double temp; /溫度 double wind; /風(fēng)力第77頁,共93頁。2022/8/17北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-78-void main() Weather today_weather=2019,11,30,10.0,3.1; coutto

51、day_weather.today.year年 today_weather.today.month月 today_weather.today.day日的天氣是:; cout 溫度: today_weather.temp; cout 度,風(fēng)力: today_weather.wind 級 endl;運(yùn)行結(jié)果:2019年11月30日的天氣是:溫度:10度,風(fēng)力:3.1級第78頁,共93頁。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-79-4結(jié)構(gòu)的賦值運(yùn)算屬于同一結(jié)構(gòu)類型的各個(gè)變量之間可以相互賦值。 這一點(diǎn)和數(shù)組不同,C+規(guī)定,不能直接進(jìn)行數(shù)組名的賦值,因?yàn)閿?shù)組名是一個(gè)常量,而結(jié)構(gòu)類型的變量可以

52、賦值。 不同結(jié)構(gòu)的變量不允許相互賦值。 即使這兩個(gè)變量可能具有同樣的成員。 4.3.1 結(jié)構(gòu)類型的定義和初始化第79頁,共93頁。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-80-例: struct student int num; char name20; s1 =1,”zhang”,s2 =2.”zhao”;student si;si=s1;例: struct person int ID; char name20; p1 =1,”zhang”,p2 =2.”zhao”;person pi;pi=p1;pi=s1; /?si=p1; /?第80頁,共93頁。2022/8/17北京郵電大

53、學(xué)信息與通信工程學(xué)院-81-結(jié)構(gòu)類型的一些復(fù)雜的用法包括:結(jié)構(gòu)數(shù)組結(jié)構(gòu)指針用結(jié)構(gòu)傳遞函數(shù)參數(shù)用結(jié)構(gòu)作為函數(shù)的返回值類型4.3.2 結(jié)構(gòu)數(shù)組第81頁,共93頁。2022/8/17北京郵電大學(xué)信息與通信工程學(xué)院-82-結(jié)構(gòu)數(shù)組 格式: 結(jié)構(gòu)名 數(shù)組名常量表達(dá)式;結(jié)構(gòu)數(shù)組的元素 結(jié)構(gòu)數(shù)組的每個(gè)元素都是該結(jié)構(gòu)類型的變量。4.3.2 結(jié)構(gòu)數(shù)組例: struct student char name15; int num; int score;student s30; for(i=0; ; cinsi.num; cinsi.score; 第82頁,共93頁。2022/8/17北京郵電大學(xué)電信

54、工程學(xué)院計(jì)算機(jī)技術(shù)中心-83-#include using namespace std;struct Employee char name20; unsigned long id; float salary;例4-12 公司有六個(gè)員工,把他們按工資由低到高排序。Employee allone6=zhang, 12345, 3390.0,wang, 13916, 4490.0,zhou, 27519, 3110.0,meng, 42876, 6230.0,yang, 23987, 4000.0,chen, 12335, 5110.0;第83頁,共93頁。2022/8/17北京郵電大學(xué)信息與通信工

55、程學(xué)院-84-void main() Employee temp; for(int i=1; i6; i+) /排序 for(int j=0; j allonej+1.salary) temp=allonej; /結(jié)構(gòu)變量的交換 allonej=allonej+1; allonej+1=temp; for(int k=0; k6; k+) /輸出 cout allonek.id allonek.salaryendl;運(yùn)行結(jié)果: zhou 27519 3110 zhang 12345 3390 yang 23987 4000 wang 13916 4490 chen 12335 5110 meng 42876 6230第84頁,共93頁。4.4 聯(lián) 合 類 型有時(shí)需要使幾

溫馨提示

  • 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

提交評論