9章二維數(shù)組.ppt_第1頁(yè)
9章二維數(shù)組.ppt_第2頁(yè)
9章二維數(shù)組.ppt_第3頁(yè)
9章二維數(shù)組.ppt_第4頁(yè)
9章二維數(shù)組.ppt_第5頁(yè)
已閱讀5頁(yè),還剩32頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、選擇法排序,輸入一個(gè)正整數(shù)n (1n10),再輸入n個(gè)整數(shù),用選擇法將它們從小到大排序后輸出。 設(shè) n=5 ,例如有5個(gè)數(shù):3 5 2 8 1,(1) 1 5 2 8 3 (2) 2 5 8 3 (3) 3 8 5 (4) 5 8,3 5 2 8 1 (n=5) 5個(gè)數(shù)(a0a4)中找最小數(shù),與a0交換 (1) 1 5 2 8 3 a4 a0 4個(gè)數(shù)(a1a4)中找最小數(shù),與a1交換 (2) 1 2 5 8 3 a2 a1 3個(gè)數(shù)(a2a4)中找最小數(shù),與a2交換 (3) 1 2 3 8 5 a4 a2 2個(gè)數(shù)(a3a4)中找最小數(shù),與a3交換 (4) 1 2 3 5 8 a4 a3,選擇法排

2、序 (程序段),for(k = 0; k n-1; k+) min = k; for(i = k+1; i n; i+) if(aiamin) min = i; temp = amin; /*交換*/ amin = ak; ak = temp; ,Enter n: 5 Enter 10 integers: 3 5 2 8 1 After sorted: 1 2 3 5 8,若一個(gè)一維數(shù)組,它的每一個(gè)元素是(類型相同的)一維數(shù)組時(shí),便構(gòu)成二維數(shù)組。 數(shù)組的類型相同:是指數(shù)組大小、元素類型相同。 數(shù)組的維數(shù):是指數(shù)組的下標(biāo)個(gè)數(shù),一維數(shù)組元素只有一個(gè)下標(biāo),二維數(shù)組元素有兩個(gè)下標(biāo)。 二維數(shù)組的定義 1

3、.定義形式: 存儲(chǔ)類別 類型標(biāo)識(shí)符 數(shù)組名行數(shù)列數(shù); 例:float b53; 定義了一個(gè)53的數(shù)組b,即數(shù)組為5行3列,可存放15個(gè)實(shí)型數(shù)據(jù)。,二維數(shù)組,例:int a23; 定義了一個(gè)23的數(shù)組a,即數(shù)組為2行3列,可存放6個(gè)整型數(shù)據(jù)。2.二維數(shù)組元素的表示形式: 數(shù)組名下標(biāo)下標(biāo)下標(biāo)稱第一維下標(biāo),下標(biāo)稱第二維下標(biāo)。 二維數(shù)組類似于數(shù)學(xué)中的矩陣 ,由行、列組成。 把所有第一維下標(biāo)相同的元素稱為行,所有第二維下標(biāo)相同的元素稱為列。,下標(biāo)1和下標(biāo)2:整型表達(dá)式 行下標(biāo)的取值范圍是0,行長(zhǎng)度-1 列下標(biāo)的取值范圍是0,列長(zhǎng)度-1,上面定義的二維數(shù)組可以理解為定義了3個(gè)一維數(shù)組, 即相當(dāng)于 floa

