C語言第6章數(shù)組PPT課件_第1頁
C語言第6章數(shù)組PPT課件_第2頁
C語言第6章數(shù)組PPT課件_第3頁
C語言第6章數(shù)組PPT課件_第4頁
C語言第6章數(shù)組PPT課件_第5頁
已閱讀5頁,還剩73頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第第6 6章章 數(shù)組數(shù)組 第第6章章 數(shù)組數(shù)組 6.1 數(shù)組的概念數(shù)組的概念 6.2 一維數(shù)組一維數(shù)組 6.3 二維數(shù)組二維數(shù)組 6.4 字符數(shù)組與字符串字符數(shù)組與字符串 第第6 6章章 數(shù)組數(shù)組 6.1 數(shù)數(shù) 組組 的的 概概 念念 數(shù)組是相同類型數(shù)據(jù)的有序集合。數(shù)組描述的是相同類型的若干個數(shù)據(jù),按照一定的先后次序排列組合而成。其中,每一個數(shù)據(jù)稱作一個數(shù)組元素,每個數(shù)組元素可以通過一個下標(biāo)來訪問它們。 第第6 6章章 數(shù)組數(shù)組 如,全班40個學(xué)生成績都是單精度類型,并且按照學(xué)號的順序排列組合而成一個數(shù)組。為了區(qū)分不同的數(shù)組,每個數(shù)組用一個名字來表示,稱為數(shù)組名。40個學(xué)生的成績可表示為:a0

2、,a1, ,a39,用它們分別來存放第一個學(xué)生的成績、第二個學(xué)生的成績、 、第四十個學(xué)生的成績。第第6 6章章 數(shù)組數(shù)組 數(shù)組有兩個特點: (1) 其長度是確定的,在定義的同時確定了其大小,在程序中不允許隨機變動。 (2) 其元素必須是相同類型,不允許出現(xiàn)混合類型。第第6 6章章 數(shù)組數(shù)組 6.2 一一 維維 數(shù)數(shù) 組組 6.2.1 一維數(shù)組的定義 【例6.1】 已知全班40個學(xué)生的計算機基礎(chǔ)課的考試成績,求全班的平均成績。第第6 6章章 數(shù)組數(shù)組 #include main() float a41; /*定義一個一維實型數(shù)組a*/ float sum=0,aver; int i; for(i

3、=1;i=40;i+) scanf(%f,&ai); for(i=1;i=40;i+)第第6 6章章 數(shù)組數(shù)組 sum+=ai; aver=sum/40; printf(全班平均成績:%f,aver); 在上例中,“float a41;”是一個一維數(shù)組的說明語句,說明數(shù)組名為a,它由41個元素組成,每個數(shù)組元素為單精度實型。任何一個數(shù)組在使用之前必須先定義。第第6 6章章 數(shù)組數(shù)組 一維數(shù)組的定義格式為 例如:auto int num40; static float score40,average40; char ch20;第第6 6章章 數(shù)組數(shù)組 說明: (1) :如前面章節(jié)的有關(guān)規(guī)

4、定,可以為auto,static,extern等。 (2) :說明了數(shù)組元素所屬的數(shù)據(jù)類型,可以為 int,float,char 等。 (3) :其命名規(guī)則和變量名相同,同樣遵循標(biāo)識符命名規(guī)則。第第6 6章章 數(shù)組數(shù)組 圖6-1 數(shù)組元素存儲形式 a0a1a2a3a4a5a6a7a8a9第第6 6章章 數(shù)組數(shù)組 (4) :表示數(shù)組元素的個數(shù),即數(shù)組長度。例如,b20表示b數(shù)組有20個元素,最小下標(biāo)為0,最大下標(biāo)為19,不能使用b20。常量表達(dá)式中只能是常量和符號常量,不允許使用變量。例如: int an; /* 定義錯誤:常量表達(dá)式不能是變量n */ 是錯誤的。 (5) 在說明一個數(shù)組后,系統(tǒng)

