第6章利用數(shù)組處理批量數(shù)據(jù)_第1頁(yè)
第6章利用數(shù)組處理批量數(shù)據(jù)_第2頁(yè)
第6章利用數(shù)組處理批量數(shù)據(jù)_第3頁(yè)
第6章利用數(shù)組處理批量數(shù)據(jù)_第4頁(yè)
第6章利用數(shù)組處理批量數(shù)據(jù)_第5頁(yè)
已閱讀5頁(yè),還剩41頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、n一維數(shù)組的定義和引用一維數(shù)組的定義和引用n二維數(shù)組的定義和引用二維數(shù)組的定義和引用n字符數(shù)組字符數(shù)組第第6章章 數(shù)組數(shù)組u定義定義:把:把具有相同類(lèi)型具有相同類(lèi)型的若干變量按的若干變量按有序有序的形的形式組織起來(lái)。這些式組織起來(lái)。這些按序排列的同類(lèi)數(shù)據(jù)元素的按序排列的同類(lèi)數(shù)據(jù)元素的集合集合稱(chēng)為稱(chēng)為數(shù)組數(shù)組。u分類(lèi)分類(lèi): 元素的類(lèi)型:元素的類(lèi)型:數(shù)值數(shù)值數(shù)組、數(shù)組、字符字符數(shù)組、數(shù)組、指針指針數(shù)組、數(shù)組、結(jié)構(gòu)結(jié)構(gòu)數(shù)組等;數(shù)組等; 維數(shù):維數(shù):一維一維數(shù)組、數(shù)組、二維二維數(shù)組、數(shù)組、數(shù)組數(shù)組一維數(shù)組的定義和引用一維數(shù)組的定義和引用u一維數(shù)組:一維數(shù)組: 類(lèi)型說(shuō)明符類(lèi)型說(shuō)明符 數(shù)組名數(shù)組名 常量表

2、達(dá)式常量表達(dá)式 ;u 常量常量表達(dá)式:元素的個(gè)數(shù),即表達(dá)式:元素的個(gè)數(shù),即數(shù)組長(zhǎng)度數(shù)組長(zhǎng)度。 例如:例如:int a10;int a10; 它表示數(shù)組名為它表示數(shù)組名為a a,此數(shù)組有此數(shù)組有1010個(gè)元素。個(gè)元素。下標(biāo)從下標(biāo)從0 0開(kāi)始,開(kāi)始,即即a0, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9a1, a2, a3, a4, a5, a6, a7, a8, a9。u注意注意:u數(shù)組長(zhǎng)度是數(shù)組長(zhǎng)度是固定固定的,不能是的,不能是變化變化的;的;u下標(biāo)從下標(biāo)從0 0開(kāi)始;開(kāi)始;u不能使用數(shù)組元素不能使用數(shù)組元素a10a10。u功能方面,數(shù)組中每個(gè)元素與普通變量等

3、價(jià)u數(shù)組元素引用:針對(duì)每個(gè)元素進(jìn)行u輸入:scanf(“%d”, &ai);u輸出:printf(%d, ai);u注意:輸入和輸出數(shù)值型數(shù)組元素必須使用循環(huán)語(yǔ)句逐個(gè)輸入輸出各下標(biāo)變量,而不能用一個(gè)語(yǔ)句輸出整個(gè)數(shù)組。下面的寫(xiě)法是錯(cuò)誤的: scanf(%d, a); printf(%d, a); 一維數(shù)組的定義和引用一維數(shù)組的定義和引用例:對(duì)數(shù)組a中10個(gè)元素分別賦值為0到9,并依次打?。?#includestdio.h void main( ) int i,a10; for(i=0;i=9;i+) ai=i; for(i=0;i=9;i+) printf(%d ,ai); 012345

4、6789a0a0a1a1a2a2a3a3a4a4a5a5a6a6a7a7a8a8a9a9一維數(shù)組的定義和引用一維數(shù)組的定義和引用u初始化:定義數(shù)組時(shí),初始化各元素的值(1) 對(duì)所有元素賦初值,如: int a10= 0,1,2,3,4,5,6,7,8,9 ;(2) 對(duì)部分元素賦初值,如: int a10= 0,1,2,3,4 ; (前5個(gè)元素賦初值,后5個(gè)元素值為0)(3) 若想使數(shù)組中元素值均為1,可寫(xiě)成 int a10= 1,1,1,1,1,1,1,1,1,1 ; 但不能寫(xiě)成:int a10=1*10;或 int a10=1 ;(4) 賦初值時(shí),數(shù)組長(zhǎng)度可省略,其長(zhǎng)度值有初值的個(gè)數(shù)決定,如

