第7章 數(shù) 組課件_第1頁
第7章 數(shù) 組課件_第2頁
第7章 數(shù) 組課件_第3頁
第7章 數(shù) 組課件_第4頁
第7章 數(shù) 組課件_第5頁
已閱讀5頁,還剩50頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第第7 7章章 數(shù)數(shù) 組組-蔣菲菲1. 了解數(shù)組的概念及特點(diǎn)2. 掌握一維數(shù)組的定義,引用,初始化,并能綜合應(yīng)用3. 掌握二維數(shù)組的定義,引用,初始化,并能綜合應(yīng)用4. 掌握字符數(shù)組的定義,引用,初始化5. 掌握如何對(duì)字符數(shù)組的整體操作6. 熟悉一些字符串處理的函數(shù)數(shù)組數(shù)組 計(jì)算機(jī)在處理數(shù)據(jù)的時(shí)候,經(jīng)常出現(xiàn)數(shù)據(jù)是用某種有序的形式進(jìn)行組織的情況。 例如: 按學(xué)號(hào)排列的成績表 隨溫度而變化的實(shí)驗(yàn)數(shù)據(jù)【學(xué)生分析上面數(shù)據(jù)的特點(diǎn)】這些數(shù)據(jù)具有共同的特點(diǎn):1、都有若干個(gè)分量組成2、數(shù)據(jù)的每個(gè)分量都是同一種類型3、這些分量是按照一定順序排列的數(shù)組概念數(shù)組概念 數(shù)組是由一組同類型數(shù)據(jù)組成的集合,用同一數(shù)組名來

2、表示這個(gè)數(shù)組,用下標(biāo)來唯一的表示這個(gè)數(shù)組中的元素。一維數(shù)組的定義一維數(shù)組的定義 類型說明符 數(shù)組名常量表達(dá)式; 例如:例如:int a10; float b20; 說明:1):數(shù)組名的命名規(guī)則同變量名一樣。 M.D,¥123,#33,ab, 2):定義數(shù)組時(shí)需指定數(shù)組中元素的個(gè)數(shù),用,不能用(); int a(10); (錯(cuò)) 3):常量表達(dá)式可以是常量和符號(hào)常量中不能包含變量,也就是說C語言中不允許對(duì)數(shù)組的大小作動(dòng)態(tài)定義 int n; scanf(“%d”,&n); int an (錯(cuò))元素個(gè)數(shù) 在C語言中,數(shù)組經(jīng)過定義后就會(huì)安排一片連續(xù)的存儲(chǔ)空間來依次存放數(shù)組的各個(gè)元素 注意:數(shù)組

3、名是數(shù)組在內(nèi)存中的起始位置 如:int W10= 2 , 4 , 6 , 8 , 10 ;一維數(shù)組的引用一維數(shù)組的引用 引用:數(shù)組名下標(biāo) 注意:1):數(shù)組必須先定義,然后才能使用。 2):C語言中只能逐個(gè)引用數(shù)組元素而不能一次應(yīng)用整個(gè)數(shù)組。 3):要注意“定義數(shù)組”和“引用數(shù)組”的區(qū)別; int a10; t=a6; 4):下標(biāo)從0開始,引用時(shí)要注意下標(biāo)的值不能超出范圍定義數(shù)組長度為10引用a數(shù)組中序號(hào)為6的元素,此時(shí)6不是數(shù)組長度一維數(shù)組的初始化一維數(shù)組的初始化1) :定義時(shí)初始化:方法:將初值依此寫在花括號(hào) 內(nèi)。 如:int a5= 2 , 4 , 6 , 8 , 10 ; 注意:對(duì)全部數(shù)

4、組元素賦值時(shí),由于數(shù)據(jù)的個(gè)數(shù)已經(jīng)確定因此可不指定長度 如:int a=2 , 4 , 6 , 8 , 10 ;2):只給一部分元素賦值。 如:int a10=0,1,2,3,4; 注意:初始化的數(shù)據(jù)個(gè)數(shù)允許少于數(shù)組的長度,但不能多于數(shù)組的長度。當(dāng)初始化的數(shù)據(jù)個(gè)數(shù)(至少要有一個(gè))少于數(shù)組的長度時(shí),未初始化部分將被編譯系統(tǒng)自動(dòng)用 0 賦值。(3) 如果想使一個(gè)數(shù)組中全部元素值為0,可以寫成int a10=0,0,0,0,0,0,0,0,0,0;不能寫成int a10=0*10; 使用其它方法初始化使用其它方法初始化利用賦值語句初始化#include void main()int i,a5;for(

