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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

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

5、的總和,如果數(shù)組有N個元素,它所占的字節(jié)數(shù)可以通過以下方式得到:sizeof (數(shù)組名) 或 N*sizeof (數(shù)組類型)。2022/8/17北京郵電大學信息與通信工程學院-8-第8頁,共93頁。4.1.1 數(shù)組定義及初始化2. 數(shù)組初始化在定義數(shù)組時,直接給出賦給數(shù)組元素的值,稱為數(shù)組初始化。數(shù)組初始化語法形式 類型標識符 數(shù)組名常量表達式 = 以逗號隔開的初始化值; 2022/8/17北京郵電大學信息與通信工程學院-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北京郵電大學信息與通信工程學院-10-第10頁,共93頁。4.1.1 數(shù)組定義及初始化注意初始化數(shù)組時,給定的初始化數(shù)值不能比數(shù)組元素多,但可以比數(shù)組元素少;如果少,初始化列表中的初始值將從下標0開始依次分配給各元素,后面沒有得到初始值的元素被初始化為0。 double d10 = 1.0 ,2.0;如果使用初始化列表,則表內至少包含一個初始值,否則編譯將出現(xiàn)錯誤。如果沒有初始化列表,即只定義不做初始化,一般在函數(shù)內部定義的自動局部數(shù)組,其各元素的值是隨機值,使用時

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

8、1 定義各種基本類型的數(shù)組并初始化,利用debug調試方式觀察數(shù)組各元素得到的值、數(shù)組占用的空間、數(shù)組元素占用的空間。2022/8/17北京郵電大學信息與通信工程學院-13-第13頁,共93頁。2022/8/17北京郵電大學信息與通信工程學院-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北京郵電大學信息與通信工程學院-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; 運行結

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的值即可,其他語句不需要修改;在多文件結構中,可將一些符號常量的定義放在頭文件中,更利于工程的維護和修改。第15頁,共93頁。4.1.2 訪問數(shù)組元素 數(shù)組元素是用下標來區(qū)分的,指定要訪問的數(shù)組元素的語法形式為: 數(shù)組名下標表達式 下標表達式:可以是常量、變量或表達式,其值大于或等于0,小于數(shù)組的大小。例: const int N

11、 = 8; float angleN; for (int k=0; kN; k+) anglek = 3.14f / N * k; /給元素賦值,寫操作 coutanglek , ; /讀取元素值 2022/8/17北京郵電大學信息與通信工程學院-16-第16頁,共93頁。4.1.2 訪問數(shù)組元素例4-2 將正弦函數(shù)的一個周期2分為N等份,定義數(shù)組分別存儲自變量值和函數(shù)值,并顯示數(shù)組元素的值。2022/8/17北京郵電大學信息與通信工程學院-17-第17頁,共93頁。2022/8/17北京郵電大學信息與通信工程學院-18-/例4-2用數(shù)組存儲和顯示正弦函數(shù)一周期內的值 #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; 運行結果: 弧度 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ù)組元素時需要注意(1)數(shù)組元素的下標表達式的結果必須為0或正整數(shù)。(2)數(shù)組元素的下標值不得超過數(shù)組聲明時所限定的上下界。數(shù)組元素下標的下界是0,上界是相應維數(shù)大小減1。例:int a10; /a數(shù)組可使用的有效下標為09float f50; /f數(shù)組可使用的有效下標為0492022/8/17北京郵電大學信息與通信工程學院-19-第19頁,共9

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

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

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

17、0, n); 2022/8/17北京郵電大學信息與通信工程學院-24-第24頁,共93頁。4.1.3 字符數(shù)組2字符數(shù)組的輸入和輸出字符數(shù)組的輸出逐元素輸出通過數(shù)組名輸出。例如,下面的語句輸出字符數(shù)組buffer中的字符串: coutbuffer; 例4-3 從鍵盤輸入一行或多行字符串,用字符數(shù)組存儲,并統(tǒng)計所輸入的字符串中26個字母出現(xiàn)的次數(shù)。2022/8/17北京郵電大學信息與通信工程學院-25-第25頁,共93頁。2022/8/17北京郵電大學信息與通信工程學院-26-/例4-3輸入26個英文字符的分布統(tǒng)計 #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北京郵電大學信息與通信工程學院-27- do /循環(huán)輸入每一行字符 coutenter a string:n; cin.getline(buffer, N,n); /獲得一行輸入字符串 k = 0; /對于輸入的每一行字符,統(tǒng)計字符出現(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北京郵電大學信息與通信工程學院-28- coutthe statistics result:endl; for (i=0; i0) coutlettersi: countsiendl; 第28頁,共93頁。思考題:如何統(tǒng)計一個txt文件中各種字符出現(xiàn)的次數(shù)?2022/8/17北京郵電大學信息與通信工程學院-29-第29頁,共93頁。4.1.4 多維數(shù)組1多維數(shù)組的定義定義多維數(shù)組語法形式

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

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

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

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