5、: int a5=1,2,3,4,5; 可寫(xiě)為: int a =1,2,3,4,5;一維數(shù)組的初始化一維數(shù)組的初始化例:輸入20個(gè)數(shù),找出其中最大數(shù),并輸出。 #include int main( ) int i,max,a20; printf(input 20 numbers:n); for(i=0;i20;i+) scanf(“%d”,&ai); /*輸入20個(gè)數(shù)*/ max=a0; /*先把第一個(gè)數(shù)作為最大數(shù)*/ for(i=1;imax) max=ai; /*max中存放當(dāng)前最大數(shù)*/ printf(maxmum=%dn,max); return 0; 例:求Fibonacci

6、數(shù)列的前20項(xiàng)的值。 a1=a2=1an=an-1+an-2 #include int main( ) int a20= 1, 1 ; int j; for (j=2; j20; j+) aj = aj-1+aj-2; for (j=0; j20; j+) printf(%dt, aj); return 0;例:輸入10個(gè)整數(shù),按從小到大的順序輸出 #include int main( ) int i,j,temp,a10; printf(n input 10 numbers:n); for(i=0;i10;i+) scanf(“%d”,&ai); /*輸入無(wú)序的10個(gè)數(shù)*/ for(

7、i=0;i9;i+) /*選擇排序*/ for(j=i+1;jaj) temp=ai; ai=aj; aj=temp; for(i=0;i10;i+) /*輸出有序的10個(gè)數(shù)*/ printf(%d,ai); return 0 改進(jìn)的選擇排序:#includeint main ( ) int i,j,t,p, a10; for (i=0; i10; i+) scanf (%d, &ai); /*輸入無(wú)序的10個(gè)數(shù)*/ for ( i=0; i9; i+ ) /* 進(jìn)行9次比較 */ p=i; /* p為排序過(guò)程中最小元素的下標(biāo) */ for (j=i+1; jaj) p = j; /*

8、 若有更小的數(shù)則記錄下標(biāo) */ if ( p != i ) t=ap; ap=ai; ai=t; /* 一次交換到位 */ for (i=0; i10; i+)/* 輸出排序后的結(jié)果 */ printf (%d , ai); return 0; 基本思想:將一堆無(wú)序的數(shù)據(jù)進(jìn)行從小到大的排序,分若干次的排序,每一趟的排序都是將相鄰兩個(gè)數(shù)比較,將小的調(diào)到前頭,即實(shí)現(xiàn)小的數(shù)“上升”,大的數(shù)“下沉”。且每趟“下沉”到最后的數(shù)即該趟比較的數(shù)據(jù)的最大的數(shù)。例如:9,8,5,4,2,0(共6個(gè)數(shù)據(jù))第一趟:(共5次比較)冒泡排序冒泡排序第二趟:(共4次比較) 如此進(jìn)行下去??梢酝浦?,對(duì)6個(gè)數(shù)要比較5趟,才能

9、使6個(gè)數(shù)按大小順序排列。在第一趟中要進(jìn)行兩個(gè)數(shù)之間的比較共5次,在第二趟中比4次第5趟比1次。如果有 n 個(gè)數(shù),則要進(jìn)行 n-1 趟比較。在第 1 趟比較中要進(jìn)行n-1次兩兩比較,在第 j 趟比較中要進(jìn)行 n-j 次兩兩比較。 冒泡排序冒泡排序 #include int main ( ) /* 冒泡排序 */ int i, j, t, a10; for (i=0; i10; i+) /* 輸入10個(gè)整數(shù) */ scanf (%d, &ai); for (i=0; i9; i+)/* 進(jìn)行9趟比較 */ for (j=0; j aj+1 ) t=aj; aj=aj+1; aj+1=t;