5、會在內(nèi)存中分配一片連續(xù)的存儲空間用于存放數(shù)組元素,如說明語句“int a10;”,它在內(nèi)存中的存放形式如圖6-1所示,其下標(biāo)取值范圍是09。第第6 6章章 數(shù)組數(shù)組 6.2.2 一維數(shù)組的引用 c語言規(guī)定只能逐個引用數(shù)組元素而不能一次引用整個數(shù)組。數(shù)組元素的引用形式為 數(shù)組名數(shù)組名下標(biāo)表達(dá)式下標(biāo)表達(dá)式 其中,“下標(biāo)表達(dá)式”可以是整型常量、整型變量或整型表達(dá)式,其值均為非負(fù)數(shù)。例如,在說明語句“int a10;”中,a5表示數(shù)組中第6個數(shù)組元素;a2*4表示數(shù)組中第8個數(shù)組元素;ai(0i10)表示數(shù)組中第i個數(shù)組元素。第第6 6章章 數(shù)組數(shù)組 【例6.2】 求數(shù)組中最大值和最小值。程序如下:#

6、includemain() int a10; int i,max,min; printf(請輸入10個整數(shù):); for(i=0;i10;i+) scanf(%d, &ai);第第6 6章章 數(shù)組數(shù)組 max=min=a0;for(i=1;i10;i+) if(aimax) max=ai; printf(最大數(shù)為%d, max);printf(最小數(shù)為%d, min);第第6 6章章 數(shù)組數(shù)組 6.2.3 一維數(shù)組的初始化 在定義數(shù)組元素時,系統(tǒng)為其分配了一定的存儲空間,所有的存儲空間的賦初始值可以在程序運行之前,即在編譯階段進(jìn)行,也可在運行期間,用賦值語句或輸入語句使數(shù)組中元素得到初

7、始值。第第6 6章章 數(shù)組數(shù)組 1在編譯階段賦初值 (1) 對全部數(shù)組元素賦初值。例如: static int a6=1,2,3,4,5,6; 其中,數(shù)組元素的個數(shù)和花括號中初值的個數(shù)是相同的,并且花括號中的初值從左到右依次賦給每個數(shù)組元素,即a0=1,a1=2,a2=3,a3=4,a4=5,a5=6。 第第6 6章章 數(shù)組數(shù)組 (2) 只給一部分元素賦初值。例如: static int a10=0,1,2,3,4; 此語句定義a數(shù)組有10個元素,但花括號中只提供了5個初值,表示只給前5個數(shù)組元素a0a4賦初值,后面5個元素a5a9 系統(tǒng)自動賦0。第第6 6章章 數(shù)組數(shù)組 (3) 給數(shù)組全部元

8、素賦初值時,可以省略數(shù)組長度。例如: int a=10,20,30,40,50; 省略數(shù)組長度時,系統(tǒng)將根據(jù)賦初值的個數(shù)確定數(shù)組長度。上述大括號內(nèi)共有5個初值,說明數(shù)組a的元素個數(shù)為5,即數(shù)組長度為5。第第6 6章章 數(shù)組數(shù)組 2在運行階段賦初值舉例如下:int a10;int i;for(i=0;i10;i+) scanf(%d, &ai);第第6 6章章 數(shù)組數(shù)組 6.2.4 一維數(shù)組應(yīng)用舉例【例6.3】 用數(shù)組的方法求fibonacci數(shù)列。程序如下: #include main() int i; static int f20=1,1;for(i=2;i20;i+)第第6 6章章

9、 數(shù)組數(shù)組 fi=fi-2+fi-1;for(i=0;i20;i+) if(i%5=0) printf(n); printf(%12d, fi);第第6 6章章 數(shù)組數(shù)組 運行結(jié)果如下: 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765第第6 6章章 數(shù)組數(shù)組 【例6.4】 用冒泡法對10個數(shù)按由小到大的順序排序。 分析:冒泡法排序又稱為交換排序?;舅枷胧牵簭淖詈笠粋€元素開始,兩兩相鄰元素比較,將較小的元素交換到前面,直到把最小元素交換到最前面為止。排序過程如下:第第6 6章章 數(shù)組數(shù)組 原始狀態(tài) 7 4 1