4、t a04, a14, a24; 此處把a(bǔ)0, a1, a2看作是一維數(shù)組的名字。,C語(yǔ)言把二維數(shù)組看作是一種特殊的一維數(shù)組,它的元素又是一個(gè)一維組。,2.存放方式: 按行存放: 在內(nèi)存中先順序存放第一行元素, 再存放第二行元素,。,數(shù)組a的9個(gè)元素如下:,定義方式: 類型說(shuō)明符 數(shù)組名常量表達(dá)式1常量表達(dá)2.常量表達(dá)式N 多維數(shù)組在內(nèi)存中的排列順序?yàn)椋?第一維的下標(biāo)變化最慢, 最右邊的下標(biāo)變化最快。,3. 多維數(shù)組的定義,根據(jù)二維數(shù)組的定義,我們可以類推出多維數(shù)組的定義。 static int b223; /*定義了一個(gè)維的靜態(tài)整型數(shù)組*/ float c2322; /*定義了一個(gè)維浮點(diǎn)型數(shù)

5、組*/,在數(shù)組定義時(shí),多維數(shù)組的維數(shù)從左到右第一個(gè)稱第一維,第二個(gè)稱第二維,依此類推。多維數(shù)組元素的順序仍由下標(biāo)決定。下標(biāo)的變化是先變最右邊的,再依次變化左邊的下標(biāo)。 三維數(shù)組b的12個(gè)元素是: b000 b001 b002 b010 b011 b012 b100 b101 b102 b110 b111 b112,多維數(shù)組的定義,1.二維數(shù)組元素的引用形式:數(shù)組名下標(biāo)1下標(biāo)2 先定義,后使用 下標(biāo)稱第一維下標(biāo)(或稱行),下標(biāo)稱第二維下標(biāo)(或稱列)。下標(biāo)從開始變化,其值分別小于數(shù)組定義中的常量表達(dá)式與常量表達(dá)式。,二維數(shù)組元素的引用,注意,1.下標(biāo)是整型常量或表達(dá)式。 2.下標(biāo)值應(yīng)在定義的數(shù)組的

