《計(jì)算機(jī)二級(jí)C++九二.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《計(jì)算機(jī)二級(jí)C++九二.ppt(22頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、對于一維數(shù)組 : ( 1)數(shù)組名 array表示數(shù)組的首地址,即 array0的地址; ( 2)數(shù)組名 array是 可以看做一個(gè)指針變量,但值是不能變化 故又稱為地址常量。 ( 3) array+i是元素 arrayi的地址 即 array+i= 回顧 二維數(shù)組定義與元素引用 datatype arrayNamerowsizecolsize; int num42; 內(nèi)存 num num00 num01 num10 num11 num20 num21 num30 num31 4 X 2 = 8 8*sizeof(int) 字節(jié) num00 num01 num10 num11 num20 num
2、21 num30 num31 num 為了便于理解,二維數(shù)組一般理 解為幾行幾列的矩陣 二維數(shù)組初始化 int books42 = 11, 1294,22,450, 33,4000, 44,79; int arr43 = 1,2, 4,5, 7, 10 ; int arr43 = 1,2, 4,5 ; int arr43 = 1,2,4,5 ; 沒有花括號(hào)依次賦值,其余補(bǔ)零 通過賦初值定義二維數(shù)組的大小 int arr 3 = 1,2,3, 4,5, 6, 8 ; 由初值行數(shù)來確定第一維的大小 int arr 3 = 1, 2, 3, 4, 5; 第一 維的大小為: 1.數(shù)值數(shù) %列數(shù) =0,
3、維數(shù) =商 2.數(shù)值數(shù) %列數(shù)! =0,維數(shù) =商 +1 故 :上述等價(jià)于: int arr 23 = 1, 2, 3, 4, 5; int arr2 = 1,2,3, 4,5, 6, 8 ; 錯(cuò)誤,可以省略行但不能省略 列 從終端設(shè)備二維數(shù)組賦值 int i, j, num42; for (i = 0; i = 3; i+) for (j = 0; j =1 ; j+) scanf(%d, i j numi j 0 0 100 0 1 200 1 0 300 1 1 400 2 0 500 2 1 600 3 0 700 3 1 800 第一行 第二行 第三行 第四行 第一列 第二列 (3,
4、1) 800 (3,0) 700 (2,1) 600 (1,1) 400 (0,1) 200 (2,0) 500 (1,0) 300 (0,0) 100 行下標(biāo) 列下標(biāo) num0 0 二維數(shù)組和指針 int a34; 對于一個(gè)二維數(shù)組可以看成一個(gè)一維數(shù)組,這個(gè)一維數(shù)組 的每個(gè)元素又是一個(gè)一維數(shù)組。如上:可以將二維數(shù)組 a 看成一個(gè)由 a0,a1,a2三個(gè)元素組成的一維數(shù)組,而每 個(gè)元素 a0,a1,a2分別又是由四個(gè)元素組成的一維數(shù)組。 如 a0元素又可由 a00, a01, a02, a03四個(gè)元素 組成的一維數(shù)組。 對于二維數(shù)組: ( 1) a是 數(shù)組名, 包含三個(gè)元素 a0,a1,a2
5、( 2) 每個(gè)元素 ai 又是一個(gè)一維 數(shù)組,包含 4個(gè) 元素 int a34; a0 a1 a2 2000 2008 2016 2000 2002 2008 2010 2016 2018 a00 a01 a10 a11 a20 a21 a02 a03 a12 a13 a22 a23 前面對于一維數(shù)組學(xué)過 int a3數(shù)組名 a是一個(gè)地址常量, 或可以看做一個(gè)指針變量,值為第一個(gè)元素的地址 int a34; 首先討論二維數(shù)組中的一維數(shù)組名: 二維數(shù)組 a34,包括 a0,a1,a2三個(gè)元素,每個(gè)元素又是 一個(gè)一維數(shù)組名。故 a0,a1,a2三個(gè)一維數(shù)組名分別代 表地址常量,或指針,值為每行第一
6、個(gè)元素的地址。 討論二維數(shù)組名: 二維數(shù)組名 a,包含著三個(gè)一維數(shù)組名(地址常量或指針) 的指針,值為第一個(gè)元素的首地址。 回顧二重指針: int *p,*a,k=10; a= p= p a k a0 a1 a2 2000 2008 2016 2000 2002 2008 2010 2016 2018 a00 a01 a10 a11 a20 a21 a02 a03 a12 a13 a22 a23 a a+1 a+2 int a34; a00 a01 a10 a11 a20 a21 a02 a03 a12 a13 a22 a23 二維數(shù)組元素表示形式: ( 1) a12 ( 2) *(a1+2)
7、 ( 3) *(*(a+1)+2) ( 4) *( 例 int (*p)4,a34; p先與 *結(jié)合,說明 p是一個(gè)指針變量 再與 結(jié)合,即 p指向一個(gè)含有 4個(gè)元 素的一維數(shù)組。在這里 p的類型與二維 數(shù)組名 a相同 ,因此合法賦值語句: p=a; 故 p+1=a+1,p+i=a+1 則可用以下形式來表示 aij *(pi+j) *(*(p+i)+j) (*(p+i)j pij 1.( )不能少, 2.p是 行指針 , 不是 數(shù)組名 3.一維數(shù)組指針變量 維數(shù)和二維數(shù)組 列 數(shù) 必須 相同 1. 若有以下定義 int x10,*pt=x; 則對數(shù)組元素的正確引用 是 A)*0=i4,則正 確
8、的賦值是( ) A prt=a B qi=ai C prt=ai 3. 設(shè) int( *p) 4;,則 p的含義是( )。 A指向整型變量的指針數(shù)組 B指向 4個(gè)整型變量的函數(shù)指針 C 4個(gè)指向整型變量的指針變量 D指向具有 4個(gè)整型元素的一維數(shù)組的指針 4. 課后題 9.12和 9.13 9.7二維數(shù)組名和指針數(shù)組作為參數(shù) 1.二維數(shù)組名 作為實(shí)參時(shí),形參必須是一個(gè)指針變量 main() double sMN f (s); 則 f子函數(shù): f(double (*a)N) f(double a N) f(double aMN) 系統(tǒng)將 a處理成行指針 2.指針數(shù)組名 作為實(shí)參時(shí),形參必須是指向
9、指針的數(shù)組 main() double sMN, *pM; for()pi=si; f (p); 則 f子函數(shù)可為如下之一: f(double *aM) f(double *a ) f(double *a ) 9.8二維程序舉例 例題 9.11 編寫程序,通過調(diào)用隨機(jī)函數(shù)給 5*6的二維數(shù)組元素賦 10-40 范圍內(nèi)的整數(shù),求出二維數(shù)組每行元素的平均值 思路: #include #include #define M 6 #define N 5 void getdata(int (*) M) void lineave(int M,float *) void outdata (int NM,flo
10、at*) main 定義一個(gè)二維數(shù)組存放隨機(jī)數(shù); int rNM; 定義一個(gè)一維數(shù)組存放每行元素的平均值; inaveN; 調(diào)用一個(gè)子函數(shù)獲得隨機(jī)數(shù); getdata(r); 調(diào)用一個(gè)子函數(shù)求二維數(shù)組的行平均值; lineave(r,ave); 調(diào)用一個(gè)子函數(shù)輸出平均值: outdata(r,data); 注意格式:被調(diào)用函數(shù)的位置 函數(shù)原型:跟子函數(shù)函數(shù)一樣 但可省略參數(shù)名稱 獲得隨機(jī)數(shù)的子函數(shù): void getdata(int (*sp) M) int i,j,x; for(i=0;iN;i+) /控制行數(shù) j=0; while(j=10)/只有產(chǎn)生的隨機(jī)數(shù)在 =10至 40之間才可放入
11、數(shù)組 spij=x; j+; 求二維數(shù)組的行平均值: void lineave(int sp M,float *a) int i,j; float ave; for(i=0;iN;i+) ave=0.0;/每求完一行,重新將 ave賦值為 0.0 for(j=0;jM;j+) ave+=sij;/求每行的總和 ai=ave/M;/求行平均值存儲(chǔ)于數(shù)組 a中 輸出平均值的子函數(shù): void outdata (int spNM,float a ) int i,j; printf(輸出二維數(shù)組元素: n); for(i=0;iN;i+) for(j=0;jM;j+) printf(%4d,spij)
12、; printf(:%6.2fn,ai); 例題 9.12打印如下楊輝三角 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 1 1 6 15 20 1 思路:首先建立一個(gè)二維數(shù)組 根據(jù)規(guī)律給二維數(shù)組賦值 按照上述圖形輸出二維數(shù)組 規(guī)律: 1.第一列和斜對角線的元素為 1。 2.其他元素 =上一行的同列元素 +前列元素 for(i=0;in;i+) si0=1;sii=1; for(i=2;in;i+) for(j=1;jn;j+) sij=si-1j+si-1j-1; 規(guī)律:列數(shù) =行數(shù) for(i=0;in;i+) for(j=0;j=i;j+) printf(“%6d”,sij); 例題 9.13找出方陣每列中的最小元素及所在行號(hào) 23 87 10 44 11 91 66 24 5 51 31 2 19 91 28 65 40 9 6 39 22 35 49 82 76 思考: for(i=0;iN;i+) for(j=0;jN;j+) aij (位置是怎樣變化的?若換成 aji呢? )