24、 多維數(shù)組3初始化多維數(shù)組提供數(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北京郵電大學信息與通信工程學院-37-第37頁,共93頁。4.1.4 多維數(shù)組3初始化多維數(shù)組可以省略內層的括號,只要程序好讀即可。例如用換行的方式: 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北京郵電大學信息與通信工程學院-38-第38頁,共93頁。4.1.4 多維數(shù)組3初始化多維數(shù)組 多維數(shù)組的初始化,也可以只給出部分值;例: int a24= 4, 3; 則只有a00、a01分別得到初始值4和3,其余各元素的值為0??衫么颂匦詫⒁恍┯米鲇嫈?shù)器的多維數(shù)組初始化為0。例:定義并初始化二維整型計數(shù)器counts: int counts512256 = 0; 這是將多維數(shù)組元素置0的最簡便方法之一。2022/8/17北京郵電大

26、學信息與通信工程學院-39-第39頁,共93頁。4.1.4 多維數(shù)組4訪問多維數(shù)組的元素訪問多維數(shù)組的元素時,只要指定要訪問的數(shù)組元素的具體下標值即可,語法形式為: 數(shù)組名下標表達式1下標表達式n 其中,下標表達式的個數(shù)同數(shù)組維數(shù),“下標表達式i”(1in)可以用常量、變量或表達式,其值大于或等于0,小于數(shù)組對應維的大小,即 0下標表達式i的值第i維的大小 2022/8/17北京郵電大學信息與通信工程學院-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北京郵電大學信息與通信工程學院-41-第41頁,共93頁。4.1.4 多維數(shù)組例4-5 編程實現(xiàn)矩陣轉置功能,矩陣行數(shù)為M,列數(shù)為N,用二維數(shù)組表示矩陣。2022/8/17北京郵電大學信息與通信工程學院-42-第42頁,共93頁。2022/8/17北京郵電大學信息與通信工程學院-43-/例4-5矩陣轉置 #include #include #include using namespace std; void main() const int M = 5; const int N = 6; int matrixMN; /矩

28、陣 int tMatrixNM; /轉置矩陣 srand(unsigned int) time(NULL); int i, j; 第43頁,共93頁。2022/8/17北京郵電大學信息與通信工程學院-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北京郵電大學信息與通信工程學院-45- couttranspose of matrix:endl; for

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