10、for (i=0; i10; i+)/* 輸出排序結(jié)果 */ printf(%d , ai); return 0; 冒泡冒泡排序排序 for(i=0;i9;i+)for(i=0;i9;i+) for(j=0;j9-i;j+) for(j=0;jaj+1) if(ajaj+1) t=aj; t=aj; aj=aj+1; aj=aj+1; aj+1=t; aj+1=t; 比較比較選擇選擇排序和排序和冒泡冒泡排序排序 選擇選擇排序排序for(i=0;i9;i+) for(i=0;i9;i+) for(j=i+1;j10;j+) for(j=i+1;jaj)if(aiaj) temp=ai;temp=

11、ai; ai=aj; ai=aj; aj=temp; aj=temp; 選擇排序選擇排序(從小到大):第一趟從(從小到大):第一趟從a0a0到到a9a9中找到中找到最小數(shù)最小數(shù)放在放在a0a0中,第二趟從中,第二趟從a1a1到到a9a9中找到次小數(shù)放在中找到次小數(shù)放在a1a1中,中,以此類(lèi)推。以此類(lèi)推。冒泡排序冒泡排序(從小到大):第一趟從(從小到大):第一趟從a0a0到到a9a9中找到中找到最大數(shù)最大數(shù)放在放在a9a9中,第二趟從中,第二趟從a0a0到到a8a8中找到次大數(shù)放在中找到次大數(shù)放在a8a8中,中,以此類(lèi)推。以此類(lèi)推。例:假設(shè)數(shù)組a的長(zhǎng)度為10,要求輸入a的所有元素,再輸入一個(gè)整數(shù)

12、m,實(shí)現(xiàn)將a中后m個(gè)數(shù)字移到a的前面。 如:數(shù)組a中元素為:1 2 3 4 5 6 7 8 9 10,若m=4,則輸出:7 8 9 10 1 2 3 4 5 6方法一:1) 1.9往后移動(dòng)一位,將10放到最前面; 2) 10,1.,8往后移動(dòng)一位,將9放到最前面; . 4) 將8,9,10,1.6往后移動(dòng)一位,將7放到最前面;關(guān)鍵:m步循環(huán),每次循環(huán)將數(shù)組中前9個(gè)元素往后移動(dòng)一位,最后一位放到數(shù)組最前面。 例:假設(shè)數(shù)組a的長(zhǎng)度為10,要求輸入a的所有元素,再輸入一個(gè)整數(shù)m,實(shí)現(xiàn)將a中后m個(gè)數(shù)字移到a的前面。 如:數(shù)組a中元素為:1 2 3 4 5 6 7 8 9 10,若m=4,則輸出:7 8

13、 9 10 1 2 3 4 5 6方法二:1) 1.10個(gè)元素逆序存放; 2) 將前m個(gè)元素逆序存放; 3) 將剩余元素(10-m)個(gè)元素逆序存放;關(guān)鍵:使用逆序方式,只需3個(gè)循環(huán),每次循環(huán)將數(shù)組中元素逆序存放即可。 #includeint main()int i, a10, t, m;printf(請(qǐng)輸入數(shù)組:);for(i=0; i10; i+) scanf(%d, &ai);printf(請(qǐng)輸入前置元素的個(gè)數(shù):);scanf(%d, &m);/第一次全部逆序交換 for(i=0; i5; i+)t = ai; ai = a9-i;a9-i=t;/前m個(gè)元素逆序交換for(

14、i=0; im/2; i+)t = ai;ai = am-i-1;am-i-1=t; /剩余元素逆序交換for(i=m; i(10+m)/2; i+)t = ai;ai = am+9-i;am+9-i=t; /打印for(i=0; i10; i+) printf(%d , ai); return 0;例:假設(shè)數(shù)組a的長(zhǎng)度為10,請(qǐng)輸入a中的所有元素,再輸入一個(gè)整數(shù)m,如果m在數(shù)組a中,則從a中刪除m,并輸出刪除m后的數(shù)組a,如果m不在數(shù)組a中,提示“數(shù)據(jù)不存在!”。 如:數(shù)組a元素為:1 2 3 4 5 6 7 8 9 10。 若m=4,則輸出: 1 2 3 5 6 7 8 9 10;若m=1