10、0 1 20 5 3 9第一次比較結(jié)果 7 4 10 1 20 5 3 9第二次比較結(jié)果 7 4 10 1 20 3 5 9第三次比較結(jié)果 7 4 10 1 3 20 5 9第四次比較結(jié)果 7 4 10 1 3 20 5 9第五次比較結(jié)果 7 4 1 10 3 20 5 9第六次比較結(jié)果 7 1 4 10 3 20 5 9第七次比較結(jié)果 1 7 4 10 3 20 5 9第第6 6章章 數(shù)組數(shù)組 經(jīng)上述過程完成對8個數(shù)的第一輪比較,比較結(jié)果將最小數(shù)1交換到最前面。然后,以同樣的方式完成對其余7個數(shù)的第二輪比較,比較結(jié)果將最小數(shù)3交換到前面。以此類推,經(jīng)七輪比較,最后完成對8個數(shù)由小到大的全部排

11、序。各輪比較結(jié)果如下:第第6 6章章 數(shù)組數(shù)組 第一輪結(jié)果:1 7 4 10 3 20 5 9第二輪結(jié)果:1 3 7 4 10 5 20 9第三輪結(jié)果:1 3 4 7 10 5 20 9第四輪結(jié)果:1 3 4 5 7 10 20 9第五輪結(jié)果:1 3 4 5 7 10 20 9第六輪結(jié)果:1 3 4 5 7 9 10 20第七輪結(jié)果:1 3 4 5 7 9 10 20結(jié)束狀態(tài): 1 3 4 5 7 9 10 20第第6 6章章 數(shù)組數(shù)組 圖6-2 冒泡法排序流程圖 for i0 to in1for jn1 to jiaj1ajaj1aj是否輸出a1到an第第6 6章章 數(shù)組數(shù)組 冒泡法排序的流

12、程圖如圖6-2所示,其源程序如下:#define n 8main() int i,j,t;int an=7,4,10,1,20,5,3,9;for(i=0;ii;j-) /*控制每輪比較次數(shù)*/ if(aj-1aj) /*進(jìn)行交換的條件*/第第6 6章章 數(shù)組數(shù)組 t=aj-1; aj-1=aj; aj=t; printf(排序結(jié)果為:);for(i=0;in;i+) printf(%d, ai);運行結(jié)果如下:排序結(jié)果為:1 3 4 5 7 9 10 20第第6 6章章 數(shù)組數(shù)組 6.3 二二 維維 數(shù)數(shù) 組組 引例:全班40個學(xué)生,每人有四門功課:高數(shù)、計算機、英語、政治的成績,現(xiàn)求成績最

13、高的三個學(xué)生的成績。 對于這樣一個問題,若用一維數(shù)組描述,就要用到四個數(shù)組。這種表示方法不能很好地反映它們之間的密切關(guān)系,因此引入了二維數(shù)組來表示。第第6 6章章 數(shù)組數(shù)組 6.3.1 二維數(shù)組的定義 二維數(shù)組的定義格式: 例如: int a25; 二維數(shù)組的說明和一維數(shù)組的說明形式基本相同,只不過它的有兩個,第一個表示二維數(shù)組的行數(shù),第二個表示二維數(shù)組的列數(shù)。第第6 6章章 數(shù)組數(shù)組 在c語言中,把二維數(shù)組看成一個數(shù)組的數(shù)組,即可以把二維數(shù)組看作是一個特殊的一維數(shù)組,該一維數(shù)組的每個數(shù)據(jù)元素也是一個一維數(shù)組。 二維數(shù)組在內(nèi)存中的存放順序是按行存放,即先存放第一行的元素,再存放第二行的元素。第

