版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第6章 數(shù)組 本章概述 本章的學(xué)習(xí)目標(biāo)主要內(nèi)容1本章概述本章主要介紹了一維數(shù)組、二維數(shù)組、字符數(shù)組的定義和使用方法結(jié)合大量程序?qū)嵗榻B了常用的應(yīng)用數(shù)組的算法2本章的學(xué)習(xí)目標(biāo)本章教學(xué)目的: 掌握一維數(shù)組的定義和使用方法 掌握二維數(shù)組的定義和使用方法 掌握字符數(shù)組的定義和使用方法 能使用數(shù)組編寫(xiě)程序并掌握常用的算法本章教學(xué)重點(diǎn):數(shù)組的定義和使用方法本章教學(xué)難點(diǎn):使用數(shù)組的常用算法3主要內(nèi)容6.1 一維數(shù)組6.2 二維數(shù)組6.3 字符數(shù)組與字符串 6.4 本章小結(jié) 46.1 一維數(shù)組定義一維數(shù)組的形式如下: 類(lèi)型說(shuō)明符 數(shù)組名常量表達(dá)式; 例如: int a10;定義了有10個(gè)元素的整型數(shù)組a; 例
2、如: float score80,sum30;定義了有80個(gè)元素的實(shí)型數(shù)組score ,有30個(gè)元素的實(shí)型數(shù)組sum; 例如: char str60,name8,num10;定義了有60個(gè)元素的字符型數(shù)組str,有8個(gè)元素的字符型數(shù)組name,有10個(gè)元素的字符型數(shù)組num。6.1.1 一維數(shù)組的定義5一維數(shù)組的幾點(diǎn)說(shuō)明(1)數(shù)組名的命名規(guī)則與變量名的命名規(guī)則相同。(2)常量表達(dá)式的值表示數(shù)組元素的個(gè)數(shù),即數(shù)組長(zhǎng)度。例如定義“int a10;”后,表示數(shù)組a長(zhǎng)度為10,數(shù)組a有10個(gè)元素,10個(gè)數(shù)組元素的下標(biāo)取0、1、2、3、4、5、6、7、8、9這10個(gè)整數(shù),即數(shù)組a的10個(gè)元素分別表示為:
3、 a0、a1、a2、a3、a4、a5、a6、a7、a8、a9。(3)一個(gè)數(shù)組的所有元素是同種類(lèi)型的一組變量。例如定義“float s5;” 后,相當(dāng)于定義了一組float型變量,即s0、s1、s2、s3、s4中 的每一個(gè)都是float型變量。(4)在同一個(gè)函數(shù)中,數(shù)組名不能與其它變量名相同。下面是錯(cuò)誤的: main() int a; float a5; 6(6)方括號(hào)中的常量表達(dá)式,可以包括常量和符號(hào)常量,但不能是變量名,即C語(yǔ)言不允許對(duì)數(shù)組的大小作動(dòng)態(tài)定義。例如下面定義是錯(cuò)誤的: int main() int n; scanf(“%d”,&n); float an; 下面定義是可以的: #
4、define N 5 int main() float aN,b3+N; (5)允許在同一個(gè)類(lèi)型說(shuō)明中定義多個(gè)數(shù)組和變量,例如: int i,j,k,a6,b8,c9;(7)系統(tǒng)為數(shù)組元素所分配的內(nèi)存空間是連續(xù)的。7一維數(shù)組元素的引用和初始化 1.一維數(shù)組元素的引用必須先定義數(shù)組,然后才可以引用數(shù)組元素。數(shù)組元素的表示形式為: 數(shù)組名下標(biāo) 下標(biāo)可以是整型常量或整型表達(dá)式,下標(biāo)取值范圍是0到“數(shù)組長(zhǎng)度-1”范圍內(nèi)的整數(shù) 8例6.1 求一維整型數(shù)組元素值的總和以及平均值 輸入:10 30 50 70 90 110 #include int main() int n,sum=0,a6; float
5、aver; for ( n=0;n=5;n+) scanf(“%d”,&an); sum=sum+ an; aver =sum/6.0; for ( n=0;n6;n+) printf(“%d,”,an);printf(“%d,%fn”, sum,aver) ; return 0; 輸出:10,30,50,70,90,110,360,60.000000 92.一維數(shù)組元素的初始化 int a6;數(shù)組元素是沒(méi)有初始值,數(shù)組元素值是不確定的。int x6=1,3,5,7,9,11;上面定義將數(shù)組初始化為:x0=1、x1=3、x2=5、x3=7、x4=9、x5=11 int x6=1,3;可以只給數(shù)
6、組的一部分元素賦初值,其它值為0。 int x =1,3,5,7,9,11;對(duì)全部數(shù)組元素賦初值時(shí),允許省略數(shù)組長(zhǎng)度 。若數(shù)組元素的初值全為零,可以寫(xiě)成 :int x6=0 ; 10例6.2 從鍵盤(pán)輸入一個(gè)數(shù),在數(shù)組中按順序查找與該數(shù)相等的數(shù),輸出其所在位置。# include # define N 10int main() int n,m,sign=0;int numN=16,35,48,29,56,43,93,64,90,48;printf(“Please input the number:”) ;scanf(“%d”,&n);for ( m=0;mN;m+) if (n=numm) pr
7、intf(“%d,%d n”,m,numm);sign=1; if(sign=0)printf(“Have no this number。”) ;return 0;6.1.3 一維數(shù)組應(yīng)用舉例 11例6.2 從鍵盤(pán)輸入一個(gè)數(shù),在數(shù)組中按順序查找與該數(shù)相等的數(shù),輸出其所在位置。若輸入:48輸出為:2,48 9,48若輸入:93輸出為:6,93若輸入:123輸出為:Have no this number。12例6.3 將隨機(jī)產(chǎn)生的100個(gè)整數(shù)存儲(chǔ)在數(shù)組中,找出其中最大的數(shù)及其在數(shù)組中的下標(biāo)(若有多個(gè)相同的最大數(shù),則取第一個(gè)的下標(biāo))。# define N 10# include # include
8、int main()int k, max, loca=0, aN; srand(time(NULL); /*設(shè)置隨機(jī)數(shù)種子為當(dāng)前時(shí)間*/ for (k=0;kN;k+) ak=rand(); /*產(chǎn)生隨機(jī)數(shù)*/ for (k=0;kN;k+) printf(%d,ak); printf(n); max=a0; for(k=1;kmax) max=ak; loca=k; printf(%d,%dn,max,loca); return 0; 函數(shù)srand()是設(shè)置隨機(jī)數(shù)種子,每次執(zhí)行程序時(shí)該函數(shù)產(chǎn)生不同的整數(shù)序列,也就是傳遞給srand()一個(gè)整數(shù),以便決定rand()函數(shù)從何處開(kāi)始生成隨機(jī)數(shù)。
9、函數(shù)srand()調(diào)用time(NULL)返回一個(gè)自1970年1月1日以來(lái)經(jīng)歷的秒數(shù)。 函數(shù)rand()的值是取值為0到32767之間的隨機(jī)整數(shù)。13例6.4 對(duì)從鍵盤(pán)輸入的10個(gè)整數(shù),用選擇排序法將它們由大到小排序。 第1次找到10個(gè)數(shù)中的最大數(shù),查找的范圍是下標(biāo)為0到9范圍內(nèi)的所有數(shù)組元素,記住存儲(chǔ)這個(gè)最大數(shù)的數(shù)組元素的下標(biāo),將該下標(biāo)對(duì)應(yīng)的數(shù)組元素與下標(biāo)為0的數(shù)組元素的值對(duì)換,使下標(biāo)為0的數(shù)組元素中存儲(chǔ)最大數(shù),即下標(biāo)為0的數(shù)組元素中存儲(chǔ)的是:下標(biāo)為0到9范圍內(nèi)的所有數(shù)組元素中的最大數(shù)。 第2次找到剩余的9個(gè)數(shù)(除去第1次找到最大數(shù))中的最大數(shù),查找的范圍是下標(biāo)為1到9范圍內(nèi)的所有數(shù)組元素(
10、除去下標(biāo)為0的數(shù)組元素),記住存儲(chǔ)這個(gè)最大數(shù)的數(shù)組元素的下標(biāo),將該下標(biāo)對(duì)應(yīng)的數(shù)組元素與下標(biāo)為1的數(shù)組元素的值對(duì)換,使下標(biāo)為1的數(shù)組元素中存儲(chǔ)這個(gè)范圍內(nèi)的最大數(shù),即下標(biāo)為1的數(shù)組元素中存儲(chǔ)的是:下標(biāo)為1到9范圍內(nèi)的所有數(shù)組元素中的最大數(shù)。14 第3次找到剩余的8個(gè)數(shù)(除去第1次找到最大數(shù)、除去第2次找到最大數(shù))中的最大數(shù),查找的范圍是下標(biāo)為2到9范圍內(nèi)的所有數(shù)組元素(除去下標(biāo)為0和1的數(shù)組元素),記住存儲(chǔ)這個(gè)最大數(shù)的數(shù)組元素的下標(biāo),將該下標(biāo)對(duì)應(yīng)的數(shù)組元素與下標(biāo)為2的數(shù)組元素的值對(duì)換,使下標(biāo)為2的數(shù)組元素中存儲(chǔ)這個(gè)范圍內(nèi)的最大數(shù),即下標(biāo)為2的數(shù)組元素中存儲(chǔ)的是:下標(biāo)為2到9范圍內(nèi)的所有數(shù)組元素中的
11、最大數(shù)。 依次類(lèi)推。 直到第9次找到剩余的2個(gè)數(shù)中的最大數(shù),查找的范圍是下標(biāo)為8和9對(duì)應(yīng)的兩個(gè)數(shù)組元素,記住存儲(chǔ)這個(gè)最大數(shù)的數(shù)組元素的下標(biāo),將該下標(biāo)對(duì)應(yīng)的數(shù)組元素與下標(biāo)為8的數(shù)組元素的值對(duì)換,使下標(biāo)為8的數(shù)組元素中存儲(chǔ)這個(gè)范圍內(nèi)的最大數(shù),即下標(biāo)為8的數(shù)組元素中存儲(chǔ)的是:下標(biāo)為8和9兩個(gè)數(shù)組元素中的最大數(shù)。剩下的一個(gè)數(shù)放在下標(biāo)為9的數(shù)組元素中,顯然是最小的數(shù)。 這種排序方法稱(chēng)為選擇排序法。15例6.4 對(duì)從鍵盤(pán)輸入的10個(gè)整數(shù),用選擇排序法將它們由大到小排序。# define N 10# include int main ( ) int i, j, m, temp, aN; for (i=0;
12、iN; i+) scanf (%d, &ai); for(i=0;i=N-1;i+) printf(%5d, ai); printf(n); for (i=0; i=N-2; i+) m=i; for (j=i+1; jam) m=j; temp=ai; ai=am; am=temp; for (i=0; i=N-1; i+) printf (%5d, ai); printf(n); return 0;16例6.4 對(duì)從鍵盤(pán)輸入的10個(gè)整數(shù),用選擇排序法將它們由大到小排序。若輸入:4 9 1 3 0 5 7 2 8 6輸出為:4 9 1 3 0 5 7 2 8 6 9 8 7 6 5 4 3
13、2 1 017例6.5 數(shù)組x的10個(gè)數(shù)已經(jīng)按從大到小的順序存放好了,從鍵盤(pán)輸入數(shù)y,將y插入數(shù)組x中,使插入后的數(shù)組x中的11個(gè)數(shù)仍按從大到小的順序存放。# define N 11# include int main() int i,k,y; int xN= 98,96,87,78,72,64,56,51,43,36; for (k=0;k=N-2;k+) printf(“%d ,”,xk); printf(“n input the number insertedn”); scanf(“%d”,&y); if (y=xN-2) xN-1=y; /*若y小于或等于xN-2,*/ /* 則將y插
14、在最后 */ else i=0; while (ixi) /*若y大于xi,則將y */ /* 插在下標(biāo)為i的位置 */ for (k=N-2;k=i;k-) xk+1=xk; /*下標(biāo)大于或等于i的元素*/ /* 依次向后移動(dòng)一個(gè)位置*/ xi=y; break; i+; for (k=0;kbott為止。 注意:使用折半查找法,要求數(shù)組一定是有序的。20例6.6 數(shù)組b中的10個(gè)數(shù)按從小到大的順序存放,現(xiàn)從鍵盤(pán)輸入一個(gè)數(shù)a,請(qǐng)使用折半查找法,在數(shù)組b中查找與數(shù)a相同的數(shù)的位置。# define N 10# include int main() int top, bott, mid, loc
15、a, a, bN=1,2,3,4,5,6,7,8,9,10; scanf(%d,&a); top=0; bott=N-1; loca=-1; while (top=bott) mid=(top+bott)/2; if (a=bmid) printf(%d,%dn, a, mid); loca=mid; break; else if (abmid) bott=mid-1; else top=mid+1; if (loca=-1) printf(Did not find out %dn,a); return 0; 216.2.1 二維數(shù)組的定義 二維數(shù)組定義的一般形式為: 類(lèi)型說(shuō)明符 數(shù)組名常量表
16、達(dá)式1 常量表達(dá)式2 例如下面定義了二維數(shù)組score和area,score有24(4行6列)個(gè)數(shù)組元素,area有21(3行7列)個(gè)數(shù)組元素,每個(gè)數(shù)組元素是一個(gè)float型變量: float score46,area37; 例如下面定義了二維數(shù)組a、b和num,a有6(2行3列)個(gè)數(shù)組元素,b有12(3行4列)個(gè)數(shù)組元素,num有30(3行10列)個(gè)數(shù)組元素,每個(gè)數(shù)組元素都是一個(gè)int型變量: int a23,b34,num310;6.2 二維數(shù)組22 二維數(shù)組中的元素在內(nèi)存中是按行順序存放的,系統(tǒng)為它們分配連續(xù)的內(nèi)存空間,即先放第一行的元素,再放第二行的元素, 。 例如,上面定義的數(shù)組a的
17、6個(gè)元素在內(nèi)存中按如下順序排列: a00,a01,a02,a10,a11,a12 可以把二維數(shù)組看成是一種特殊的一維數(shù)組,這個(gè)一維數(shù)組中的每個(gè)元素又是一個(gè)一維數(shù)組。例如,可以把上面定義的二維數(shù)組num看成是一維數(shù)組,這個(gè)一維數(shù)組有num0、num1、num2三個(gè)元素。每個(gè)元素(num0或num1或num2)都是包含10個(gè)元素的一維數(shù)組,num0、num1和num2分別是三個(gè)一維數(shù)組的名稱(chēng)。 如下所示: 23 也可以定義二維以上的多維數(shù)組, 例如“int x342;”, 定義了有24個(gè)數(shù)組元素的三維數(shù)組x。 246.2.2 二維數(shù)組元素的引用和初始化1二維數(shù)組元素的引用 引用二維數(shù)組元素的一般形
18、式為: 數(shù)組名行下標(biāo)列下標(biāo) 下標(biāo)可以是整型變量或整型表達(dá)式,例如,num12、numij 、numi+1j-2。行下標(biāo)不能大于或等于數(shù)組的行數(shù),列下標(biāo)不能大于或等于數(shù)組的列數(shù)。 可以將二維數(shù)組元素看成是一個(gè)普通變量,二維數(shù)組元素可以被賦值,二維數(shù)組元素可以出現(xiàn)在表達(dá)式中。 通常使用雙重循環(huán)操作二維數(shù)組元素,外層循環(huán)控制二維數(shù)組行下標(biāo)的變化,內(nèi)層循環(huán)控制二維數(shù)組列下標(biāo)的變化。25例6.7 已知矩陣A和B如下,矩陣C=A+2B, 矩陣D= 8A- B,請(qǐng)輸出矩陣C和D。 # include int main() int a23,b23,c23,d23 ,i,j,k=1; for (i=0;i2;i
19、+)for (j=0;j3;j+) aij=k+; bij=aij+6; for (i=0;i2;i+) for (j=0;j3;j+) cij=aij+2*bij; dij=8*aij-bij; for (i=0;i2;i+) for (j=0;j3;j+) printf(%5d”,cij); printf(n); for (i=0;i2;i+) for (j=0;j3;j+) printf(%5d”,dij); printf(n); return 0;26例6.7 已知矩陣A和B如下,矩陣C=A+2B, 矩陣D= 8A- B,輸出矩陣C和D。輸出如下:15 18 2124 27 30 1
20、8 1522 29 36272. 二維數(shù)組元素的初始化 (1)分行給二維數(shù)組各元素賦初值,例如: int a23=1,2,3,4,5,6 ; 將1,2,3分別賦給第一行的3個(gè)元素,將4,5,6分別賦給第二行的3個(gè)元素。(2)只用一個(gè)花括號(hào),按排列順序?qū)Ω髟刭x初值。 例如下面的作用與上面相同。 int a23=1,2,3,4,5,6 ;(3)可以只對(duì)部分元素賦值。 例如:int b23=1,2,3 ; 相當(dāng)于b00=1,b01=2,b02=0,b10=3,b11=0, b12=0。即上面沒(méi)有對(duì)應(yīng)列出值的數(shù)組各元素的初值取0。 例如:int b23=1,2, ; 相當(dāng)于b00=1,b01=2,其
21、余元素(包括第二行)初值都是0 。 例如:int b23=0,1,0,0,3 ; 相當(dāng)于b01=1, b12=3,其余元素都是0。28二維數(shù)組元素的初始化 (4)可以省略行數(shù)。例如下面兩種定義等價(jià): int a23= 1,2,3,4,5,6 ; int a 3=1,2,3,4,5,6 ;后一種定義省略了行數(shù)2。但要注意不能省略為 “int a2 =1,2,3,4,5,6;對(duì)部分?jǐn)?shù)組元素賦初值時(shí),也可以省略了行數(shù),但應(yīng)分行賦初值。例如下面的定義: int a 4=1,2,3, ,6,7,8,9 ;296.2.3 二維數(shù)組應(yīng)用舉例例6.8 已知矩陣A和B如下,A、B分別表示A、B的轉(zhuǎn)置矩陣,C=A
22、+B,輸出矩陣C。30例6.8 已知矩陣A和B如下,A、B分別表示A、B的轉(zhuǎn)置矩陣,C=A+B,輸出矩陣C。 # include int main() int a23=1,2,3,4,5,6; int b23=7,8,9,10,11,12; int i,j,a132,b132,c32; for (i=0;i2;i+) for (j=0;j3;j+) a1ji=aij; /* a1是a的轉(zhuǎn)置矩陣*/ b1ji=bij; /* b1是b的轉(zhuǎn)置矩陣*/ for (i=0;i3;i+) for (j=0;j2;j+) cij=a1ij+b1ij;for (i=0;i3;i+) for (j=0;j2;
23、j+) printf(%5d”,cij); printf(n); return 0; 輸出如下:8 1410 1612 1831例6.9 打印6行如下形式的揚(yáng)輝三角形。11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 132例6.9 打印6行如下形式的揚(yáng)輝三角形。# define N 7# include int main() int i, j, aNN; for (i=1; iN; i+) aii=1; ai1=1; for (i=3; iN; i+) for (j=2; j=i-1; j+) aij=ai-1j-1+ai-1j; for (i=1; iN; i+)
24、for (j=1; j=i; j+) printf(“%5d”, aij); printf(“n”); return 0;注意: 沒(méi)有使用下標(biāo)為0的數(shù)組元素.336.3 字符數(shù)組與字符串6.3.1 字符數(shù)組的定義字符數(shù)組用來(lái)存放字符型數(shù)據(jù),字符數(shù)組定義的形式與前面介紹的普通數(shù)組類(lèi)似,只是數(shù)據(jù)類(lèi)型為char。例如: char a10,b20; 定義了有10個(gè)數(shù)組元素的字符數(shù)組a和有20個(gè)數(shù)組元素的字符數(shù)組b。字符數(shù)組也可以是二維或多維的,例如: char name8010,address8060; 定義了有80行10列的二維字符數(shù)組name,定義了有80行60列的二維字符數(shù)組address。每個(gè)
25、字符數(shù)組元素占一個(gè)字節(jié)的內(nèi)存空間,可以存放一個(gè)字符。346.3.2 字符數(shù)組的引用和初始化 1字符數(shù)組的引用 字符數(shù)組的引用形式同前面介紹的一維數(shù)組和二維數(shù)組相同。 形式為: 數(shù)組名下標(biāo) 或 數(shù)組名行下標(biāo)列下標(biāo) 對(duì)下標(biāo)的要求也同前面介紹的一維數(shù)組和二維數(shù)組相同??梢詫⒚總€(gè)數(shù)組元素看成是一個(gè)普通的字符型變量,數(shù)組元素可以被賦值,數(shù)組元素可以出現(xiàn)在表達(dá)式中。35 字符數(shù)組的初始化形式同前面介紹的一維數(shù)組和二維數(shù)組相同,只不過(guò)現(xiàn)在賦給數(shù)組元素的值是字符型的數(shù)據(jù)。 例如可以像下面這樣對(duì)字符數(shù)組a初始化,賦給a的每個(gè)數(shù)組元素一個(gè)字符:char a5=A,B,C,D,E; 即執(zhí)行上面定義后,a0=A、a1
26、=B、a2=C、a3=D、a4=E。 若提供的字符個(gè)數(shù)與數(shù)組元素個(gè)數(shù)相同,可以省略數(shù)組長(zhǎng)度。例如下面的定義與上面的作用相同:char a =A,B,C,D,E; 也可以像下面那樣給字符數(shù)組a的數(shù)組元素賦值:char a5=A,B,C; 即執(zhí)行上面定義后,a0=A、a1=B、a2=C,而a3=a4=0。0代表ASCII碼為0的字符,不是一可以顯示的字符,而是一空操作符。 2字符數(shù)組的初始化366.3.3 字符串 字符串的用途非常大,例如,人的姓名、身份證號(hào)碼,產(chǎn)品的名稱(chēng)、型號(hào)、產(chǎn)地,都是字符串。 在C語(yǔ)言中,沒(méi)有專(zhuān)門(mén)的字符串變量,通常用字符數(shù)組存放字符串。 C語(yǔ)言規(guī)定用字符0作為字符串結(jié)束標(biāo)志,
27、系統(tǒng)自動(dòng)在字符串尾加上0。 由于系統(tǒng)自動(dòng)在字符串尾加上了字符串結(jié)束標(biāo)志0,所以可以利用0來(lái)判斷字符串是否結(jié)束。從字符串的第一個(gè)字符開(kāi)始向后逐個(gè)字符檢查,遇到0時(shí),就表示字符串結(jié)束了。 前面使用過(guò)的printf函數(shù),可以輸出一個(gè)字符串,例如:printf(“This is C program”); 系統(tǒng)自動(dòng)在字符串“This is C program”的尾部加了一個(gè)0,在內(nèi)存中存儲(chǔ)的實(shí)際上是字符串“This is C program0”。執(zhí)行printf函數(shù)輸出該字符串時(shí),系統(tǒng)從第一個(gè)字符T開(kāi)始逐個(gè)字符輸出,每輸出一個(gè)字符都進(jìn)行檢查,遇到字符串結(jié)束標(biāo)志0時(shí),就停止輸出。37 可以使用字符串常量對(duì)
28、一個(gè)字符數(shù)組進(jìn)行初始化,例如: char a6=“China”; 它與下面定義是等價(jià)的:char a6=C,h,i,n,a,0; 可以省略上面兩種定義中的數(shù)組長(zhǎng)度6,寫(xiě)成下面兩種形式: char a =“China”;char a =C,h,i,n,a,0; 使用字符串常量進(jìn)行初始化時(shí),也可以省略大括號(hào)和數(shù)組長(zhǎng)度6,寫(xiě)成: char a =“China”; 注意:下面的定義與上面的幾種定義形式是不等價(jià)的:char a =C,h,i,n,a; 因?yàn)槿鄙僖粋€(gè)字符串結(jié)束標(biāo)志0,這里省略的數(shù)組長(zhǎng)度是5,而不是6。386.3.4 字符數(shù)組的輸入輸出 用格式符%c逐個(gè)字符輸入輸出字符數(shù)組元素的值用格式符%
29、s整體輸入輸出字符數(shù)組元素的值 39用格式符%c逐個(gè)字符輸入輸出字符數(shù)組元素的值# include int main() char a16; int i; for (i=0; i16; i+) scanf (%c, &ai);for (i=0; i16; i+) if (a=ai &ai=z |A=ai&ai=Z) printf (%c, ai); printf(n); return 0; 例6.10 輸入16個(gè)字符,輸出其中的所有英文字母。若輸入:ab123EF*#678gh?+則輸出:abEFgh40用格式符%s整體輸入輸出字符數(shù)組元素的值 # include int main() cha
30、r a30,b30=0; int i,j=0; scanf(%s,a); printf(%sn,a); for (i=0;i30;i+) if (ai=A|ai=E |ai=I|ai=O|ai=U) printf(%c,ai); bj+=ai; printf(n); printf(%sn,b); return 0;例6.11 完成如下操作:輸入一串字符(小于30個(gè)字符)存儲(chǔ)在數(shù)組a中,輸出其中的所有大寫(xiě)元音字母,將其中的所有大寫(xiě)元音字母存儲(chǔ)到數(shù)組b中,輸出數(shù)組b。41用格式符%s整體輸入輸出字符數(shù)組元素的值 例6.11 完成如下操作:輸入一串字符(小于30個(gè)字符)存儲(chǔ)在數(shù)組a中,輸出其中的所有
31、大寫(xiě)元音字母,將其中的所有大寫(xiě)元音字母存儲(chǔ)到數(shù)組b中,輸出數(shù)組b。若輸入:AAaa123EEFF*#deII678fgOOghUU*則輸出:AAaa123EEFF*#deII678fgOOghUU* AAEEIIOOUU AAEEIIOOUU42注意: 像上面那樣輸入29個(gè)字符后,系統(tǒng)自動(dòng)將0加在這串字符的最后,實(shí)際數(shù)組a中存儲(chǔ)的是30個(gè)字符,即a29=0。 若定義數(shù)組b時(shí)只是寫(xiě)成“char a30,b30;”,不用0進(jìn)行初始化,程序運(yùn)行后,會(huì)造成:在數(shù)組b應(yīng)該包含的所有字符(AAEEIIOOUU)的后面沒(méi)有加0,當(dāng)使用“printf(%sn,b);”輸出時(shí),由于沒(méi)有0,除了輸出“AAEEII
32、OOUU”外,可能還要接著輸出一些其它的字符。43對(duì)字符數(shù)組輸入輸出的幾點(diǎn)說(shuō)明 1)用%s輸出字符數(shù)組內(nèi)容時(shí),從數(shù)組的第一個(gè)字符開(kāi)始向后逐個(gè)字符輸出,遇見(jiàn)0就停止,即使存儲(chǔ)的字符個(gè)數(shù)小于數(shù)組長(zhǎng)度,遇見(jiàn)0也結(jié)束輸出。例如: char x8=“array”; printf(“%s”,x);x的前5個(gè)元素中存儲(chǔ)了5個(gè)字符(非0),x的后3個(gè)元素存儲(chǔ)的字符都是0,輸出5個(gè)字符“array”后,遇見(jiàn)了0,結(jié)束輸出。2)若字符數(shù)組中包含兩個(gè)或兩個(gè)以上的0,遇見(jiàn)第一個(gè)0時(shí),輸出結(jié)束。例如: char a10=a,r,r,a,y,0,s,t,r,0; printf(“%s”,a);只是輸出“array ” ,
33、后面的“str”不能一起輸出。44對(duì)字符數(shù)組輸入輸出的幾點(diǎn)說(shuō)明 (3)與格式符%s對(duì)應(yīng)的輸出項(xiàng)是字符數(shù)組名稱(chēng),不是字符數(shù)組元素名稱(chēng)。與格式符%c對(duì)應(yīng)的輸出項(xiàng)是字符數(shù)組元素名稱(chēng),不是字符數(shù)組名稱(chēng)。例如下面printf函數(shù)的用法都是錯(cuò)誤的:char x8;printf(“%s”,x0);printf(“%c”,x);(4)使用%s給字符數(shù)組輸入一串字符時(shí),這串字符的中間不能有空格,否則只是把第一個(gè)空格前的字符賦給了字符數(shù)組。例如,執(zhí)行下面語(yǔ)句給字符數(shù)組s賦值:char s30;scanf(“%s”,s);printf(“%s”,s); 若輸入中間有空格的一串字符: students sdudy C
34、-program 實(shí)際上只是將第一個(gè)空格前的8個(gè)字符“students”加上0賦給了字符數(shù)組s。顯示輸出的結(jié)果是:students456.3.5 處理字符串的函數(shù) C語(yǔ)言提供了許多處理字符串的函數(shù),使用這些函數(shù)編程很方便。 但要注意:使用函數(shù)gets和puts時(shí),要用預(yù)處理語(yǔ)句# include將“stdio.h”包含進(jìn)程序中來(lái);使用函數(shù)strcat、strcpy、strcmp、strlen、strlwr、strupr時(shí),要用預(yù)處理語(yǔ)句# include將“string.h”包含進(jìn)程序中來(lái)。461.輸入字符串函數(shù) 格式為: gets(字符數(shù)組名) 作用是從終端輸入一個(gè)字符串,賦給字符數(shù)組。函數(shù)
35、值是該字符數(shù)組的起始地址。 例如執(zhí)行下面語(yǔ)句:char s30;gets(s); 從鍵盤(pán)輸入24個(gè)字符“students study C-program”后按回車(chē)鍵,注意到這個(gè)字符串中包含了2個(gè)空格,系統(tǒng)將這24個(gè)字符存儲(chǔ)到字符數(shù)組s中,并且系統(tǒng)在這24個(gè)字符的后面自動(dòng)加了0,0也和前面的字符一起存儲(chǔ)到字符數(shù)組s中。472. 輸出字符串函數(shù) 格式為: puts(字符數(shù)組名)作用是將存儲(chǔ)在字符數(shù)組中的字符串(以0結(jié)尾的字符序列)輸出到終端,在輸出時(shí)將字符串結(jié)束標(biāo)志0轉(zhuǎn)換成n,即輸出完字符序列后換行。 例如執(zhí)行下面語(yǔ)句: char s30=students sdudy C-program; put
36、s(s); printf(%s,struggle);輸出為: students sdudy C-program struggle483. 連接字符串函數(shù) 格式為: strcat(字符數(shù)組名1,字符串2) 作用是將字符串2連接到字符數(shù)組名1中存儲(chǔ)的字符串的后面,并且刪除字符數(shù)組名1中存儲(chǔ)的字符串尾的字符串結(jié)束標(biāo)志0。函數(shù)值是字符數(shù)組名1的起始地址。注意:(1)字符數(shù)組名1必須定義的足夠長(zhǎng),以便能夠容納連接后的字符串;(2)字符串2可以是字符數(shù)組名稱(chēng),也可以是字符串常量。49連接字符串函數(shù) 例如執(zhí)行下面的語(yǔ)句:char s160=we love ;char s230=china;strcat(s1
37、,s2); puts(s1);strcat(s2, people); puts(s2);輸出為:we love chinachina people(3)可以使用函數(shù)strncat(字符數(shù)組名1,字符串2,n),將字符串2的前面n個(gè)字符連接到字符數(shù)組名1中存儲(chǔ)的字符串的后面。504. 復(fù)制字符串函數(shù) 格式為: strcpy(字符數(shù)組名1,字符串2)作用是將字符串2中的字符串復(fù)制到字符數(shù)組名1中,字符串2尾的字符串結(jié)束標(biāo)志0也復(fù)制過(guò)去。 注意:(1)不能用賦值語(yǔ)句直接給一個(gè)字符數(shù)組賦值,必須用函數(shù)strcpy給一個(gè)字符數(shù)組賦值。例如下面給字符數(shù)組s1賦值的兩種形式都是錯(cuò)誤的: char s180,
38、 s260=abdcefg; s1=s2; /*應(yīng)該用strcpy(s1,s2);*/ s1=LMNXYZ; /*應(yīng)該用strcpy(s1,LMNXYZ);*/(2)字符數(shù)組名1必須定義的足夠長(zhǎng),以便能夠容納復(fù)制后的字符串。(3)字符串2可以是字符數(shù)組名稱(chēng),也可以是字符串常量。(4)可以使用函數(shù)strncpy(字符數(shù)組名1,字符串2,n),將字符串2的前面n個(gè)字符復(fù)制到字符數(shù)組名1中。51例6.12 復(fù)制字符串函數(shù)的使用情況 # include int main() int i; char s112 =abdcefghijk; char s210=123456; strcpy(s1,s2);
39、puts(s1); puts(s2); for (i=0;i12;i+) printf(%c,s1i); printf(n); strcpy(s1,ABCDEFGH); puts(s1); for (i=0;i0成立。strcmp(“abcdefg”,“abcdefg”)=0成立。strcmp(“abcdeyz”,“abcdxym”)0成立。若char s110=BFGH,s210=Bfg,則strcmp(s1,s2)0成立,strcmp(BAG,s2)0成立,strcmp(s1,BFGH)=0成立。546.求字符串長(zhǎng)度函數(shù) 格式為: strlen(字符串) 作用求字符串的長(zhǎng)度,字符串可以是字
40、符串常量,也可以是字符數(shù)組名稱(chēng)。函數(shù)值為不包括字符串尾的0在內(nèi)的所有字符數(shù)。例如,若s1、s2、s3定義如下: char s110=efg; char s210=e,f,g,0; char s310=e,f,g,0,h,i,0; 那么:strlen(s1)等于strlen(s2)等于strlen(s3)等于strlen(efg)等于3。 注意,雖然字符數(shù)組s3有10個(gè)數(shù)組元素,存儲(chǔ)了5個(gè)英文字母和若干個(gè)0,但strlen(s3)不等于10,也不等于5,也不等于7。557. 將大寫(xiě)字母轉(zhuǎn)換成小寫(xiě)字母函數(shù) 格式為: strlwr(字符串) 作用是將字符串中的大寫(xiě)字母轉(zhuǎn)換成小寫(xiě)字母,字符串中的其它字
41、符保持不變。字符串可以是字符串常量,也可以是字符數(shù)組名稱(chēng)。例如:char s120=ABCDefg123*%#;printf(%sn%s,strlwr(s1),strlwr(789Aabb*EFG); 輸出為:abcdefg123*%#789aabb*efg568. 將小寫(xiě)字母轉(zhuǎn)換成大寫(xiě)字母函數(shù) 格式為: strupr(字符串)作用是將字符串中的小寫(xiě)字母轉(zhuǎn)換成大寫(xiě)字母,字符串中的其它字符保持不變。字符串可以是字符串常量,也可以是字符數(shù)組名稱(chēng)。57例6.13 將指定的一個(gè)字符從字符串中刪除。算法:首先將字符串存儲(chǔ)在數(shù)組s1中,將指定的一個(gè)字符存儲(chǔ)在變量ch中,然后將s1中所有與ch不相同的其它字
42、符復(fù)制到數(shù)組s2中。則數(shù)組s2中存儲(chǔ)的就是刪除了指定字符之后的其它字符。6.3.6 字符數(shù)組應(yīng)用舉例58例6.13 將指定的一個(gè)字符從字符串中刪除 # include # include int main() int i, j=0; char ch, s130, s230 ; printf(Please input a string:); gets(s1); printf(Please input a char:); scanf(%c,&ch); for (i=0;s1i!=0;i+) if (s1i!=ch) s2j+=s1i; s2j=0; strcpy(s1,s2); puts(s1);
43、 return 0; 執(zhí)行程序:輸出:Please input a string:輸入:ABBA3Adfg輸出:Please input a char:輸入:A輸出:BB3dfg59例6.14 輸入10個(gè)字符,用冒泡法將這10個(gè)字符從小到大排序。冒泡法的編程思路是: 首先進(jìn)行第1輪的比較(n=1),找出a1至aK范圍內(nèi)最大的字符,存放在aK中。 然后進(jìn)行第2輪的比較(n=2),找出a1至aK-1范圍內(nèi)最大的字符,存放在aK-1中。 然后進(jìn)行第3輪的比較(n=3),找出a1至aK-2范圍內(nèi)最大的字符,存放在aK-2中。 然后進(jìn)行第K-2輪的比較(n=K-2),找出a1至a3的范圍內(nèi)最大的字符,存放在a3中。 最后進(jìn)行第K-1輪的比較(n=K-1),找出a1和a2中的最大的字符,存放在a2中。此時(shí)存放在a1中的自然是最小的字符。 對(duì)于每一輪比較,根據(jù)取定的n值,在a1至aK-n(1=m=K-n)范圍內(nèi),每個(gè)數(shù)組元素am與它后面的相鄰元素am+1進(jìn)行比較。比較時(shí),若am大于am+1,則交換這兩個(gè)元素的值。這樣經(jīng)過(guò)若干次相鄰兩個(gè)元素的比較和交換,就將本輪要比較的范圍內(nèi)的最大值找了出來(lái),存放于aK-n+1中。60例6.14 輸入10個(gè)字符,用冒泡法將這10個(gè)字符從小到大排序。執(zhí)行程序若輸入:BHCFEDAGJI則程序的輸出為: A B C D E F G H I J
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 勞務(wù)分包合同在建筑行業(yè)的應(yīng)用
- 初中體育 健美操提高班第2次課教案
- 2024年二年級(jí)品生下冊(cè)《機(jī)智勇敢保安全》教案 山東版
- 2024年學(xué)年八年級(jí)語(yǔ)文上冊(cè) 第四單元 地球我們的家園 第15課《大樹(shù)和我們的生活》教案2 滬教版五四制
- 2023三年級(jí)數(shù)學(xué)上冊(cè) 七 慶元旦-時(shí)、分、秒的認(rèn)識(shí) 信息窗2 有關(guān)時(shí)間的計(jì)算第1課時(shí)教案 青島版六三制
- 2024-2025學(xué)年八年級(jí)語(yǔ)文下冊(cè) 第六單元 22《禮記》二則教案 新人教版
- 2024-2025學(xué)年高中數(shù)學(xué) 第三章 函數(shù)的概念與性質(zhì) 3.2.2 奇偶性教案 新人教A版必修第一冊(cè)
- 最高額保證合同(2篇)
- 租船合同模版(2篇)
- 運(yùn)輸項(xiàng)目合同(2篇)
- 2024《技術(shù)服務(wù)合同范本》
- 江蘇省徐州市2024-2025學(xué)年高三上學(xué)期11月期中抽測(cè)數(shù)學(xué)試題
- 《預(yù)防未成年人犯罪》課件(圖文)
- 業(yè)財(cái)融合背景下建筑企業(yè)財(cái)務(wù)管理轉(zhuǎn)型中的不足及建議
- 計(jì)算機(jī)專(zhuān)業(yè)職業(yè)生涯規(guī)劃書(shū)(14篇)
- GB/T 22838.5-2024卷煙和濾棒物理性能的測(cè)定第5部分:卷煙吸阻和濾棒壓降
- 評(píng)標(biāo)專(zhuān)家?guī)煜到y(tǒng)系統(tǒng)總體建設(shè)方案
- 學(xué)校學(xué)生食堂“三防”制度
- 數(shù)學(xué)-湖湘名校教育聯(lián)合體2024年下學(xué)期高二10月大聯(lián)考試題和答案
- 2024年農(nóng)村合作社管理制度范本(二篇)
- 職業(yè)技能競(jìng)賽-網(wǎng)絡(luò)與信息安全管理員理論題庫(kù)(附參考答案)
評(píng)論
0/150
提交評(píng)論