版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第八章 數(shù)組主要內(nèi)容o一維數(shù)組o字符數(shù)組n 字符數(shù)組的定義、引用和初始化n 字符串處理函數(shù)o二維數(shù)組o數(shù)組應(yīng)用結(jié)束問題提出o 存放一個(gè)班級(jí)的學(xué)生考試成績(jī)(100人)o 存放Fibonacci數(shù)列的前100項(xiàng)o 將100個(gè)整數(shù)排序o 存放一個(gè)5*5的整數(shù)矩陣o 共同特點(diǎn):數(shù)據(jù)的性質(zhì)相同,順序存放 類型 位置 定義數(shù)組數(shù)組概述o 數(shù)組是一種構(gòu)造類型構(gòu)造類型。n 區(qū)別于基本數(shù)據(jù)類型n 所謂的構(gòu)造類型是由基本數(shù)據(jù)類型按一定規(guī)則組成的,也稱“導(dǎo)出類型”。o 數(shù)組由一系列元素構(gòu)成,這些元素均屬同一數(shù)據(jù)類型。o 數(shù)組是有序數(shù)據(jù)的集合,在內(nèi)存中是連續(xù)存放的,數(shù)組元素之間的序由其在內(nèi)存中的前后關(guān)系來表現(xiàn)。數(shù)組概
2、述o 可以用一個(gè)統(tǒng)一的數(shù)組名和下標(biāo)來唯一地定位數(shù)組中的元素。其中,數(shù)組名代表了數(shù)組在內(nèi)存中的首地址。LD01234in數(shù)組概述o 根據(jù)數(shù)組的組成規(guī)則,可分為一維數(shù)組、二維數(shù)組和多維數(shù)組。o C語(yǔ)言中把字符串定義為字符數(shù)組,即數(shù)組元素為字符型的數(shù)組。返回8.1 一維數(shù)組o 定義形式:類型說明符 數(shù)組名常量表達(dá)式;o 說明n數(shù)組名是標(biāo)識(shí)符,符合標(biāo)識(shí)符命名規(guī)則和作用域規(guī)則。n類型說明符是數(shù)組元素的數(shù)據(jù)類型。n常量表達(dá)式值表示元素個(gè)數(shù),即數(shù)組長(zhǎng)度。n常量表達(dá)式既不能缺省,其中也不能包含變量。nC要求在定義數(shù)組的時(shí)候明確指定數(shù)組長(zhǎng)度。不允許動(dòng)態(tài)定義數(shù)組的大小!一維數(shù)組定義示例o int a20;o ch
3、ar c10;o #define MAXLEN 20int bMAXLEN;o int a, array5;o int maxlen=20;int cmaxlen; o int d;兩種錯(cuò)誤!一維數(shù)組的引用o 數(shù)組必須先定義后引用o C語(yǔ)言規(guī)定只能逐個(gè)引用數(shù)組元素而不能一次引用整個(gè)數(shù)組(如,不能對(duì)數(shù)組進(jìn)行整體賦值)。o 數(shù)組元素引用形式:數(shù)組名下標(biāo)n數(shù)組元素引用中的方括號(hào)是一個(gè)特殊的運(yùn)算符號(hào)下標(biāo)運(yùn)算符。n下標(biāo)是一個(gè)整形表達(dá)式。注意:下標(biāo)可以變量、常量n下標(biāo)從0開始,最大值為數(shù)組長(zhǎng)度減1一維數(shù)組元素引用定義示例int i, a3;a0 = 10; a1 = 20; a2 = 30;for (i=
4、 0; i=2; i+)printf(“%d”, ai);int i, a3;a1 = 10; a2 = 20; a3 = 30;for (i= 1; i=3; i+)printf(“%d”, ai);例8.1.1 數(shù)組元素引用示例void main() float grade3, avg; grade0=90; grade1=75; grade2=85; avg=(grade0+grade1+grade2)/3; printf(“avg=%fn”, avg); 例8.1.2 輸入三個(gè)整數(shù),按相反的順序輸出 void main()int i, a3;printf(請(qǐng)輸入3個(gè)整數(shù):n);for(
5、i=0;i=0;i-)printf(%dt, ai);printf(n);數(shù)組定義,只能出現(xiàn)常量數(shù)組元素引用,可以出現(xiàn)常量/變量示例:一維數(shù)組的引用void main () int i, a10; for (i=0; i=0; i-) printf (%d , ai); printf(n);注意:對(duì)數(shù)組元素的引用(ai)即可以作為左值,也可以作為右值。01234i9編程技巧:利用循環(huán)結(jié)構(gòu)逐個(gè)處理數(shù)組的每個(gè)元素。 #includevoid main () int i, a10, b10;for (i=0; i10; i+) ai = i; bi = 10 - i; for (i=0; i=9;
6、i+) printf(a%d=%dt, i, ai); printf(b%d=%dt, i, bi); printf(n);/ printf( %dn, a);編程技巧:利用循環(huán)結(jié)構(gòu)逐個(gè)處理數(shù)組的每個(gè)元素。 #includevoid main () int i, a10, b10;for (i=0; i10; i+) ai = i; bi = 10 - i; for (i=0; i=9; i+) printf(a%d=%dt, i, ai); printf(b%d=%dt, i, bi); printf(n);/ printf( %dn, a);一維數(shù)組的引用o 下標(biāo)運(yùn)算符的優(yōu)先級(jí)是最高的,所
7、以+ai等價(jià)于+(ai)o 下標(biāo)運(yùn)算符的結(jié)合性是從左向右結(jié)合。o 下標(biāo)是整型表達(dá)式,表達(dá)式中可包含變量。o 原則上說,如果數(shù)組的長(zhǎng)度為n則下標(biāo)的范圍應(yīng)該界于0和n-1。但C編譯系統(tǒng)沒有對(duì)下標(biāo)進(jìn)行越界檢查。o 數(shù)組定義和數(shù)組元素引用的形式相似,但意義不同。8.1.3 一維數(shù)組的初始化o 定義數(shù)組時(shí)可對(duì)數(shù)組元素賦初值。n 如:int a3 = 0, 1, 2;o 如果數(shù)組沒有初始化,系統(tǒng)會(huì)用默認(rèn)值對(duì)它初始化。即外部數(shù)組或靜態(tài)數(shù)組賦0值,自動(dòng)數(shù)組賦隨機(jī)值。一維數(shù)組的初始化o 初始化數(shù)組時(shí),初始值的個(gè)數(shù)可以比數(shù)組元素的個(gè)數(shù)少,未提供初始值的元素被置為0。如:int a10 = 1, 2, 3, 4,
8、5;int b10 = 0;一維數(shù)組的初始化o 如果對(duì)全部數(shù)組元素賦初始值時(shí),可以不指定數(shù)組長(zhǎng)度。o 例如:int a5 = 1, 2, 3, 4, 5;等價(jià)于int a = 1, 2, 3, 4, 5;但不能省略int a = 1, 2, 3, 4, 5; /一維數(shù)組的初始化o 對(duì)數(shù)組進(jìn)行初始化時(shí),不允許初始化的元素個(gè)數(shù)比定義的數(shù)組長(zhǎng)度大,如:int a5 = 0, 1, 2, 3, 4, 5; /o 初始化在編譯時(shí)刻完成,賦值在運(yùn)行時(shí)刻完成。int a5 = 1, 2, 3, 4, 5; 不能寫成int a5; a = 0, 1, 2, 3, 4, 5; /或int a5; a5 = 0,
9、 1, 2, 3, 4, 5; /問題:一維數(shù)組的初始化o 下面諸組程序片段是否等價(jià)?片段1片段2等價(jià)否int a=3;int a;a=3;int a3=0,0,0;int a3=0;int a3=0;int a3;int a3=0,1,2;int a3;a3=0,1,2;int a3=0,1,2;int a3;a=0,1,2; 示例:Fibonacci數(shù)列問題o Fibonacci數(shù)列的定義如下:3,2, 11, 121nFFnnFnnn求Fibonacci數(shù)列前20項(xiàng)(不用數(shù)組)#includevoid main()int f1,f2; int i;f1=1; f2=1;for (i=1;
10、i=10;i+)printf (%12d %12d ,f1,f2);if (i%2=0) printf (n);f1=f1+ f2; f2=f1+f2;例8.1.3 用數(shù)組求Fibonacci數(shù)列前20項(xiàng)void main () int i, f20 = 1, 1; /定義并初始化前兩項(xiàng) for (i = 2; i20; i+) fi = fi-1 + fi-2; for (i=0; i20; i+) printf (“%12d”,fi); if (i+1)%5 = 0) /5個(gè)換行,why (i+1)? printf (“n”); 例8.1.6 輸入10個(gè)整數(shù),找出其中的最大數(shù)和最小數(shù)。o
11、定義數(shù)組 int a10o 定義兩個(gè)變量 int max, min;o 算法:n 循環(huán)語(yǔ)句輸入10個(gè)整數(shù),存放在數(shù)組中n max, min設(shè)初值n 循環(huán)語(yǔ)句遍歷數(shù)組每個(gè)元素,找出最大和最小者#define N 10main()int aN, i, max, min;for(i=0; iN; i+) scanf(%d,&ai); max = min = a0;for(i=0; i max) max = ai; if (ai min) min = ai;printf(“max=%dn , max);printf(“min=%dn , min);例8.1.4 統(tǒng)計(jì)分?jǐn)?shù)o 由鍵盤輸入一個(gè)班級(jí)的
12、學(xué)生考試成績(jī),統(tǒng)計(jì)出本班的人數(shù)和各分?jǐn)?shù)段的人數(shù)。o 以10分為一個(gè)分?jǐn)?shù)段,即09,1019,9099,100,共11個(gè)分?jǐn)?shù)段, 定義int num11void main()int i, score , n=0;/score為某學(xué)生成績(jī) ;n為班級(jí)人數(shù),初始化為0int num11=0;/數(shù)組num為各分?jǐn)?shù)段人數(shù),初始化為0printf(輸入各學(xué)生的考試成績(jī),當(dāng)學(xué)生成績(jī)輸入結(jié)束時(shí)請(qǐng)輸入-1n);while(1)scanf(%d,&score);if(score= -1) break ;/-1稱為“結(jié)束標(biāo)志”,當(dāng)輸入-1時(shí),/表示全部數(shù)據(jù)輸入完畢,結(jié)束循環(huán)n+;/統(tǒng)計(jì)班級(jí)人數(shù)numscor
13、e/10+;/統(tǒng)計(jì)各分?jǐn)?shù)段人數(shù)printf(本班考試人數(shù)為:%dn, n);printf(分?jǐn)?shù)段:t人數(shù)n);for(i=0;i10;i+)printf(%d%d:t%dn, i*10, i*10+9, numi);printf(100:t%dn, num10);提高應(yīng)用(不做要求)o “篩法”求素?cái)?shù)o 冒泡排序法例:用篩法求2500之間的所有素?cái)?shù)。 #include void main() int a501,i,j; for(i=2;i=500;i+) ai=1; for(i=2;i500;i+) if (ai!=0) for(j=i+1;j=500;j+) if(j%i=0)aj=0; f
14、or(i=2;i=500;i+) if(ai!=0) printf(%dt,i); 2 3 4 5 6 7 8 9 10 5001 1 1 1 1 1 1 1 1 11 1 0 1 0 1 0 1 0 01 1 0 1 0 1 0 0 0 0例8.1.7 冒泡法排序void main() int i, j, t, n , a100;printf(n= ); scanf(% , &n);for(i=0; in; i+) scanf(“%d”,&ai);for(i =1; i n; i+) /外循環(huán):控制內(nèi)循環(huán)次數(shù) for(j=0; jaj+1) t=aj;aj=aj+1;aj+1
15、=t;printf(the sorted numbers:n);for(i=0;in;i+) printf(%d ,ai);12 34 22 45 64 38i=112 22 34 45 38 64i=212 22 34 38 45o 冒泡法:交換排序o 升序o 降序o 改進(jìn):如果一輪兩兩比較下來沒有發(fā)生元素交換,如果一輪兩兩比較下來沒有發(fā)生元素交換,則停止下一輪的比較。則停止下一輪的比較。8.2 二維數(shù)組o 二維數(shù)組的定義類型類型 數(shù)組名常量表達(dá)式1常量表達(dá)式2;n例如:float a34;說明了一個(gè)3行4列的數(shù)組。nC的二維數(shù)組事實(shí)上是一種特殊的一維數(shù)組:每個(gè)元素都是一個(gè)一維數(shù)組的一維數(shù)組
16、。nC的二維數(shù)組在內(nèi)存中是按行存放。第1維行第2維列8.2 二維數(shù)組o 二維數(shù)組按行存放n 例:int a23;a數(shù)組為2行3列的整型數(shù)組,共有6個(gè)數(shù)組元素,分別為:a00 a01 a02 a10 a11 a128.2 二維數(shù)組o二維數(shù)組元素的一般表示形式(引用)數(shù)組名下標(biāo)1下標(biāo)2n 兩個(gè)下標(biāo)必須分別加方括號(hào)。不能把a(bǔ)01寫成a0,1。 n 行下標(biāo)和列下標(biāo)不能交換。例如a01和a10是兩個(gè)不同的元素。n 不能直接引用a0 。二維數(shù)組的初始化o 初始化可以按分行賦初值的方式,也可以按不分行賦初值的方式,分行賦初值程序更清晰。例如:int a34=1,2,3,4,5,6,7,8,9,10,11,1
17、2;等價(jià)于int a34=1,2,3,4,5,6,7,8,9,10,11,12;二維數(shù)組的初始化o 也可只對(duì)部分元素賦初值。例子:int a34=1,5,9;int a34=1,0,6,0,0,11;int a34=1,5,6;int a34=1, ,9; int a34=1,0,9;二維數(shù)組的初始化o 如果初始化提供了足夠的信息(如,全部初始化或分行初始化),則定義數(shù)組時(shí)可以省略第一維的長(zhǎng)度。下面四種初始化方式等價(jià):int a34=1,2,3,4,5,6,7,8,9,10,11,12;int a34=1,2,3,4,5,6,7,8,9,10,11,12;int a4=1,2,3,4,5,6,
18、7,8,9,10,11,12;int a4=1,2,3,4,5,6,7,8,9,10,11,12;例 計(jì)算二維數(shù)組元素和。(不作要求)#include stdio.hvoid main() int data43 = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12; int i, j, sum = 0; for(i=0;i4;i+) for(j=0;j3;j+) sum+=dataij; printf(SUM=%dn,sum);示例:二維數(shù)組的使用(不作要求)o 求一個(gè)34的矩陣中最大的元素。o 在若干個(gè)數(shù)中尋找最大(?。┲档囊话阕龇ǎ?1) 假設(shè)第一個(gè)元素為所求,將
19、其值記錄為當(dāng)前最大(?。┲?2) 從第二個(gè)(或第一個(gè))元素起,逐個(gè)判斷,如果發(fā)現(xiàn)它比當(dāng)前最大(小)值大(?。?,則將其值記錄為新的當(dāng)前最大(小)值void main() int a34=1,2,3,4, 9,8,7,6, -10,10,-5,2; int i, j; int row=0, colum=0, 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);8.3 字符型數(shù)組o 字符數(shù)組的定義方法和普通數(shù)組的定義方式相同
20、。例如:char c10;定義了包含10個(gè)元素的字符數(shù)組。o 對(duì)字符數(shù)組也可以采用普通數(shù)組的初始化方式。例如:char c5=H,e,l,l,o;示例:字符數(shù)組按逐個(gè)字符輸出void main() char c5=H,e,l,l,o; int i; for(i=0;i5;i+) printf(%c,ci); printf(n);o 在C語(yǔ)言中,將字符串作為字符數(shù)組來處理。o 有時(shí),有效字符串的長(zhǎng)度和字符數(shù)組的長(zhǎng)度不相同。為測(cè)定字符串的實(shí)際長(zhǎng)度,C規(guī)定了一個(gè)“字符串結(jié)束標(biāo)志”,以字符0代表。例如,如果有一個(gè)字符串中第一次出現(xiàn)0的是其第10個(gè)字符(對(duì)應(yīng)字符數(shù)組的第9個(gè)元素),則字符串的有效字符為9
21、個(gè)。示例:使用二維字符數(shù)組輸出一個(gè)鉆石圖形void main() char diamond5= , ,*, ,*, ,*, *, , , ,*, ,*, ,*, , ,*; int i,j; for(i=0;i5;i+) for(j=0;j5;j+) printf(%c,diamondij); printf(n); o 系統(tǒng)對(duì)字符串常量自動(dòng)加了一個(gè)0作為結(jié)束符。o 可以用字符串常量來使字符數(shù)組初始化。例如,char c =“Hello”; 或 char c =“Hello”;應(yīng)該注意到,這樣初始化,數(shù)組c的長(zhǎng)度是6,等價(jià)于char c6=H, e, l, l, o, 0;o 字符數(shù)組并不要求最
22、后一個(gè)字符為0。o 輸入輸出可以使用%c逐個(gè)字符處理,也可以用%s整體處理。o 定義字符數(shù)組并初試化,當(dāng)提供的字符常量個(gè)數(shù)少于數(shù)組元素個(gè)數(shù)時(shí),其余元素定為空字符0,空字符即ASCII碼為0的字符。例如:char c10=H,e,l,l,o;則數(shù)組c的值如下:c0 c1 c2 c3 c4 c5 c6 c7 c8 c9Hello00000字符串結(jié)束符o 系統(tǒng)在存儲(chǔ)字符串時(shí),自動(dòng)在字符串后面加入空字符(0),作為字符串結(jié)束符。o 例如字符串“Hello”,系統(tǒng)在內(nèi)存的實(shí)際存儲(chǔ)為:Hello0字符數(shù)組初始化o 可以用字符串對(duì)字符數(shù)組初始化,例如下面幾種字符數(shù)組的定義和初始化方式是等價(jià)的:char c6
23、=H,e,l,l,o ,0;char c=H,e,l,l,o ,0;/數(shù)組長(zhǎng)度可以省略char c6=H,e,l,l,o;/初始值個(gè)數(shù)小于數(shù)組長(zhǎng)度,c5初始化為0char c6=“Hello”;char c6=“Hello”;/花括號(hào)可以省略char c=“Hello”;/數(shù)組長(zhǎng)度可以省略o 注意,char c=“Hello”和char c=H,e,l,l,o ,0等價(jià)。o 但是,char c=“Hello”和char c=H,e,l,l,o 不等價(jià)。o 為什么?o char c=“Hello”和char c6=H,e,l,l,o 等價(jià)嗎?字符串處理函數(shù)(1):輸出o 使用printfn 用“
24、%s”格式符n 對(duì)應(yīng)的輸出項(xiàng)是字符數(shù)組名。例如:char str=Hello World!;printf(%s, str);n 輸出過程會(huì)在遇到第一個(gè)0時(shí)停止。例如:char str=Hello0World!;printf(%s, str);字符串處理函數(shù)(1):輸出o 使用printfn 用“%c”格式符例如:char str=Hello World!;i = 0;while (stri) printf(%c, stri+);字符串處理函數(shù)(1):輸出o putsn 原型:#include int puts (const char * s);n 說明:將一個(gè)以0結(jié)束的字符序列輸出到終端。n 注意,puts輸出時(shí),將字符串結(jié)束標(biāo)志0轉(zhuǎn)換成n。字符串處理函數(shù)(2):輸入o 使用scanfn 用“%s”格式符n 對(duì)應(yīng)的輸入項(xiàng)是字符數(shù)組名。不必加上&。例如:char str255;scanf(“%s”, str);n 遇到空格、tab鍵或回車鍵為止,系統(tǒng)會(huì)自動(dòng)在接受到的字符后面加一個(gè)0字符串處理函數(shù)(2):輸入o getsn 原型:#include char * get
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年重慶城市管理職業(yè)學(xué)院?jiǎn)握新殬I(yè)傾向性考試題庫(kù)帶答案詳解
- 聯(lián)考e類護(hù)理崗面試題及答案
- 鐵路教師面試題目及答案
- 2025年永州市城發(fā)物業(yè)管理有限公司對(duì)外公開招聘第一批工作人員備考題庫(kù)及答案詳解一套
- 廣州軟件學(xué)院2025-2026學(xué)年專任教師招聘?jìng)淇碱}庫(kù)完整答案詳解
- 2025年舟山市普陀區(qū)海洋經(jīng)濟(jì)發(fā)展局信息指揮中心應(yīng)急值勤崗位編外工作人員招聘?jìng)淇碱}庫(kù)及1套參考答案詳解
- 2025年華能安陽(yáng)熱電有限責(zé)任公司招聘?jìng)淇碱}庫(kù)及答案詳解1套
- 2025年福州市婦女兒童活動(dòng)中心關(guān)于招聘勞務(wù)派遣制工作人員的備考題庫(kù)參考答案詳解
- 廣西旅發(fā)集團(tuán)廣西自貿(mào)區(qū)醫(yī)院管理有限公司2025年12月招聘?jìng)淇碱}庫(kù)及參考答案詳解1套
- 2025年云南省玉溪市江川區(qū)教育體育系統(tǒng)公開招聘畢業(yè)生38人備考題庫(kù)及答案詳解參考
- 店鋪?zhàn)饨鹑牍珊贤瑓f(xié)議
- 醫(yī)療行業(yè)銷售年度工作總結(jié)
- 2024年中國(guó)計(jì)量發(fā)展白皮書
- 2025年中國(guó)電化學(xué)工作站市場(chǎng)調(diào)查研究報(bào)告
- 財(cái)務(wù)顧問合同聘請(qǐng)財(cái)務(wù)顧問合同
- 政府電梯維保投標(biāo)施工方案
- 四川省涼山州2025中考數(shù)學(xué)適應(yīng)性考試試卷四套附參考答案
- 蔬菜病蟲害綠色防控技術(shù)
- 江蘇省91job智慧就業(yè)平臺(tái)單位中心操作手冊(cè)
- 火力發(fā)電工程建設(shè)標(biāo)準(zhǔn)強(qiáng)制性條文執(zhí)行表格 第6部分 管道分冊(cè)
- 牛黃解毒膠囊藥代動(dòng)力學(xué)
評(píng)論
0/150
提交評(píng)論