6、大小范圍內(nèi)。,如: int a34; 則: a34=3;,因?yàn)樾辛械淖畲笾禐?和3,二維數(shù)組的引用:,二維數(shù)組的元素的表示形式為: 數(shù)組名下標(biāo)1下標(biāo)2,二維數(shù)組的每一個(gè)元素都可以作一個(gè)變量來(lái)使用。 如: printf(%d,a00); scanf(%d,在二維數(shù)組中,一個(gè)元素的位置由其下標(biāo)決定。 對(duì) float a43;其12個(gè)元素是: 第 ()行:a00,a01,a02 第 ()行:a10,a11,a12 第 ()行:a20,a21,a22 第 ()行:a30,a31,a32,二維數(shù)組的存儲(chǔ)結(jié)構(gòu) 設(shè)有定義 int a23; float b32;,系統(tǒng)為數(shù)組在內(nèi)存中分配一片連續(xù)的內(nèi)存空間,將二

7、維數(shù)組元素按行的順序存儲(chǔ)在所分配的內(nèi)存區(qū)域。 數(shù)組a與b的各元素的存儲(chǔ)順序如右圖所示,二維數(shù)組的元素在內(nèi)存中按行/列方式存放,二維數(shù)組的初始化,1、分行賦初值 int a33 = 1,2,3,4,5,6,7,8,9; static int b43 = 1,2,3, ,4,5;,數(shù)組a 1 2 3 4 5 6 7 8 9,數(shù)組b 1 2 3 0 0 0 4 5 0 0 0 0,2、順序賦初值 int a33 = 1,2,3,4,5,6,7,8,9; static int b43 = 1,2,3,0,0,0,4,5;,3.對(duì)部分元素賦值 int a34= 1, 5, 9 ;,1 0 0 0 5 0

8、 0 0 9 0 0 0,1 0 0 0 5 6 0 0 0 0 0 0,1 0 0 0 0 0 0 0 9 0 0 0,int a34= 1, , 9 ;,int a34= 1, 5, 6 ;,4.如果對(duì)全部元素賦初值, 則定義數(shù)組對(duì)第一維的長(zhǎng)度可以不指定, 但對(duì)第二維長(zhǎng)度不缺省。 int a34=1,2,3,4,5,6,7,8,9,10,11,12; int a 4=1,2,3,4,5,6,7,8,9,10,11,12; 也可以只對(duì)部分元素賦值而省略第一維的長(zhǎng)度, 但應(yīng)分行賦初值。 int a 4= 0, 0, 3, , 0, 10 ; int a 3=0,0,5;,第一維的大小為多少?,

9、二維數(shù)組的初始化,4.如果對(duì)全部元素賦初值, 則定義數(shù)組對(duì)第一維的長(zhǎng)度可以不指定, 但對(duì)第二維長(zhǎng)度不缺省。 int a34=1,2,3,4,5,6,7,8,9,10,11,12; int a 4=1,2,3,4,5,6,7,8,9,10,11,12; 也可以只對(duì)部分元素賦值而省略第一維的長(zhǎng)度, 但應(yīng)分行賦初值。 int a 4= 0, 0, 3, , 0, 10 ; int a 3=0,0,5;,第一維的大小為多少?,使用二維數(shù)組編程,行下標(biāo)和列下標(biāo)分別做為循環(huán)變量, 通過(guò)二重循環(huán),遍歷二維數(shù)組 通常將 行下標(biāo)做為外循環(huán)的循環(huán)變量 列下標(biāo)做為內(nèi)循環(huán),例 二維數(shù)組輸入輸出,#include ma

10、in() int a23; int j,k; printf(nInput array a:); for (j=0;j2;j+) for (k=0;k3;k+) scanf(%d, /*輸出一行后換行,再輸出下一行*/ ,輸入:Input array a:1 2 3 4 5 6 輸出:Output array a: 1 2 3 4 5 6,對(duì)二維數(shù)組的輸入輸出多使用二層循環(huán)結(jié)構(gòu)來(lái)實(shí)現(xiàn)。外層循環(huán)處理各行,循環(huán)控制變量j作為數(shù)組元素的第一維下標(biāo);內(nèi)層循環(huán)處理一行的各列元素,循環(huán)控制變量k作為元素的第二維下標(biāo)。,定義32的二維數(shù)組a,數(shù)組元素的值由下式給出,按矩陣的形式輸出a。 aij = i + j

11、 (0i2,0j1),例 生成一個(gè)矩陣并輸出,int a32; a00 a01 a10 a11 a20 a21,0 1 1 2 2 3,#include void main(void) int i, j; int a32; for(i = 0; i 3; i+) for(j = 0; j 2; j+) aij = i + j; for(i = 0; i 3; i+) for(j = 0; j 2; j+) printf(%4d, aij); printf(n); ,a00 a01 a10 a11 a20 a21,i = 0 j = 0 i = 0 j = 1 i = 1 j = 0 i = 1

12、 j = 1 i = 2 j = 0 i = 2 j = 1,0 1 1 2 2 3,例 從鍵盤上輸入9個(gè)整數(shù),保存在二維數(shù)組中,按數(shù)組原來(lái)位置輸出第一行和第一列的所有元素。 ,分析:1、輸入數(shù)組。2、輸出數(shù)組時(shí)要考慮不是所有數(shù)據(jù)都輸出。 思考:應(yīng)該輸出的數(shù)據(jù)在位置關(guān)系上有何特點(diǎn)?(關(guān)鍵!),#include main() int i,j,a33; for(i= 0;i3;i+) /*輸入數(shù)組*/ for(j=0;j3;j+) printf(a%d%d=,i,j); scanf(%d, ,for(i=0;i3;i+) /*輸出數(shù)組*/ for (j=0;j3;j+) if(i=1|j=1) p

13、rintf(%-6d,aij); else printf(%-6c, ); printf(“n”); ,例 用如下的33矩陣初始化數(shù)組a33,求矩陣的轉(zhuǎn)置矩陣。 123147 456258 789369 轉(zhuǎn)置矩陣:是將原矩陣元素按行列互換形成的矩陣 方法1:轉(zhuǎn)置矩陣是將原矩陣元素按行列互換形成的。 123147 456258 789369 方法2:沿主對(duì)角線將對(duì)稱位置元素互換即可。,程序如下: #include main() int j,k; int a33=1,2,3,4,5,6,7,8,9,b33; for (j=0;j3;j+) for(k=0;k3;k+) bjk=akj; for(j

14、=0;j3;j+) for(k=0;k3;k+) printf(“%6d”,bjk); printf(“n”); ,數(shù)組作為函數(shù)的參數(shù),數(shù)組作為函數(shù)參數(shù)主要有兩種情況: 數(shù)組元素作為函數(shù)的實(shí)參:這種情況與普通變量作實(shí)參一樣,是將數(shù)組元素的值傳給形參。形參的變化不會(huì)影響實(shí)參數(shù)組元素,我們稱這種參數(shù)傳遞方式為“值傳遞”。 數(shù)組名作實(shí)參:要求函數(shù)形參是相同類型的數(shù)組或指針,這種方式是把實(shí)參數(shù)組的起始地址傳給形參數(shù)組,形參數(shù)組的改變也是對(duì)實(shí)參數(shù)組的改變,稱這種參數(shù)傳遞方式為“地址傳遞”。,數(shù)組名作函數(shù)參數(shù)時(shí)形參與實(shí)參都應(yīng)使用數(shù)組名,且分別在被調(diào)用函數(shù)與主調(diào)函數(shù)中的說(shuō)明。 實(shí)參與形參類型要一致。 實(shí)參數(shù)

15、組與形參數(shù)組大小可以不一致,形參數(shù)組可不指定大小。 C編譯程序不檢查形參 數(shù)組的大小。 (1)在一維形參數(shù)組名后面可只跟一對(duì)空方括號(hào)。 為在被調(diào)用函數(shù)中處理數(shù)組元素的需要,可另設(shè)一參數(shù)來(lái)傳遞數(shù)組元素個(gè)數(shù)。 (2)對(duì)多維數(shù)組而言,形參的第一維可不指定,但其它維必須指定。,數(shù)組名做函數(shù)參數(shù)時(shí)是把實(shí)參數(shù)組的起始地址傳給了形參數(shù)組,即:形參數(shù)組與實(shí)參數(shù)組對(duì)應(yīng)同一段內(nèi)存單元。 利用這個(gè)特點(diǎn),可用數(shù)組返回多個(gè)值。,數(shù)組名做函數(shù)參數(shù),數(shù)組名是指針常量,也被稱為常指針 數(shù)組名做實(shí)參,形參也是數(shù)組名,#include int sum (int array , int n); void main() int b5

16、=1, 4, 5, 7, 9; printf(%dn, sum(b, 5); ,int sum (int array , int n) int i, s=0; for(i=0; in; i+) s+=arrayi; return(s); ,例 利用函數(shù)調(diào)用求數(shù)組元素之和,數(shù)組名,sum(b, 5),b0+b1+.+b4,sum(b, 3),b0+b1+b2,sum(b+1, 3),b1+b2+b3,sum( void main(void) int i, a10,n; printf(Enter n: ); scanf(%d, ,例 將數(shù)組元素逆序存放。,void comper(int p , i

17、nt n) int i, j, t; for(i=0,j=n-1; ij; i+, j-) t=pi; pi=pj; pj=t; ,Enter n:6 Enter 10 integers: 10 9 8 7 6 5 5 6 7 8 9 10,數(shù)組名做為函數(shù)的參數(shù),在函數(shù)調(diào)用時(shí),將實(shí)參數(shù)組首元素的地址傳給形參,因此,形參也指向?qū)崊?shù)組的首元素。如果改變形參所指向單元的值,就是改變實(shí)參數(shù)組首元素的值。 或:形參數(shù)組和實(shí)參數(shù)組共用同一段存貯空間,如果形參數(shù)組中元素的值發(fā)生變化,實(shí)參數(shù)組中元素的值也同時(shí)發(fā)生變化。,二維數(shù)組和指針 1.二維數(shù)組元素的地址和二維數(shù)組名,對(duì)于一維數(shù)組: (1)數(shù)組名a表示數(shù)

18、組的首地址,即a 0的地址; (2)數(shù)組名a 是地址常量 (3)a +i是元素a i的地址 (4)a i *(a +i) 這些同樣可以運(yùn)用于二維數(shù)組,設(shè)有:int a34, *p;,對(duì)于二維數(shù)組: (1)a是數(shù)組名, 包含三個(gè)元素 a0,a1,a2 (2)每個(gè)元素ai 又是一個(gè)一維 數(shù)組,包含4個(gè) 元素,short int a34;,基類型,行指針與列指針,對(duì)二維數(shù)組 int a34,有 a-二維數(shù)組的首地址,即第0行的首地址 a+i-第i行的首地址 ai *(a+i)-第i行第0列的元素地址 ai+j *(a+i)+j -第i行第j列的元素地址 *(ai+j) *(*(a+i)+j) aij,a+i= 例 short int

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論