14、第6 6章章 數(shù)組數(shù)組 6.3.2 二維數(shù)組的引用 二維數(shù)組元素的引用的一般形式為 數(shù)組名下標(biāo)表達(dá)式1下標(biāo)表達(dá)式2 引用二維數(shù)組元素的下標(biāo)表達(dá)式的值只能取0到定義數(shù)組時所規(guī)定的下標(biāo)上界之間的整數(shù)。即行下標(biāo)的取值范圍是0下標(biāo)表達(dá)式1-1,列下標(biāo)的取值范圍是0下標(biāo)表達(dá)式2-1。例如: int a35; 這個二維數(shù)組的最小下標(biāo)的元素是a00,最大下標(biāo)的元素是a24。第第6 6章章 數(shù)組數(shù)組 【例6.5】 通過鍵盤給2*3的二維數(shù)組輸入數(shù)據(jù),第一行賦1、3、5,第二行賦2、4、6,然后按行輸出此二維數(shù)組。 程序如下:第第6 6章章 數(shù)組數(shù)組 #include main() int a23,i,j; p

15、rintf(enter data by line:n); for(i=0;i2;i+) for(j=0;j3;j+) scanf(%d, &aij);第第6 6章章 數(shù)組數(shù)組 printf(output a array:n); for(j=0;j2;j+) for(i=0;i3;i+) printf(%4d, aji); printf(n); 第第6 6章章 數(shù)組數(shù)組 6.3.3 二維數(shù)組的初始化二維數(shù)組同樣存在初始化的問題。二維數(shù)組的初始化有以下四種形式:(1) 按行依次對二維數(shù)組賦初值。例如:static int a34=1,2,3,4,5,6,7,8,9,10,11,12;(2)

16、 將所有數(shù)據(jù)寫在一個花括號內(nèi),按數(shù)組排列順序?qū)Ω鲾?shù)組元素賦初值。例如:static int a34=1,2,3,4,5,6,7,8,9,10,11,12;(3) 同一維數(shù)組一樣,可以對部分元素顯式賦初值。例如:static int a34=1,2,3;第第6 6章章 數(shù)組數(shù)組 它的作用只對各行第一列的元素賦初值,其余元素值自動為0,故相當(dāng)于: static int a34=1,0,0,2,0,0,3,0,0; 思考題:static int a34=1, ,5,6;的含義是什么? (4) 若對全部元素顯式賦初值,則數(shù)組第一維的元素個數(shù)在說明時可以不指定,但第二維的元素個數(shù)仍然不能缺省。例如: s

17、tatic int a4=1,2,3,4,5,6,7,8;第第6 6章章 數(shù)組數(shù)組 6.3.4 二維數(shù)組應(yīng)用舉例【例6.6】 有一個3*4的矩陣,要求編程序以求出其中值最大的那個元素的值以及其所在的行號和列號。程序如下: main() int i,j,row=0,colum=0,max; static int a34=1,2,3,4,9,8,7,6,-10,10,-5,2; max=a00; for(i=0;i=2;i+) for(j=0;jmax) max=aij; row=i; colum=j; printf(max=%d,row=%d,colum=%dn, max,row,colum);

18、輸出結(jié)果:max=10,row=2,colum=1第第6 6章章 數(shù)組數(shù)組 【例6.7】 編寫程序,打印出以下形式的楊輝三角形。11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 11 6 15 20 15 6 1第第6 6章章 數(shù)組數(shù)組 分析:可以將楊輝三角形的值放在一個方形矩陣的下半三角中,如果需打印7行楊輝三角形,應(yīng)該定義等于或大于77的方形矩陣,只是矩陣的上半部和其余部分并不使用。 楊輝三角形的特點如下: (1) 第0列和對角線上的元素都為1; (2) 除第0列和對角線上的元素以外,其他元素的值均為前一行上的同列元素和前一列元素之和。第第6 6章章 數(shù)組數(shù)組 定義