5、i=0;i5;i+)ai=2*(i+1);printf(a%d=%dn,i,ai);數(shù)組元素的賦值是逐個(gè)元素進(jìn)行的注:注:int a5= 2,4,6,8,10 , b5 ; b5=a5 ;(錯(cuò))(錯(cuò)) int a5 ; a5= 2,4,6,8,10 ;(錯(cuò))(錯(cuò))利用輸入語句初始化void main()int i,a5;for(i=0;i5;i+)scanf(%d,&ai);for(i=0;i5;i+)printf(a%d=%dn,i,ai);【提問】從鍵盤上輸入【提問】從鍵盤上輸入5 5個(gè)數(shù)存入數(shù)組,然個(gè)數(shù)存入數(shù)組,然 后找出最大數(shù)。后找出最大數(shù)。#includemain() int

6、 i,a5,max; for(i=0;i5;i+) scanf(%d,&ai); max=a0; for(i=0;i5;i+) if(maxai) max=ai;printf(max=%d,max);【學(xué)生易錯(cuò)的地方】數(shù)組的起始下標(biāo)數(shù)組的最后1個(gè)元素的下標(biāo)使用數(shù)組越界定義數(shù)組時(shí)不指定長度【提問】【提問】 用數(shù)組求用數(shù)組求Fibonacci數(shù)列的前數(shù)列的前20項(xiàng)。項(xiàng)。 Fibonacci數(shù)列可按下式計(jì)算: f i =f i-1+f i-2 初值 f 0=1 ,f 1=1。程序:程序:#includemain() int i; int f20=1,1; for(i=2;i20;i+) fi

7、=fi-2+fi-1; for(i=0;i20;i+) if(i%5=0) printf(n); printf(%6d,fi);【提問】給出一個(gè)學(xué)生【提問】給出一個(gè)學(xué)生5門功課的成績,要門功課的成績,要求計(jì)算平均成績求計(jì)算平均成績 并打印出低于平均成績的并打印出低于平均成績的成績。成績。用數(shù)組來解決問題:#includevoid main() int w5; /* 定義 1 個(gè)整型數(shù)組存放成績 */ int sum, i; for( i=0; i5; i+ ) scanf( %d, &wi ); for( sum=0; i=0; i5; i+ ) sum = sum + wi; sum