15、2,則輸出“數(shù)據(jù)不存在!”;步驟:1) 使用循環(huán),逐個(gè)判斷數(shù)組a中元素是否與m相等,若相等則記錄下標(biāo),并退出循環(huán)。 2) 循環(huán)結(jié)束后,判斷該下標(biāo),如果下標(biāo)10,則意味著a中存在m,此時(shí)刪除m。具體做法:將下標(biāo)后面的所有元素均往前移動(dòng)一位,實(shí)現(xiàn)刪除m的目的; 3) 若下標(biāo)=10,表示沒(méi)有a中找到m,輸出“數(shù)據(jù)不存在!”;u二維數(shù)組定義: 類(lèi)型說(shuō)明符 數(shù)組名常量表達(dá)式1常量表達(dá)式2 例如:int a34; /* 不能寫(xiě)成 a3,4 */ 說(shuō)明了一個(gè)三行四列的數(shù)組,數(shù)組名為a,其下標(biāo)變量共有34個(gè),即: a00, a01, a02, a03 a10, a11, a12, a13 a20, a21,

16、a22, a23u二維數(shù)組引用或訪(fǎng)問(wèn) : 數(shù)組名下標(biāo)1下標(biāo)2 其中下標(biāo)應(yīng)為整型常量或整型表達(dá)式。 二維數(shù)組的初始化二維數(shù)組的初始化u初始化u全部元素:按行分段賦值,或按行連續(xù)賦值,如: int a33= 80,75,92,61,65,71,59,63,70 ; 或:int a33= 80,75,92,61,65,71,59,63,70 ;u部分元素:未賦初值的元素自動(dòng)取0值。如: int a23 = 1, 4 ; int a33 = 1,2, , 4,5,6 ; u全部元素初始化時(shí),可省略第一維的大小。例如: int a 3 = 1, 2, 3, 4, 5, 6; 注意:此時(shí)只能省略第1維的值

17、。C根據(jù)初始化數(shù)據(jù)的數(shù)量,自動(dòng)確定第1維的大小。二維數(shù)組的初始化二維數(shù)組的初始化 二維數(shù)組中的元素在內(nèi)存中的排列順序是:按按行存放,即先順序存放行存放,即先順序存放第一行的元素,再存放第一行的元素,再存放第二行的元素第二行的元素 二維數(shù)組二維數(shù)組b00b01b02b10b11b12b20b21b22例如:例如:整型數(shù)組整型數(shù)組 b33= 1,2,3, 4,5,6, 7,8,9 ;123456789多維數(shù)組的定義,類(lèi)似于二維數(shù)組。例如:三維數(shù)組:例如:三維數(shù)組: float a234;注意:注意:多維數(shù)組元素在內(nèi)存中的多維數(shù)組元素在內(nèi)存中的排列順序排列順序: a000a000a001a001a0

18、02a002a003a003 a010 a010a011a011a012a012a013a013 a020a020a021a021a022a022a023a023 a100 a100a101a101a102a102a103a103 a110 a110a111a111a112a112a113a113 a120 a120a121a121a122a122a123a123二維數(shù)組可以看作是由一維數(shù)組的嵌套而構(gòu)成的。設(shè)一維數(shù)組的每個(gè)元素都又是一個(gè)數(shù)組,就組成了二維數(shù)組。根據(jù)這樣的分析,一個(gè)二維數(shù)組也可以分解為多個(gè)一維數(shù)組。如二維數(shù)組a34,可分解為三個(gè)一維數(shù)組,其數(shù)組名分別為: a0 、a1、a2。這三

19、個(gè)一維數(shù)組都有4個(gè)元素,例如:一維數(shù)組a0的元素為a00,a01,a02,a03。 二維數(shù)組二維數(shù)組二維數(shù)組元素的表示形式為:二維數(shù)組元素的表示形式為:數(shù)組名下標(biāo)下標(biāo)數(shù)組名下標(biāo)下標(biāo)例如:例如: k = a23下標(biāo)可以是下標(biāo)可以是整型整型表達(dá)式或表達(dá)式或整型整型變量,如變量,如 k=a2-12*2-1; j = aii+5;注意:注意:1. 不要寫(xiě)成不要寫(xiě)成 a2,3,a2-1,2*2-1形式形式;2. 下標(biāo)值應(yīng)在已定義的數(shù)組大小的范圍內(nèi)。下標(biāo)值應(yīng)在已定義的數(shù)組大小的范圍內(nèi)。二維數(shù)組二維數(shù)組例:求矩陣A(23)的轉(zhuǎn)置矩陣B(32)。 1 2 3 1 4 2 5 4 5 6 3 6 矩陣轉(zhuǎn)置算法:

20、在原來(lái)矩陣中的元素aij,應(yīng)是轉(zhuǎn)置后矩陣中的元素bji。 #include int main( ) int i, j, b32, a23 = 1,2,3, 4,5,6 ; for (i=0; i=1; i+) for (j=0; j=2; j+) bji = aij; /* 進(jìn)行數(shù)組轉(zhuǎn)置 */ for (i=0; i=2; i+) for (j=0; j=1; j+) printf(%d , bij); printf(“n”); /* 輸出完一行換行*/ 例:有一個(gè)3*4的矩陣,要求編程序求出其中值最大的那個(gè)元素的值,以及其所在的行號(hào)和列號(hào)。#include int main() int i,

21、j,row=0,colum=0,max; 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); return 0;u定義 char 數(shù)組名常量表達(dá)式;u初始化 char c10=c, ,p,r,o,g,r,a,m; 多余元素自動(dòng)定為空字符(即0)n當(dāng)省略數(shù)組長(zhǎng)度,系統(tǒng)會(huì)自動(dòng)根據(jù)初值個(gè)數(shù)確定數(shù)組長(zhǎng)度。 char c=c, ,p,r,o,g,r,a,m;

22、(長(zhǎng)度自動(dòng)為9)字符數(shù)組字符數(shù)組u初始化用字符串的方式 char c=“I am happy”; 或 char c=I am happy; 等價(jià)于 char c= I , ,a,m, ,h,a,p,p,y,0 ; 定義的數(shù)組長(zhǎng)度大于實(shí)際字符串長(zhǎng)度時(shí),多余的以0補(bǔ)。字符數(shù)組字符數(shù)組u字符數(shù)組的輸入和輸出 1)用循環(huán)語(yǔ)句逐個(gè)輸入輸出:用格式符“c” 輸入: for(i=0; i10; i+) scanf(%c,&ai); 輸出: for (i=0; i10; i+) printf(%c,ai); 2)整個(gè)字符串一次性輸入輸出:用格式符“s” 例如: scanf( %s,c ); print

23、f( %s,c );n注意:用“%s”格式符輸出字符串時(shí),scanf、printf函數(shù)中的輸出項(xiàng)是字符數(shù)組名,而不是數(shù)組元素名。寫(xiě)成下面這樣是不對(duì)的:printf(%s,c0);字符數(shù)組字符數(shù)組例:輸出一個(gè)字符串例:輸出一個(gè)字符串“I am a boy!”。 程序如下:程序如下:#include void main() char c10=I, ,a,m, ,a, , b, o, y, !; int i; for(i=0;i 字符串2,返回值 0; 字符串1 字符串2,返回值 0。 本函數(shù)也可用于比較兩個(gè)字符串常量,或比較數(shù)組和字符串常量。如:k=strcmp(“China”,“CHINA”);

24、 注意:對(duì)兩個(gè)字符串比較,不能用以下形式: if(str1=str2) printf(“yes”);而只能用 if(strcmp(str1,str2)=0) printf(“yes”);字符串處理函數(shù)u6、測(cè)字符串長(zhǎng)度函數(shù)strlen 格式: strlen(字符數(shù)組名) 功能:測(cè)字符串的實(shí)際長(zhǎng)度(不含0) 并作為函數(shù)返回值。 如:char st=C language; k=strlen(st); u7、字符串大小寫(xiě)轉(zhuǎn)換函數(shù)strlwr,strupr strlwr(str) 將字符串中大寫(xiě)字母換成小寫(xiě)字母 strupr(str) 將字符串中小寫(xiě)字母換成大寫(xiě)字母函數(shù)的返回值為字符串的首地址。字符串

25、處理函數(shù)例:輸入一行字符,統(tǒng)計(jì)其中有多少個(gè)單詞,單詞之間用空格分隔開(kāi)。#includevoid main() char string81, c; int i,num=0,word=0; gets(string); for(i=0;(c=stringi)!=0;i+) if(c= ) word=0; else if(word=0) word=1; num+; printf(“There are %d words in the line.n”,num);0 x y . z #include int main( ) char str1100,str2100;int i, j;printf (”Enter string 1:”);gets (str

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論