19、函數(shù)setdata,按上述規(guī)律給數(shù)組元素置數(shù),定義函數(shù)outdata以輸出楊輝三角形。 程序如下: #include stdio.h #define n 10 main() int ynn,n=7; setdata(y,n); outdata(y,n); 第第6 6章章 數(shù)組數(shù)組 setdata(int sn,int n)int i,j;for(i=0;in;i+) sii=1;si0=1;for(i=2;in;i+) for(j=1;ji;j+) sij=si-1j-1+si-1j;outdata(int sn,int n) int i,j;第第6 6章章 數(shù)組數(shù)組 printf(楊輝三角形

20、:n); for(i=0;in;i+) for(j=0;j=i;j+) printf(n); 第第6 6章章 數(shù)組數(shù)組 【例6.8】 有m個學(xué)生,學(xué)習(xí)n門課程,已知所有學(xué)生的各科成績。編程:分別求每個學(xué)生的平均成績和每門課程的平均成績。設(shè)各學(xué)生成績?nèi)绫?.1所示。第第6 6章章 數(shù)組數(shù)組 表6.1 學(xué) 生 成 績 表 學(xué)生編號課程1課程2課程3課程4學(xué)生178858365學(xué)生288918993學(xué)生372655475學(xué)生486887560學(xué)生569605072第第6 6章章 數(shù)組數(shù)組 程序如下:/*功能:計算個人平均成績與各科平均成績,并在屏幕上顯示出來。*/#define n 5 /*定義符號

21、常量人數(shù)為5*/#define m 4 /*定義符號常量課程為4*/#include stdio.hmain() int i,j;第第6 6章章 數(shù)組數(shù)組 static float scoren+1 m +1=78,85,83,65,88,91,89,93,72,65,54,75, 86,88,75,60,69,60,50,72;for(i=0;in;i+)for(j=0;jm;j+)scorei m+=scoreij; /*求第i個人的總成績*/scorenj+=scoreij; /*求第j門課的總成績*/第第6 6章章 數(shù)組數(shù)組 scorei m/= m; /*求第i個人的平均成績*/fo