8、= sum/5; for( i=0; i5; i+ ) if( wi a1,則交換;然 后比較第二個(gè)數(shù)與第三個(gè)數(shù);依次類推,直至第n-1個(gè)數(shù)和第 n個(gè)數(shù)比較為止第一趟冒泡排序,結(jié)果最大的數(shù)被安置在 最后一個(gè)元素位置上(2)對(duì)前n-1個(gè)數(shù)進(jìn)行第二趟冒泡排序,結(jié)果使次大的數(shù)被安置在 第n-1個(gè)元素位置(3)重復(fù)上述過程,共經(jīng)過n-1趟冒泡排序后,排序結(jié)束例 用冒泡法對(duì)10個(gè)數(shù)排序例38 49 65 76 13 27 30 97 第一趟38 49 65 13 27 30 76 第二趟38 49 13 27 30 65 第三趟38 13 27 30 49 第四趟13 27 30 38 第五趟13 27

9、 30 第六趟49 38 65 97 76 13 27 30 初始關(guān)鍵字n=838497697 139797273097137676762730136527653065131349493049273827383038 13 27 第七趟例 用冒泡法對(duì)10個(gè)數(shù)排序(圖解)例:十個(gè)數(shù)從小到大排序例:十個(gè)數(shù)從小到大排序(冒泡法冒泡法)Void main() int a10; int i,j,t; printf(input 10 numbers:n); for(i=0;i10;i+) scanf(%d,&ai); printf(n);for(i=0;i9;i+) for(j=0;jaj+1)

10、t=aj;aj=aj+1;aj+1=t;printf(the sorted numbers:n); for(i=0;i10;i+) printf(%4d,ai); 排序過程:(1)首先通過n-1次比較,從n個(gè)數(shù)中找出最小的, 將它與第一個(gè)數(shù) 交換第一趟選擇排序,結(jié)果最小的數(shù)被安置在第一個(gè)元素位置上(2)再通過n-2次比較,從剩余的n-1個(gè)數(shù)中找出關(guān)鍵字次小的記錄, 將它與第二個(gè)數(shù)交換第二趟選擇排序(3)重復(fù)上述過程,共經(jīng)過n-1趟排序后,排序結(jié)束例 用簡單選擇法對(duì)10個(gè)數(shù)排序例初始: 49 38 65 97 76 13 27 kji=11349一趟: 13 38 65 97 76 49 27

11、i=22738二趟: 13 27 65 97 76 49 38 三趟: 13 27 38 97 76 49 65 四趟: 13 27 38 49 76 97 65 五趟: 13 27 38 49 65 97 76 六趟: 13 27 38 49 65 76 97 kkkkjjjjjjjjjj例 用簡單選擇法對(duì)10個(gè)數(shù)排序例 用簡單選擇法對(duì)10個(gè)數(shù)排序#includevoid main()int i,j,t;int a10;for(i=0;i10;i+)scanf(%d,&ai);for(i=0;i9;i+)for(j=i+1;jaj)t=ai;ai=aj; aj=t;for(i=0;i

12、10;i+)printf(%5d,ai);二二維數(shù)組的定義和引用維數(shù)組的定義和引用先看一個(gè)例子:先看一個(gè)例子: 某校近三年招收各專業(yè)畢業(yè)生情況如下:某校近三年招收各專業(yè)畢業(yè)生情況如下: 計(jì)算機(jī) 電子 管理 數(shù)學(xué) 1999 90 40 80 30 2000 100 50 90 40 2001 95 45 100 50 要把這些數(shù)據(jù)組織起來,可以有兩種選擇:要把這些數(shù)據(jù)組織起來,可以有兩種選擇: 按從左到右從上到下的順序存入一個(gè)一維數(shù)按從左到右從上到下的順序存入一個(gè)一維數(shù) 組中。(查詢困難)組中。(查詢困難) 每年用一個(gè)一維數(shù)組,把這些數(shù)據(jù)分別存入每年用一個(gè)一維數(shù)組,把這些數(shù)據(jù)分別存入 三個(gè)數(shù)組中

13、。三個(gè)數(shù)組中。 (增加一年數(shù)據(jù)困難)(增加一年數(shù)據(jù)困難)2維數(shù)組的定義維數(shù)組的定義 語言中,數(shù)組的元素也可以是數(shù)組,這樣就有了二維數(shù)組。也就是說二維數(shù)組可以看做是一種特殊的一維數(shù)組,他的元素又是一個(gè)一維數(shù)組。 例如: int a34 可以看成a數(shù)組由a0、a1、a2三個(gè)元素組成,而a0、a1、a2這三個(gè)元素又分別由四個(gè)元素組成。aa0.a00 a01 a02 a03a1.a10 a11 a12 a13a2.a20 a21 a22 a23例 int a34;20161720181920202120222320089201011201213201415200012002320045200067a0

14、0 a01 a02 a03a10 a11 a12 a13a20 a21 a22 a23每個(gè)元素ai由包含4個(gè)元素的一維數(shù)組組成二維數(shù)組a是由3個(gè)元素組成a0a1a2行名014523a01a02a03a10a11a00a13a20a21a22a23a1267101189a0a1a2二維數(shù)組理解說明:說明:二維數(shù)組除了維數(shù)比一維數(shù)組多一維外,二維數(shù)組除了維數(shù)比一維數(shù)組多一維外, 其它性質(zhì)與一維數(shù)組是全部類似的。其它性質(zhì)與一維數(shù)組是全部類似的。 看看下面寫法是否正確?看看下面寫法是否正確? int a03; 用于定義數(shù)組長度的常量表達(dá)式的值必須用于定義數(shù)組長度的常量表達(dá)式的值必須是大于是大于0的正整