30、e std; void main() const int cStuNum=40; /學生人數(shù) const int cScoreNum=11; /分數(shù)個數(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; /全部分數(shù) int countscScoreNum = 0; /分數(shù)統(tǒng)計計數(shù)器,初始化為0 第47頁,共93頁。2022/8/17北京郵電大學信息與通信工程學院-4

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

32、#include #include #include using namespace std; void main() const int N = 5; int aNN, bNN; /兩個相乘的矩陣 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北京郵電大學信息與通信工程學院-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北京郵電大學信息與通信工程學院-52- /計算乘積矩陣c,并顯示 for(i=0; iN; i+) for(j=0; jN; j+) for( k=0; kN; k+) /求c的一個元素 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ù)組應用舉例例4-8 給定二維數(shù)組,編程計算元素的均值和方差。2022/8/17北京郵電大學信息與通信工程學院-53-第53頁,共93頁。2022/8/17北京郵電大學信息與通信工程學院-54-/例4-8計算一組數(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北京郵電大學信息與通信工程學院-55- /統(tǒng)計均值 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北京郵電大學信息與通信工程學院-56- /統(tǒng)計方差 for( row=0; rowROWS; row+ ) for( col=0; col0) var /= size; else var = 0; /顯示統(tǒng)計結果 coutmean=mean; stdvar=varendl; 第56頁,共93頁。4.2 枚 舉 類 型C+語言不僅有豐富的基本數(shù)據(jù)類型,而且允許用戶自己定義數(shù)據(jù)類型。枚舉、結構、聯(lián)合都屬于自定義類型2022/8/17北京郵電大學信息與通信工程學院-57-第57

37、頁,共93頁。2022/8/17北京郵電大學信息與通信工程學院-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; /定義一個weekday類型的

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

39、也可以在類型聲明時另行指定枚舉元素的值。enum weekdaysun=7,mon=1,tue,wed,thu,fri,sat4.2.2 枚舉變量定義及使用第60頁,共93頁。2022/8/17北京郵電大學信息與通信工程學院-61-使用枚舉類型注意:枚舉值可以進行關系運算。整數(shù)值不能直接賦給枚舉變量;如需要將整數(shù)值賦給枚舉變量,應進行強制類型轉換. 例: int x=2; weekday day; day=x;? day= ( weekday)x;? 4.2.2 枚舉變量定義及使用第61頁,共93頁。2022/8/17北京郵電大學信息與通信工程學院-62-例4-9讀入1-7之間的一個數(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北京郵電大學信息與通信工程學院-65-例:口袋中有紅、黃、藍、白、黑五種顏色的球若干個。每次從口袋中取出3個不同顏色的球,問有多少種取法。分析:由于球只能是五種顏色之一,故可用枚舉類型表示球的顏色。設取出的球為i、j、k,根據(jù)題意,i、j、k分別可以有五種取值,且ijk??梢杂酶F舉法,逐個檢驗每一種可能的組合,從中找出符合要求的組合并輸出。第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) /前兩個球不同 for(k=red;k=black;k+)第66頁,共93頁。if(k!=i)&(k!=j) /第三個球不同于前兩個 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 結 構 類 型結構類型 把現(xiàn)實生活中意義密切相關的

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

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

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

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

49、nt /聲明新的數(shù)據(jù)類型 long num;/學號 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;運行結果:20191118 Li Li F 18第75頁,共93頁。2022/8/17北京郵電大學信息與通信工程學院-76-結構體可以由不同數(shù)據(jù)類型的成員構成,這些成員可能是基本數(shù)據(jù)類型,也可能是自定義的數(shù)據(jù)類型,例如已聲明的另一個結構類型。 例4-11 訪

50、問帶有結構體類型成員的結構體變量。 第76頁,共93頁。2022/8/17北京郵電大學信息與通信工程學院-77-/例4-11結構體定義的嵌套#include using namespace std;struct dateint year;int month;int day;struct Weather date today; double temp; /溫度 double wind; /風力第77頁,共93頁。2022/8/17北京郵電大學電信工程學院計算機技術中心-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 度,風力: today_weather.wind 級 endl;運行結果:2019年11月30日的天氣是:溫度:10度,風力:3.1級第78頁,共93頁。2022/8/17北京郵電大學信息與通信工程學院-79-4結構的賦值運算屬于同一結構類型的各個變量之間可以相互賦值。 這一點和數(shù)組不同,C+規(guī)定,不能直接進行數(shù)組名的賦值,因為數(shù)組名是一個常量,而結構類型的變量可以

52、賦值。 不同結構的變量不允許相互賦值。 即使這兩個變量可能具有同樣的成員。 4.3.1 結構類型的定義和初始化第79頁,共93頁。2022/8/17北京郵電大學信息與通信工程學院-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、學信息與通信工程學院-81-結構類型的一些復雜的用法包括:結構數(shù)組結構指針用結構傳遞函數(shù)參數(shù)用結構作為函數(shù)的返回值類型4.3.2 結構數(shù)組第81頁,共93頁。2022/8/17北京郵電大學信息與通信工程學院-82-結構數(shù)組 格式: 結構名 數(shù)組名常量表達式;結構數(shù)組的元素 結構數(shù)組的每個元素都是該結構類型的變量。4.3.2 結構數(shù)組例: struct student char name15; int num; int score;student s30; for(i=0; ; cinsi.num; cinsi.score; 第82頁,共93頁。2022/8/17北京郵電大學電信

54、工程學院計算機技術中心-83-#include using namespace std;struct Employee char name20; unsigned long id; float salary;例4-12 公司有六個員工,把他們按工資由低到高排序。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北京郵電大學信息與通信工

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論