22、r(j=0;jm;j+)scorenj/=n; /*求第j門課的平均成績*/clrscr();/*輸出表頭*/printf(學(xué)生編號 課程1 課程2 課程3 課程4 個人平均n);/*輸出一條短劃線*/第第6 6章章 數(shù)組數(shù)組 for(j=0;j8*(m+2);j+)printf(-);/*輸出每個學(xué)生的各科成績和平均成績*/for(i=0;in;i+) printf(學(xué)生%dt, i+1);for(j=0;jm +1,j+)print(%6.1ft, scoreij;printf(n);/*輸出一條短劃線*/第第6 6章章 數(shù)組數(shù)組 for(j=0;j8*(m+2);j+)printf(-)

23、;printf(n課程平均);/*輸出每門課程的平均成績*/for(j=0;jm;j+)printf(%6.1ft, scorenj);printf(n);getch();第第6 6章章 數(shù)組數(shù)組 程序運行結(jié)果如下:學(xué)生編號 課程1 課程2 課程3 課程4 個人平均學(xué)生1 78.0 85.0 83.0 65.0 77.8學(xué)生2 88.0 91.0 89.0 93.0 90.2學(xué)生3 72.0 65.0 54.0 75.0 66.5學(xué)生4 86.0 88.0 75.0 60.0 77.2學(xué)生5 69.0 60.0 50.0 72.0 62.8課程平均 78.6 77.8 70.2 73.0第第6

24、 6章章 數(shù)組數(shù)組 6.4 字符數(shù)組與字符串字符數(shù)組與字符串 6.4.1 字符數(shù)組的定義和基本操作 1字符數(shù)組的定義形式和初始化 字符數(shù)組是數(shù)組元素類型為字符的數(shù)組,字符數(shù)組中的每一個元素均為字符。它的定義形式如下: char 第第6 6章章 數(shù)組數(shù)組 例如: char c10; 該語句說明了c是一個含有10個字符型數(shù)據(jù)的字符數(shù)組。它和一般數(shù)組的初始化一樣,可以在定義時賦初值,如下所示:第第6 6章章 數(shù)組數(shù)組 字符數(shù)組的長度可用初值來確定,如: char str=a, b, c, d; 編譯程序,可以計算出字符數(shù)組str的長度為4。 注意:如果花括號中提供的初值個數(shù)(即字符個數(shù))大于數(shù)組長度

25、,則作語法錯誤處理。如果初值個數(shù)小于數(shù)組長度,則只將這些字符賦給數(shù)組中前面那些元素,其余的元素自動定為空字符(即0)。如: char c5= a, b, c, d; 則c4自動賦為0。第第6 6章章 數(shù)組數(shù)組 2字符數(shù)組的輸入和輸出字符數(shù)組是以單個字符的形式進(jìn)行輸入和輸出的。【例6.9】 輸入一個字符串,并將它逆序輸出。 main() char c20; int i, j; i=0; scanf(%c,&c0); while(ci!= n)&(ci!= ) i+; scanf(%c, &ci);第第6 6章章 數(shù)組數(shù)組 ; for(j=i-1;j=0;j-) print

26、f(%c, cj);程序運行結(jié)果如下:abefhjjhfeba第第6 6章章 數(shù)組數(shù)組 6.4.2 字符數(shù)組的整體操作 1字符串和字符結(jié)束符 字符串是一組字符數(shù)據(jù),在c語言中沒有提供字符串?dāng)?shù)據(jù)類型,因而需通過字符數(shù)組來處理字符串。經(jīng)常有一種情況,如當(dāng)定義一個字符數(shù)組為40時,而實際存入的有效字符只有20個。為了測定字符串的實際長度,c語言規(guī)定了一個“字符串結(jié)束標(biāo)志”,以字符0代表。第第6 6章章 數(shù)組數(shù)組 有了結(jié)束標(biāo)志0,字符數(shù)組的長度就顯得不那么重要了。在程序中往往依靠檢測0來確定字符串是否結(jié)束,而不是根據(jù)數(shù)組長度來確定字符串是否結(jié)束。0代表ascii碼為0的字符,它不是一個可以顯示的字符,

27、而是一個“空操作符”,即它什么也不干。用它來作字符串結(jié)束標(biāo)志不會產(chǎn)生附加的操作或增加無效字符,只起一個供辨別的標(biāo)志。 字符串的說明形式與字符數(shù)組是一樣的,考慮到字符串有一個串結(jié)束符,因此為了存放一個有n個字符的字符串,字符數(shù)組的元素個數(shù)至少應(yīng)說明為n+1。第第6 6章章 數(shù)組數(shù)組 2字符串的初始化形式 (1) 在賦初值時直接賦字符串常量。例如: char str10=string; 習(xí)慣上省略花括號,簡寫成: char str10= string!; 在這里,由于string是字符串常量,系統(tǒng)自動在最后加入0,所以不必人為加入。 還可以用以下形式進(jìn)行定義: char str=string; 系

28、統(tǒng)將按字符串中實際的字符個數(shù)來定義數(shù)組的大小。第第6 6章章 數(shù)組數(shù)組 (2) 在執(zhí)行過程中給一維字符數(shù)組賦值。例如: char s20; scanf(%s,s); printf(%s,s); 其中,scanf()函數(shù)中的輸入項s是數(shù)組名。從鍵盤輸入的字符串應(yīng)短于已定義的字符數(shù)組的長度。第第6 6章章 數(shù)組數(shù)組 【例6.10】 將二維字符數(shù)組初始化,并在屏幕上輸出。 程序如下: /*功能:將二維字符數(shù)組進(jìn)行初始化,并在屏幕上輸出*/ main() int i; char name59= zhao, qian, sun,li, wang ; for(i=0;i字符串2,函數(shù)值是正整數(shù),為兩個字符中第一個不同字符的ascii碼的差值。在字符串比較時,字

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論