15、數(shù)。的正整數(shù)。 int i=3 , j=4 ; int aij ; 定義數(shù)組元素的個(gè)數(shù)必須使用常量表達(dá)式,定義數(shù)組元素的個(gè)數(shù)必須使用常量表達(dá)式,而不能使用變量。而不能使用變量。 多維數(shù)組C語言允許使用多維數(shù)組,有了二維數(shù)組的基礎(chǔ)就不難掌握所謂數(shù)組了.例如:一個(gè)三維數(shù)組 float a234多維數(shù)組在內(nèi)存中排列順序:第一維的下標(biāo)變化的最慢,最右邊的下標(biāo)變化的最快。a000 a001 a002 a003a010 a011 a012 a013a021 a021 a022 a023a100 a101 a102 a103a110 a111 a112 a113a121 a121 a122 a123二二維數(shù)

16、組元素的引用維數(shù)組元素的引用引用二維數(shù)組元素的形式為:數(shù)組名行下標(biāo)表達(dá)式列下標(biāo)表達(dá)式1、“行下標(biāo)表達(dá)式”和“列下標(biāo)表達(dá)式”,都應(yīng)是整型表達(dá)式或符號(hào)常量。2、“行下標(biāo)表達(dá)式”和“列下標(biāo)表達(dá)式”的值,都應(yīng)在已定義數(shù)組大小的范圍內(nèi)。假設(shè)有數(shù)組x34,則可用的行下標(biāo)范圍為02,列下標(biāo)范圍為03。3、對(duì)基本數(shù)據(jù)類型的變量所能進(jìn)行的操作,也都適合于相同數(shù)據(jù)類型的2維數(shù)組元素。二維數(shù)組的初始化二維數(shù)組的初始化1、按行賦初值數(shù)據(jù)類型 數(shù)組名行常量表達(dá)式列常量表達(dá)式第0行初值表,第1行初值表,最后1行初值表;賦值規(guī)則:將“第0行初值表”中的數(shù)據(jù),依次賦給第0行中各元素;將“第1行初值表”中的數(shù)據(jù),依次賦給第1行

17、各元素;以此類推。 例 int a23=1,2,3,4,5,6;a00 a01 a02 a10 a11 a12123456全部初始化 例 int a23=1,2,4;a00 a01 a02 a10 a11 a12120400部分初始化二維數(shù)組的初始化二維數(shù)組的初始化2、按2維數(shù)組在內(nèi)存中的排列順序給各元素賦初值數(shù)據(jù)類型 數(shù)組名行常量表達(dá)式列常量表達(dá)式初值表;賦值規(guī)則:按2維數(shù)組在內(nèi)存中的排列順序,將初值表中的數(shù)據(jù),依次賦給各元素。如果對(duì)全部元素都賦初值,則“行數(shù)”可以省略。注意:只能省略“行數(shù)”。 例 int a23=1,2,3,4,5,6;a00 a01 a02 a10 a11 a12123

18、456全部初始化 例 int a23=1,2,4;a00 a01 a02 a10 a11 a12124000部分初始化二維數(shù)組的初始化二維數(shù)組的初始化3、 如果對(duì)全部元素都賦初值(即提供全部初始數(shù)據(jù)),則定義數(shù)組時(shí)對(duì)第一維的長度可以不指定,但第二維的長度不能省。如: 例 int a3=1,2,3,4,5;a00 a01 a02 a10 a11 a12123450第一維長度省略初始化 例 int a3=1,4,5;a00 a01 a02 a10 a11 a12100450第一維長度省略初始化【提問】【提問】 給一個(gè)給一個(gè)23的的2維數(shù)組各元素賦值,并維數(shù)組各元素賦值,并輸出全部元素的值。功能:從

19、鍵盤上給輸出全部元素的值。功能:從鍵盤上給23數(shù)組數(shù)組賦值,并在屏幕上顯示出來。賦值,并在屏幕上顯示出來。#define Row 2#define Col 3#include stdio.hmain() int i, j, arrayRowCol;/*定義1個(gè)2行3列的2維數(shù)組array*/ for(i=0; iRow; i+);/*外循環(huán):控制2維數(shù)組的行*/ for(j=0; jCol; j+)/*內(nèi)循環(huán):控制2維數(shù)組的列*/ printf(please input array%2d%2d:,i,j); scanf(%d,&arrayij); /*從鍵盤輸入aij的值*/ prin

