




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、n一維數(shù)組的定義和引用一維數(shù)組的定義和引用n二維數(shù)組的定義和引用二維數(shù)組的定義和引用n字符數(shù)組字符數(shù)組第第6章章 數(shù)組數(shù)組u定義定義:把:把具有相同類型具有相同類型的若干變量按的若干變量按有序有序的形的形式組織起來。這些式組織起來。這些按序排列的同類數(shù)據(jù)元素的按序排列的同類數(shù)據(jù)元素的集合集合稱為稱為數(shù)組數(shù)組。u分類分類: 元素的類型:元素的類型:數(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ù)組: 類型說明符類型說明符 數(shù)組名數(shù)組名 常量表
2、達式常量表達式 ;u 常量常量表達式:元素的個數(shù),即表達式:元素的個數(shù),即數(shù)組長度數(shù)組長度。 例如:例如:int a10;int a10; 它表示數(shù)組名為它表示數(shù)組名為a a,此數(shù)組有此數(shù)組有1010個元素。個元素。下標(biāo)從下標(biāo)從0 0開始,開始,即即a0, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9a1, a2, a3, a4, a5, a6, a7, a8, a9。u注意注意:u數(shù)組長度是數(shù)組長度是固定固定的,不能是的,不能是變化變化的;的;u下標(biāo)從下標(biāo)從0 0開始;開始;u不能使用數(shù)組元素不能使用數(shù)組元素a10a10。u功能方面,數(shù)組中每個元素與普通變量等
3、價u數(shù)組元素引用:針對每個元素進行u輸入:scanf(“%d”, &ai);u輸出:printf(%d, ai);u注意:輸入和輸出數(shù)值型數(shù)組元素必須使用循環(huán)語句逐個輸入輸出各下標(biāo)變量,而不能用一個語句輸出整個數(shù)組。下面的寫法是錯誤的: scanf(%d, a); printf(%d, a); 一維數(shù)組的定義和引用一維數(shù)組的定義和引用例:對數(shù)組a中10個元素分別賦值為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ù)組時,初始化各元素的值(1) 對所有元素賦初值,如: int a10= 0,1,2,3,4,5,6,7,8,9 ;(2) 對部分元素賦初值,如: int a10= 0,1,2,3,4 ; (前5個元素賦初值,后5個元素值為0)(3) 若想使數(shù)組中元素值均為1,可寫成 int a10= 1,1,1,1,1,1,1,1,1,1 ; 但不能寫成:int a10=1*10;或 int a10=1 ;(4) 賦初值時,數(shù)組長度可省略,其長度值有初值的個數(shù)決定,如
5、: int a5=1,2,3,4,5; 可寫為: int a =1,2,3,4,5;一維數(shù)組的初始化一維數(shù)組的初始化例:輸入20個數(shù),找出其中最大數(shù),并輸出。 #include int main( ) int i,max,a20; printf(input 20 numbers:n); for(i=0;i20;i+) scanf(“%d”,&ai); /*輸入20個數(shù)*/ max=a0; /*先把第一個數(shù)作為最大數(shù)*/ for(i=1;imax) max=ai; /*max中存放當(dāng)前最大數(shù)*/ printf(maxmum=%dn,max); return 0; 例:求Fibonacci
6、數(shù)列的前20項的值。 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個整數(shù),按從小到大的順序輸出 #include int main( ) int i,j,temp,a10; printf(n input 10 numbers:n); for(i=0;i10;i+) scanf(“%d”,&ai); /*輸入無序的10個數(shù)*/ for(
7、i=0;i9;i+) /*選擇排序*/ for(j=i+1;jaj) temp=ai; ai=aj; aj=temp; for(i=0;i10;i+) /*輸出有序的10個數(shù)*/ printf(%d,ai); return 0 改進的選擇排序:#includeint main ( ) int i,j,t,p, a10; for (i=0; i10; i+) scanf (%d, &ai); /*輸入無序的10個數(shù)*/ for ( i=0; i9; i+ ) /* 進行9次比較 */ p=i; /* p為排序過程中最小元素的下標(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; 基本思想:將一堆無序的數(shù)據(jù)進行從小到大的排序,分若干次的排序,每一趟的排序都是將相鄰兩個數(shù)比較,將小的調(diào)到前頭,即實現(xiàn)小的數(shù)“上升”,大的數(shù)“下沉”。且每趟“下沉”到最后的數(shù)即該趟比較的數(shù)據(jù)的最大的數(shù)。例如:9,8,5,4,2,0(共6個數(shù)據(jù))第一趟:(共5次比較)冒泡排序冒泡排序第二趟:(共4次比較) 如此進行下去。可以推知,對6個數(shù)要比較5趟,才能
9、使6個數(shù)按大小順序排列。在第一趟中要進行兩個數(shù)之間的比較共5次,在第二趟中比4次第5趟比1次。如果有 n 個數(shù),則要進行 n-1 趟比較。在第 1 趟比較中要進行n-1次兩兩比較,在第 j 趟比較中要進行 n-j 次兩兩比較。 冒泡排序冒泡排序 #include int main ( ) /* 冒泡排序 */ int i, j, t, a10; for (i=0; i10; i+) /* 輸入10個整數(shù) */ scanf (%d, &ai); for (i=0; i9; i+)/* 進行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中,中,以此類推。以此類推。冒泡排序冒泡排序(從小到大):第一趟從(從小到大):第一趟從a0a0到到a9a9中找到中找到最大數(shù)最大數(shù)放在放在a9a9中,第二趟從中,第二趟從a0a0到到a8a8中找到次大數(shù)放在中找到次大數(shù)放在a8a8中,中,以此類推。以此類推。例:假設(shè)數(shù)組a的長度為10,要求輸入a的所有元素,再輸入一個整數(shù)
12、m,實現(xiàn)將a中后m個數(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往后移動一位,將10放到最前面; 2) 10,1.,8往后移動一位,將9放到最前面; . 4) 將8,9,10,1.6往后移動一位,將7放到最前面;關(guān)鍵:m步循環(huán),每次循環(huán)將數(shù)組中前9個元素往后移動一位,最后一位放到數(shù)組最前面。 例:假設(shè)數(shù)組a的長度為10,要求輸入a的所有元素,再輸入一個整數(shù)m,實現(xiàn)將a中后m個數(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個元素逆序存放; 2) 將前m個元素逆序存放; 3) 將剩余元素(10-m)個元素逆序存放;關(guān)鍵:使用逆序方式,只需3個循環(huán),每次循環(huán)將數(shù)組中元素逆序存放即可。 #includeint main()int i, a10, t, m;printf(請輸入數(shù)組:);for(i=0; i10; i+) scanf(%d, &ai);printf(請輸入前置元素的個數(shù):);scanf(%d, &m);/第一次全部逆序交換 for(i=0; i5; i+)t = ai; ai = a9-i;a9-i=t;/前m個元素逆序交換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的長度為10,請輸入a中的所有元素,再輸入一個整數(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),逐個判斷數(shù)組a中元素是否與m相等,若相等則記錄下標(biāo),并退出循環(huán)。 2) 循環(huán)結(jié)束后,判斷該下標(biāo),如果下標(biāo)10,則意味著a中存在m,此時刪除m。具體做法:將下標(biāo)后面的所有元素均往前移動一位,實現(xiàn)刪除m的目的; 3) 若下標(biāo)=10,表示沒有a中找到m,輸出“數(shù)據(jù)不存在!”;u二維數(shù)組定義: 類型說明符 數(shù)組名常量表達式1常量表達式2 例如:int a34; /* 不能寫成 a3,4 */ 說明了一個三行四列的數(shù)組,數(shù)組名為a,其下標(biāo)變量共有34個,即: a00, a01, a02, a03 a10, a11, a12, a13 a20, a21,
16、a22, a23u二維數(shù)組引用或訪問 : 數(shù)組名下標(biāo)1下標(biāo)2 其中下標(biāo)應(yīng)為整型常量或整型表達式。 二維數(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部分元素:未賦初值的元素自動取0值。如: int a23 = 1, 4 ; int a33 = 1,2, , 4,5,6 ; u全部元素初始化時,可省略第一維的大小。例如: int a 3 = 1, 2, 3, 4, 5, 6; 注意:此時只能省略第1維的值
17、。C根據(jù)初始化數(shù)據(jù)的數(shù)量,自動確定第1維的大小。二維數(shù)組的初始化二維數(shù)組的初始化 二維數(shù)組中的元素在內(nèi)存中的排列順序是:按按行存放,即先順序存放行存放,即先順序存放第一行的元素,再存放第一行的元素,再存放第二行的元素第二行的元素 二維數(shù)組二維數(shù)組b00b01b02b10b11b12b20b21b22例如:例如:整型數(shù)組整型數(shù)組 b33= 1,2,3, 4,5,6, 7,8,9 ;123456789多維數(shù)組的定義,類似于二維數(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ù)組的每個元素都又是一個數(shù)組,就組成了二維數(shù)組。根據(jù)這樣的分析,一個二維數(shù)組也可以分解為多個一維數(shù)組。如二維數(shù)組a34,可分解為三個一維數(shù)組,其數(shù)組名分別為: a0 、a1、a2。這三
19、個一維數(shù)組都有4個元素,例如:一維數(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)可以是整型整型表達式或表達式或整型整型變量,如變量,如 k=a2-12*2-1; j = aii+5;注意:注意:1. 不要寫成不要寫成 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、在原來矩陣中的元素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; /* 進行數(shù)組轉(zhuǎn)置 */ for (i=0; i=2; i+) for (j=0; j=1; j+) printf(%d , bij); printf(“n”); /* 輸出完一行換行*/ 例:有一個3*4的矩陣,要求編程序求出其中值最大的那個元素的值,以及其所在的行號和列號。#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ù)組名常量表達式;u初始化 char c10=c, ,p,r,o,g,r,a,m; 多余元素自動定為空字符(即0)n當(dāng)省略數(shù)組長度,系統(tǒng)會自動根據(jù)初值個數(shù)確定數(shù)組長度。 char c=c, ,p,r,o,g,r,a,m;
22、(長度自動為9)字符數(shù)組字符數(shù)組u初始化用字符串的方式 char c=“I am happy”; 或 char c=I am happy; 等價于 char c= I , ,a,m, ,h,a,p,p,y,0 ; 定義的數(shù)組長度大于實際字符串長度時,多余的以0補。字符數(shù)組字符數(shù)組u字符數(shù)組的輸入和輸出 1)用循環(huán)語句逐個輸入輸出:用格式符“c” 輸入: for(i=0; i10; i+) scanf(%c,&ai); 輸出: for (i=0; i10; i+) printf(%c,ai); 2)整個字符串一次性輸入輸出:用格式符“s” 例如: scanf( %s,c ); print
23、f( %s,c );n注意:用“%s”格式符輸出字符串時,scanf、printf函數(shù)中的輸出項是字符數(shù)組名,而不是數(shù)組元素名。寫成下面這樣是不對的:printf(%s,c0);字符數(shù)組字符數(shù)組例:輸出一個字符串例:輸出一個字符串“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ù)也可用于比較兩個字符串常量,或比較數(shù)組和字符串常量。如:k=strcmp(“China”,“CHINA”);
24、 注意:對兩個字符串比較,不能用以下形式: if(str1=str2) printf(“yes”);而只能用 if(strcmp(str1,str2)=0) printf(“yes”);字符串處理函數(shù)u6、測字符串長度函數(shù)strlen 格式: strlen(字符數(shù)組名) 功能:測字符串的實際長度(不含0) 并作為函數(shù)返回值。 如:char st=C language; k=strlen(st); u7、字符串大小寫轉(zhuǎn)換函數(shù)strlwr,strupr strlwr(str) 將字符串中大寫字母換成小寫字母 strupr(str) 將字符串中小寫字母換成大寫字母函數(shù)的返回值為字符串的首地址。字符串
25、處理函數(shù)例:輸入一行字符,統(tǒng)計其中有多少個單詞,單詞之間用空格分隔開。#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. 本站所有資源如無特殊說明,都需要本地電腦安裝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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 快時尚服裝企業(yè)ESG實踐與創(chuàng)新戰(zhàn)略研究報告
- 2025年度汽車維修外包單位安全生產(chǎn)責(zé)任協(xié)議書
- 加油站與消防機構(gòu)消防安全合作協(xié)議書2025
- 二零二五年度商業(yè)地產(chǎn)商鋪出售與物業(yè)管理合同
- 二零二五年度農(nóng)村房屋及附屬設(shè)施使用權(quán)轉(zhuǎn)讓協(xié)議
- 關(guān)節(jié)炎生物制劑行業(yè)跨境出海戰(zhàn)略研究報告
- 醫(yī)用橡膠導(dǎo)尿包組件企業(yè)制定與實施新質(zhì)生產(chǎn)力戰(zhàn)略研究報告
- 二零二五淘寶平臺用戶隱私保護與數(shù)據(jù)安全合同
- 二零二五年度門窗行業(yè)門窗設(shè)計大賽組織與贊助合同
- 2025年燒烤店員工入職協(xié)議書:薪酬激勵與職業(yè)晉升保障合同
- 2025年第六屆(中小學(xué)組)國家版圖知識競賽測試題庫及答案
- GB/T 26436-2025禽白血病診斷技術(shù)
- 體育場館工程施工組織設(shè)計
- 春季校園常見傳染病及預(yù)防措施培訓(xùn)課件
- 國際標(biāo)準(zhǔn)下的AI技術(shù)應(yīng)用-深度研究
- 2025-2030年城市軌道交通運營行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報告
- 2025年江西生物科技職業(yè)學(xué)院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 《信息技術(shù)(拓展模塊)》高職全套教學(xué)課件
- 2025天津市安全員《B證》考試題庫
- DB37T-住宅小區(qū)供配電設(shè)施建設(shè)標(biāo)準(zhǔn)編制說明
- 食品飲料行業(yè)酒類2025年度策略報告:拐點漸近行穩(wěn)致遠
評論
0/150
提交評論