20、tf(“n”); /*輸出2維數(shù)組array*/ for(i=0;iRow;i+) for(j=0;jCol;j+) printf(%dt,arrayij); printf(n); 【提問】將二維數(shù)組行列元素互換,存到另一個(gè)數(shù)組中a=1 2 34 5 6b=1 42 53 6#include main() int a23=1,2,3,4,5,6; int b32,i,j; printf(array a:n); for(i=0;i=1;i+) for(j=0;j=2;j+) printf(%5d,aij); bji=aij;printf(n); printf(array b:n); for(i=

21、0;i=2;i+) for(j=0;j=1;j+) printf(%5d,bij); printf(n); #include main() int a34=1,2,3,4, 9,8,7,6, -10,10,-5,2; int i,j,row=0,colum=0,max; 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);【提問】 求二維數(shù)組中最大元素值及其行列號(hào)【提問】使用數(shù)組保存“九九表”,然后輸出。main() int

22、a 1010, i, j ; for(i=1; i 10; i+) for(j=1; j=i; j+) aij=i*j; for(i=0; i10; i+) for(j=0;j=i; j+) printf(%6d,a ij); printf(n); 字符數(shù)組與字符串字符數(shù)組與字符串一、一、 字符數(shù)組字符數(shù)組 當(dāng)數(shù)組的元素類型為字符型時(shí),被稱為當(dāng)數(shù)組的元素類型為字符型時(shí),被稱為字符數(shù)組字符數(shù)組。如:char c10; 則c為字符數(shù)組。 字符數(shù)組的定義、初始化和元素的引用與一般的數(shù)組相字符數(shù)組的定義、初始化和元素的引用與一般的數(shù)組相同。同。如:main() char ch5=c, h , i ,

23、n , a; for(i=0; i5; i+) printf(“%c”,chi); 說明:說明:定義字符數(shù)組的類型說明符一般為char, 如: char c10; 由于字符型與整型的互相通用性, 因此,上面定義也可改為:int c10;初始化的字符個(gè)數(shù)允許少于字符數(shù)組的長度, 但不能多于字符數(shù)組的長度。當(dāng)初始化的字 符(至少要有一個(gè))少于字符數(shù)組的長度時(shí), 未初始化部分將被編譯系統(tǒng)自動(dòng)用空字符0 賦值。如:int c8=H,e,l,l,o; 則:c0=H, c1= e, c2= l, c3= l, c4= ,o c5=0, c6=0, c7=0例例 輸出一個(gè)鉆石圖形輸出一個(gè)鉆石圖形#inclu

24、de main() char diamond5= , ,*, ,*, ,*,*, , , ,*, ,*, ,*, , ,*; int i,j; for(i=0;i5;i+) for(j=0;j0; 串1串2 則:n= n=0; 串1=串2 n0; 串10) puts(str1);注意:注意:不能寫成不能寫成 if(str1str2)strcmp(“China”,”Korea”);字符串連接字符串連接strcat( )函數(shù)函數(shù)使用形式: strcat(字符數(shù)組1,字符串2)功能: 說明:字符數(shù)組1必須足夠大以便能夠容納字符串2。 連接時(shí)只在新串最后保留一個(gè)0。 使用形式: strcpy(字符數(shù)組

25、1,字符串2 )功能:例如:char str120, str210 ; strcpy(str1,“hello world”); strcpy(str2,str1); 字符數(shù)組1必須足夠大以便能夠容納被復(fù)制的字符串。不能用賦值語句將一個(gè)字符串常量或字符 數(shù)組直接賦值給一個(gè)字符數(shù)組。 字符串復(fù)制字符串復(fù)制strcpy( )函數(shù)函數(shù)5.將字符串中將字符串中大寫字母換成小寫字母大寫字母換成小寫字母strlwr()函數(shù)函數(shù) 使用形式使用形式: strlwr(字符串 )6.將字符串中將字符串中小寫字母換成大寫字母小寫字母換成大寫字母strupr函數(shù)函數(shù)使用形式使用形式: strupr(字符串 )【提問】:統(tǒng)計(jì)字符串中的單

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論