




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、C 語(yǔ)言程序設(shè)計(jì)楊學(xué)穎信息工程學(xué)院n 在前面章節(jié)中所用到的數(shù)據(jù)類(lèi)型都是簡(jiǎn)單類(lèi)型,每個(gè)變量只能取一個(gè)值。然而,在處理實(shí)際問(wèn)題時(shí),經(jīng)常需要處理大量成批的數(shù)據(jù),并且這些數(shù)據(jù)具有相同的類(lèi)型。針對(duì)這樣的問(wèn)題,引進(jìn)了數(shù)組這一數(shù)據(jù)類(lèi)型。 第第6 6章章 數(shù)組數(shù)組數(shù)組及數(shù)組元素的概念數(shù)組及數(shù)組元素的概念n由若干個(gè)類(lèi)型相同的相關(guān)數(shù)據(jù)按順序存儲(chǔ)在一起形成的一組同類(lèi)型有序由若干個(gè)類(lèi)型相同的相關(guān)數(shù)據(jù)按順序存儲(chǔ)在一起形成的一組同類(lèi)型有序數(shù)據(jù)的集合,稱(chēng)為數(shù)組數(shù)據(jù)的集合,稱(chēng)為數(shù)組。如果用一個(gè)統(tǒng)一的名稱(chēng)標(biāo)識(shí)這組數(shù)據(jù),那么,。如果用一個(gè)統(tǒng)一的名稱(chēng)標(biāo)識(shí)這組數(shù)據(jù),那么,這個(gè)名字就稱(chēng)為數(shù)組名,構(gòu)成數(shù)組的每一個(gè)數(shù)據(jù)項(xiàng)稱(chēng)為數(shù)組的元素,數(shù)
2、這個(gè)名字就稱(chēng)為數(shù)組名,構(gòu)成數(shù)組的每一個(gè)數(shù)據(jù)項(xiàng)稱(chēng)為數(shù)組的元素,數(shù)組元素不僅具有相同的數(shù)據(jù)類(lèi)型,而且組元素不僅具有相同的數(shù)據(jù)類(lèi)型,而且在內(nèi)存中將占用一段連續(xù)的存儲(chǔ)在內(nèi)存中將占用一段連續(xù)的存儲(chǔ)單元單元。每一個(gè)數(shù)組元素可通過(guò)數(shù)組名及其在數(shù)組中的位置。每一個(gè)數(shù)組元素可通過(guò)數(shù)組名及其在數(shù)組中的位置(叫下標(biāo)叫下標(biāo))來(lái)確來(lái)確定,即數(shù)組元素是用數(shù)組名后跟方括號(hào)定,即數(shù)組元素是用數(shù)組名后跟方括號(hào) 括起來(lái)的下標(biāo)來(lái)表示,例如,括起來(lái)的下標(biāo)來(lái)表示,例如,a5,name50,list515等。數(shù)組按下標(biāo)個(gè)數(shù)分類(lèi),有一維數(shù)組、二等。數(shù)組按下標(biāo)個(gè)數(shù)分類(lèi),有一維數(shù)組、二維數(shù)組維數(shù)組,以此類(lèi)推,二維數(shù)組以上的數(shù)組稱(chēng)為多維數(shù)組。,
3、以此類(lèi)推,二維數(shù)組以上的數(shù)組稱(chēng)為多維數(shù)組。n 根據(jù)數(shù)組元素類(lèi)型的不同,數(shù)組可分為根據(jù)數(shù)組元素類(lèi)型的不同,數(shù)組可分為數(shù)值數(shù)組數(shù)值數(shù)組,字符數(shù)組字符數(shù)組、指針數(shù)組指針數(shù)組、結(jié)構(gòu)體類(lèi)型數(shù)組結(jié)構(gòu)體類(lèi)型數(shù)組等多種類(lèi)型。數(shù)組同其他類(lèi)型的變量一樣,等多種類(lèi)型。數(shù)組同其他類(lèi)型的變量一樣,也遵循也遵循“先定義,后使用先定義,后使用”的原則。的原則。 6.1 一維數(shù)組一維數(shù)組 6.2 二維數(shù)組二維數(shù)組 6.3 字符數(shù)組字符數(shù)組 6.4 應(yīng)用舉例應(yīng)用舉例 第第6 6章章 數(shù)組數(shù)組6.1 數(shù)組說(shuō)明6.1.1 一維數(shù)組的定義6.1.2 一維數(shù)組引用6.1.3 一維數(shù)組的初始化6.1.4 一維數(shù)組應(yīng)用舉例(排序與查找)6
4、.1.1 一維數(shù)組的定義n數(shù)組由若干個(gè)相同數(shù)據(jù)類(lèi)型的變量按照一定的規(guī)則組成,其中每一個(gè)變量稱(chēng)為數(shù)組元素。數(shù)組元素用數(shù)組名和下標(biāo)來(lái)確定。 n若數(shù)組元素在數(shù)組中的位置可以只通過(guò)一個(gè)序號(hào)(即下標(biāo))確定,這樣的數(shù)組稱(chēng)為一維數(shù)組。n一維數(shù)組的定義格式如下: 類(lèi)型說(shuō)明符 數(shù)組名常量表達(dá)式; 例如: int a10; float score5; “類(lèi)型說(shuō)明符”:是數(shù)組元素的數(shù)據(jù)類(lèi)型。 “數(shù)組名”: 遵循C語(yǔ)言標(biāo)識(shí)符規(guī)則。 “常量表達(dá)式”:表示數(shù)組中有多少個(gè)元素,即數(shù)組的長(zhǎng)度。它可以是整型常量、整型常量表達(dá)式或符號(hào)常量。 以下數(shù)組定義是正確的:#define N 10float score1N, score2
5、N;int num10+N;char c26;以下數(shù)組定義是不正確的:int array(10); int n; float scoren; char str ; 數(shù)組在內(nèi)存的存放n數(shù)組下標(biāo)從0開(kāi)始。n一維數(shù)組的數(shù)組元素在內(nèi)存里按順序存放。n數(shù)組名代表數(shù)組的首地址,即score的值與score0 的地址值相同。 score0score1score2score3score491.534.567.572.084.0低地址低地址高地址高地址score數(shù)組數(shù)組6.1.2 數(shù)組引用 n數(shù)組必須先說(shuō)明,后引用(使用),在C語(yǔ)言中,只能逐個(gè)引用數(shù)組元素,不能一次引用數(shù)組中的全部元素。n數(shù)組元素的表示形式為
6、數(shù)組名下標(biāo)n下標(biāo)可以是整形常量或整形表達(dá)式。例如,b0=b3+b1-b2*2【例6.1】數(shù)組元素的引用。#include stdio.h void main()int i,a5; for(i=0;i=0;i-) /*對(duì)數(shù)組元素的輸出*/printf(%d,ai);運(yùn)行結(jié)果如下:43210說(shuō)明: 下標(biāo)從0開(kāi)始(下界為0),數(shù)組的最大下標(biāo)(上界)是數(shù)組長(zhǎng)度減1。 例如: int a10; scanf (%d,&a10); /* 下標(biāo)越界 */ C編譯系統(tǒng)不做越界檢查,如果引用的數(shù)組元素編譯系統(tǒng)不做越界檢查,如果引用的數(shù)組元素超出數(shù)組范圍會(huì)破壞其他變量的值。超出數(shù)組范圍會(huì)破壞其他變量的值。
7、是是引用引用數(shù)組元素?cái)?shù)組元素時(shí),時(shí),根據(jù)數(shù)組的根據(jù)數(shù)組的和和數(shù),計(jì)算出數(shù),計(jì)算出該元素的實(shí)際地址,該元素的實(shí)際地址,取出該地址的取出該地址的進(jìn)行操作。進(jìn)行操作。如引用如引用 score2:(1)計(jì)算計(jì)算 2000+2*4=2008(2)取出取出2008的內(nèi)容的內(nèi)容2000H2004H2008H200CH218CHscore0score1score2score3score491.534.567.572.084.0初始化:在定義數(shù)組時(shí)給數(shù)組元素賦初值。1在定義數(shù)組時(shí),對(duì)全部數(shù)組元素賦初值 例如:int a5=0,1,2,3,4;此時(shí)可以省略數(shù)組長(zhǎng)度,例如:int a =0,1,2,3,4;2在定義
8、數(shù)組時(shí),對(duì)部分?jǐn)?shù)組元素賦初值 例如:int a5=1,2,3;系統(tǒng)為其余元素賦 0 。3當(dāng)初值的個(gè)數(shù)多于數(shù)組元素的個(gè)數(shù)時(shí),編譯出錯(cuò) 例如: int a5=0,1,2,3,4,5; 6.1.3 數(shù)組的初始化6.1.4 數(shù)組應(yīng)用舉例#include stdio.hvoid main()int i,a10=1,2,3,4;for(i=0; i10; i+)printf(“a%d = %dn”,i,ai);執(zhí)行結(jié)果為:#includemain() int a10, s; a0=1; a1=2; a2=3; a3=4; a4=5; a5=6; a6=7; a7=8; a8=9; a9=10; s=a0+
9、a1+a2+a3 +a4+a5+a6 +a7 +a8+a9; printf(“a0+a1+a9=%d”,s);#includemain() int a10, i, s=0; for(i=0; i=9; i+) ai = i+1; for(i=0; i=9; i+) s = s+ ai; printf(“a0+a1+a9=%d”,s);【例6.2】利用輸入函數(shù)逐個(gè)輸入數(shù)組中的各個(gè)元素。#include stdio.hvoid main() int i,a5; /*定義一個(gè)整形變量i與一個(gè)一維數(shù)組*/ for (i=0; i5;i=i+1) /*數(shù)組的輸入與輸出*/ scanf(%d,&a
10、i); printf(%dn,ai); 6.1.46.1.4 數(shù)組應(yīng)用舉例數(shù)組應(yīng)用舉例【例例6.3】 讀入讀入10個(gè)整數(shù),然后輸出最大的數(shù)。個(gè)整數(shù),然后輸出最大的數(shù)。#include main() int i,max,a10; printf(input 10 numbers:n); for(i=0;i10;i+) scanf(%d,&ai); max=a0; for(i=1;imax) max=ai; printf(max=%dn,max);執(zhí)行結(jié)果為:執(zhí)行結(jié)果為:6.1.46.1.4 數(shù)組應(yīng)用舉例數(shù)組應(yīng)用舉例運(yùn)行結(jié)果為:運(yùn)行結(jié)果為:思考題:輸出最思考題:輸出最小的數(shù)?小的數(shù)?1.將最
11、小的數(shù)找將最小的數(shù)找出并放在數(shù)組的出并放在數(shù)組的第一個(gè)元素中。第一個(gè)元素中。e5-4.c2.將輸入的十個(gè)數(shù)按將輸入的十個(gè)數(shù)按照從小到大排序輸出。照從小到大排序輸出。 e5-5max.c e5-5.c6.1.4 數(shù)組的引用(排序與查找)1冒泡法排序 #include stdio.hvoid main() int a10;int i,j,t;printf(input 10 numbers:n);for(i=0;i10;i+) /*輸入數(shù)組元素值*/scanf(%d,&ai);printf(n);6.1.4 數(shù)組的引用(排序與查找)for(j=1;j=9;j+) /*相鄰二個(gè)數(shù)相比n-1次*
12、/for(i=0;iai+1) t=ai;ai=ai+1;ai+1=t;/*交換*/ printf(the sorted number:n); for(i=0;iaj+1#include#define N 10main() int aN,i,j,t; printf(input ten number:n); for(i=0;iN;i+) scanf(%d,&ai); printf(n); for(i=0;iN-1;i+) for(j=0;jaj+1) t=aj;aj=aj+1;aj+1=t; printf(the sorted number:n); for(i=0;iN;i+) prin
13、tf(%5d,ai);程序程序假假選擇法排序選擇法排序1 97 49 38 13 76 6513 49 38 97 76 65kj76kjjkjj139797 76 38 13 49 6549kjjjkj386597 76 65 13 49 38491397 76 65 49 13 3897 76 65 49 38 133813結(jié)果:結(jié)果:第第5輪:輪:第第4輪:輪:第第3輪:輪:第第2輪:輪:第第1輪:輪:#define N 10main() int i,j,k,t,aN; printf(input N numbers:n); for(i=0;iN;i+) scanf(“%d”,&a
14、i);/輸入N個(gè)數(shù) printf(n); for(i=0;iN-1;i+) /執(zhí)行N-1輪比較 k=i; for(j=i+1;jak) /遇到比當(dāng)前元 k=j; /素大的數(shù),記下k if(k!=i) t=ai;ai=ak;ak=t; printf(the sorted numbers:n); for(i=0;iN;i+) printf(“%3d”,ai); /輸出數(shù)組輸入10個(gè)數(shù)給a0 a9 i=0i由0到8共執(zhí)行9次循環(huán) k=i j=i+1 當(dāng)jak6.1.4 數(shù)組的引用(排序與查找)2折半查找法(只能對(duì)有序數(shù)列進(jìn)行查找)【例6.5】使用折半查找法在一批有序數(shù)列中查找給定的數(shù)x。算法分析:設(shè)
15、n個(gè)有序數(shù)(從小到大)存放在數(shù)組an中,要查找的數(shù)為x。用變量bot、top和mid分別表示查找數(shù)據(jù)下界、頂界和中間,mid=(top+bot) /2,折半查找的算法如下。(1) x=amid,則已找到退出循環(huán),否則進(jìn)行下面的判斷。(2) xamid,x必定落在mid+ltop的范圍之內(nèi),即bot=mid+l。(4)在確定了新的查找范圍后,重復(fù)進(jìn)行以上比較,直到找到或者bot=top。 6.1.4 數(shù)組的引用(排序與查找)#include stdio.h#define N 10 /*N代表數(shù)據(jù)的個(gè)數(shù)*/void main()int aN=1,4,7,13,16,19,28,36,49,60;
16、int mid,bot,top,x,find; printf(input the number you want find:n);scanf(%d,&x);printf(n);6.1.4 數(shù)組的引用(排序與查找) bot=0;top=N-1; /*給數(shù)組下界和上界賦初值*/find=0; /* find=0代表沒(méi)有找到*/while(bot=top & find=0)mid=(top+bot)/2;/*計(jì)算中間要比較的元素下標(biāo)*/if(x=amid) find=1;break; /*查找成功*/else if(xamid)top=mid-1; /*數(shù)據(jù)X在下半部分*/elseb
17、ot=mid+1; /*數(shù)據(jù)X在上半部分*/6.1.4 數(shù)組的引用(排序與查找)if(find=1) printf(the number is found the no.%d!n,mid);else printf(the number is not found!n); 6.1.4 數(shù)組的引用數(shù)組的引用例例6.5 用一維數(shù)組求斐波納契(用一維數(shù)組求斐波納契(Fibonacci)數(shù)列的前數(shù)列的前20項(xiàng)。項(xiàng)。 定義一個(gè)一維數(shù)組定義一個(gè)一維數(shù)組a20,則,則 a0=1,a1=1,a2=a0+a1,a3=a1+a2 ,a19=a17+a18。#include void main() long int f
18、20=1,1; /* 初始化斐波納契數(shù)列的初始化斐波納契數(shù)列的頭兩個(gè)數(shù)頭兩個(gè)數(shù) */ int j; for(j=2; j20; j+) /* 循環(huán)循環(huán)18次求斐波納契數(shù)列次求斐波納契數(shù)列的后的后18項(xiàng)項(xiàng) */ fj=fj-1+fj-2; /*新的斐波納契數(shù)列的一個(gè)數(shù)等新的斐波納契數(shù)列的一個(gè)數(shù)等于前兩個(gè)數(shù)之和于前兩個(gè)數(shù)之和*/ for(j=0; j20; j+) printf(“%15ld”,fj); if(j+1)%5=0) /* 每輸出每輸出5個(gè)斐波納契數(shù)換個(gè)斐波納契數(shù)換行行 */ printf(“n”); 程序運(yùn)行結(jié)果:程序運(yùn)行結(jié)果: 1 1 2 3 51 1 2 3 5 8 13 21
19、34 55 8 13 21 34 55 89 144 233 377 610 89 144 233 377 610 987 1597 2584 4181 6765 987 1597 2584 4181 6765 程序說(shuō)明:用數(shù)組的初始化的方法,將斐波納契數(shù)程序說(shuō)明:用數(shù)組的初始化的方法,將斐波納契數(shù)列的頭兩個(gè)數(shù)列的頭兩個(gè)數(shù)1 1、1 1分別存入到數(shù)組分別存入到數(shù)組a0a0、a1a1,從第,從第三項(xiàng)開(kāi)始,使用循環(huán)語(yǔ)句將各項(xiàng)存入到數(shù)組元素中。三項(xiàng)開(kāi)始,使用循環(huán)語(yǔ)句將各項(xiàng)存入到數(shù)組元素中。最后賦值結(jié)束后,一次性輸出數(shù)組元素的值,且每一最后賦值結(jié)束后,一次性輸出數(shù)組元素的值,且每一行輸出行輸出5 5個(gè)
20、斐波納契數(shù)。個(gè)斐波納契數(shù)。一維數(shù)組題型總結(jié):4、隨機(jī)給一維數(shù)組賦值,輸出最大或者最小幾個(gè)元素的平均值。1、一維數(shù)組排序(冒泡或選擇)。2、統(tǒng)計(jì)一維數(shù)組中滿(mǎn)足條件的元素個(gè)數(shù)。3、在已排序的數(shù)組中插入一個(gè)數(shù)據(jù),保證數(shù)組的有序性。本節(jié)重點(diǎn)n數(shù)組的定義與引用n一維數(shù)組與二維數(shù)組的定義與應(yīng)用n編程應(yīng)用示例(冒泡排序、斐波納納契)n數(shù)組的存儲(chǔ)表示n數(shù)組的初始化6.26.2二維數(shù)組二維數(shù)組二維數(shù)組中的每個(gè)元素都有兩個(gè)下標(biāo),它的一般定義形式為: 類(lèi)型 數(shù)組名整形常量表達(dá)式1整形常量表達(dá)式2二維數(shù)組元素的表示形式為:例如:float a34;定義了一個(gè)名為a的34二維數(shù)組(3行4列),該數(shù)組共有12個(gè)元素,每個(gè)
21、元素都是一個(gè)float型變量。數(shù)組名下標(biāo)1下標(biāo)2 例如:a23、a10 習(xí)慣上將第一維下標(biāo)稱(chēng)為行下標(biāo),第二習(xí)慣上將第一維下標(biāo)稱(chēng)為行下標(biāo),第二維下標(biāo)稱(chēng)為列下標(biāo)。每維下標(biāo)均從維下標(biāo)稱(chēng)為列下標(biāo)。每維下標(biāo)均從0開(kāi)始。開(kāi)始。因此,上述二維數(shù)組因此,上述二維數(shù)組a的的12個(gè)元素按行個(gè)元素按行和列的排列如下:和列的排列如下:a00 a01 a02 a03a10 a11 a12 a13a20 a21 a22 a236. 2 .1 二維數(shù)組二維數(shù)組6.2.2 6.2.2 多維數(shù)組多維數(shù)組 多于二維的數(shù)組稱(chēng)為多維數(shù)組。多維數(shù)組的定義及數(shù)組元素的引用類(lèi)似于二維數(shù)組,只是需要相應(yīng)維數(shù)的下標(biāo)。 例如:int cube5
22、64; /* cube是int型三維數(shù)組 */float data3492; /* data是float型四維數(shù)組 */cube013=20;data1051=0.0;6.2.3 6.2.3 數(shù)組的存儲(chǔ)表示數(shù)組的存儲(chǔ)表示 為了便于通過(guò)下標(biāo)來(lái)訪(fǎng)問(wèn)數(shù)組元素,C語(yǔ)言為每個(gè)數(shù)組都分配一塊連續(xù)的存儲(chǔ)空間,而且這塊存儲(chǔ)空間的大小足以存放該數(shù)組的所有元素。 對(duì)C語(yǔ)言而言,數(shù)組元素相對(duì)于數(shù)組首地址的存放次序滿(mǎn)足如下三個(gè)條件: (1)(1)對(duì)于一維數(shù)組,元素按照下標(biāo)從小到大依次存放。這樣,對(duì)對(duì)于一維數(shù)組,元素按照下標(biāo)從小到大依次存放。這樣,對(duì)于一維數(shù)組于一維數(shù)組a a而言,數(shù)組中任一元素而言,數(shù)組中任一元素ai
23、ai的地址可表示為:的地址可表示為:ai的地址=a的首地址+i*sizeof(數(shù)組元素類(lèi)型) 6.2.3 6.2.3 數(shù)組的存儲(chǔ)表示數(shù)組的存儲(chǔ)表示(2) (2) 對(duì)于二維數(shù)組,元素是按行存放的。設(shè)數(shù)組定義為:對(duì)于二維數(shù)組,元素是按行存放的。設(shè)數(shù)組定義為: int a45int a45,則,則a a中各元素的存放順序?yàn)椋褐懈髟氐拇娣彭樞驗(yàn)椋?由此推出二維數(shù)組a中任一元素aij的地址可表示為: aijaij的地址的地址= a= a的首地址的首地址+(i+(i* *5+j)5+j)* * sizeof( sizeof(數(shù)組元素類(lèi)型數(shù)組元素類(lèi)型) )6.2.3 6.2.3 數(shù)組的存儲(chǔ)表示數(shù)組的存儲(chǔ)表
24、示(3) (3) 對(duì)于多維數(shù)組,元素則是廣義按行存放的,即第一維的下標(biāo)變對(duì)于多維數(shù)組,元素則是廣義按行存放的,即第一維的下標(biāo)變化最慢,第二維次之,化最慢,第二維次之,最右邊一維的下標(biāo)變化最快。設(shè)數(shù)組定,最右邊一維的下標(biāo)變化最快。設(shè)數(shù)組定義為義為int a345int a345,則,則a a中各元素的存放順序?yàn)椋褐懈髟氐拇娣彭樞驗(yàn)椋杭磳?duì)上述三維數(shù)組即對(duì)上述三維數(shù)組a而言,而言,a中任一元素中任一元素aijk的地址可表示為:的地址可表示為:aijk的地址的地址= a的首地址的首地址+(i*4*5+j*5+k)* sizeof(數(shù)組元素類(lèi)型數(shù)組元素類(lèi)型)6.2.4 6.2.4 二維數(shù)組初始化二維數(shù)
25、組初始化與一維數(shù)組的初始化一樣,二維數(shù)組的初始化也是在定義數(shù)組時(shí)進(jìn)行,只不過(guò)在形式上略有不同而已。對(duì)二維數(shù)組的初始化可按下面兩種方式來(lái)進(jìn)行:(1) (1) 按行分段賦初值。按行分段賦初值。例如:int a23=1,2,3,4,5,6 (2) (2) 將二維數(shù)組看作一維數(shù)組,并按一維數(shù)組的方式對(duì)其初將二維數(shù)組看作一維數(shù)組,并按一維數(shù)組的方式對(duì)其初 始化始化。例如: int a23=1,2,3,4,5,6int a23=1,2,3,4,5,6 與一維數(shù)組的初始化類(lèi)似的是,C語(yǔ)言對(duì)二維數(shù)組的初始化也有下面幾點(diǎn)規(guī)定:(1) (1) 可以只對(duì)部分元素賦初值,未賦初值的元素自動(dòng)取零值??梢灾粚?duì)部分元素賦初
26、值,未賦初值的元素自動(dòng)取零值。 (2) (2) 如對(duì)全部元素賦初值,則第一維的長(zhǎng)度可以不給出。如對(duì)全部元素賦初值,則第一維的長(zhǎng)度可以不給出。 C語(yǔ)言程序設(shè)計(jì) 第六章數(shù)組int a33=1,2,3;int a 33=0,1,0,0,2,3;例如:例如:int a23=1,2,3,4,5,6;可以寫(xiě)為:可以寫(xiě)為:int a 3=1,2,3,4,5,6;#include stdio.hvoid main()int j,k,a34=1,2,3,4,4,5,6,7,7,8,9,2;for(j=0; j3; j+) for(k=0; k4; k+) printf(a%d%d = %dn,j,k,ajk);
27、執(zhí)行結(jié)果為:執(zhí)行結(jié)果為:【例6.6】 讀入一個(gè)讀入一個(gè)44的整型矩陣,然后將其轉(zhuǎn)置并輸出。的整型矩陣,然后將其轉(zhuǎn)置并輸出。#include stdio.hvoid main()int a44,t,i,j;printf(Input 4*4 real numbers:n);for(i=0; i4; i+)for(j=0; j4; j+)scanf(%d,&aij);for(i=0; i4; i+)for(j=i+1; j4; j+) /* 交換元素交換元素aij和和aji的值的值 */ t=aij aij=aji;aji=t;printf(The result is:n);for(i=0;
28、 i4; i+)for(j=0; j4; j+) printf(%d ,aij); /* 輸出第輸出第i行行 */putchar(n);6. 3 字符數(shù)組字符數(shù)組6.3.1 字符數(shù)組的定義字符數(shù)組的定義 一維字符數(shù)組的定義格式如下:一維字符數(shù)組的定義格式如下: 字符類(lèi)型說(shuō)明符字符類(lèi)型說(shuō)明符 數(shù)組名數(shù)組名1常量表達(dá)式常量表達(dá)式1, 數(shù)組名數(shù)組名2常量表達(dá)式常量表達(dá)式2,; 例如: char c15,c210; 該語(yǔ)句定義了一個(gè)數(shù)組名為該語(yǔ)句定義了一個(gè)數(shù)組名為c1、一個(gè)數(shù)組名為、一個(gè)數(shù)組名為c2的一維字符數(shù)組。的一維字符數(shù)組。 例如例如:c10=C c10=h c12=i c13=n c14=a
29、字符數(shù)組在內(nèi)存中的存儲(chǔ)形式如圖字符數(shù)組在內(nèi)存中的存儲(chǔ)形式如圖6-5所示,以上述的數(shù)組所示,以上述的數(shù)組c1為例,假為例,假設(shè)內(nèi)存起始地址是設(shè)內(nèi)存起始地址是2000。這里,一個(gè)字符元素占。這里,一個(gè)字符元素占1個(gè)字節(jié)。個(gè)字節(jié)。 6. 字符數(shù)組字符數(shù)組 內(nèi)存地址 2000 2001 內(nèi)存地址 2002 2003 2004 圖6-5 字符數(shù)組在內(nèi)存中的存儲(chǔ)形式 c10=Cc11=hc12=ic13=n c14=a 6.3.1 字符數(shù)組的定義字符數(shù)組的定義6. 字符數(shù)組字符數(shù)組6.3.1 字符數(shù)組的定義字符數(shù)組的定義二維字符數(shù)組的定義格式如下:二維字符數(shù)組的定義格式如下: 字符類(lèi)型說(shuō)明符字符類(lèi)型說(shuō)明符
30、 數(shù)組名數(shù)組名 常量表達(dá)式常量表達(dá)式11常量表達(dá)式常量表達(dá)式2,2,; ; char c55;char c55;該語(yǔ)句定義了一個(gè)數(shù)組名為該語(yǔ)句定義了一個(gè)數(shù)組名為c c的二維字符數(shù)組。數(shù)組的二維字符數(shù)組。數(shù)組c c包含包含2525個(gè)數(shù)個(gè)數(shù)組元素,每個(gè)數(shù)組元素存儲(chǔ)一個(gè)字符。組元素,每個(gè)數(shù)組元素存儲(chǔ)一個(gè)字符。 二維字符數(shù)組可以用來(lái)表示字符串?dāng)?shù)組,即可看做由字符二維字符數(shù)組可以用來(lái)表示字符串?dāng)?shù)組,即可看做由字符串作于元素構(gòu)成的一維數(shù)組。串作于元素構(gòu)成的一維數(shù)組。6. 字符數(shù)組字符數(shù)組6.3 6.3 字符字符數(shù)組數(shù)組6.3.1 6.3.1 字符數(shù)組字符數(shù)組的定義的定義考慮下面的定義:char s510c
31、har s510; ; 首先,s是一個(gè)二維字符數(shù)組,共有5*10=50個(gè)元素,每個(gè)元素又相當(dāng)于一個(gè)字符變量。s同時(shí)又可看作是一個(gè)“一維數(shù)組”,該一維數(shù)組有5個(gè)數(shù)組元素s0s4,每個(gè)元素又是一個(gè)長(zhǎng)度為10的一維字符數(shù)組,或每個(gè)元素是一個(gè)長(zhǎng)度小于等于9的字符串變量。 C語(yǔ)言程序設(shè)計(jì) 第五章數(shù)組6.3.2 字符數(shù)組的引用與初始化字符數(shù)組的引用與初始化 1. 字符數(shù)組的引用格式字符數(shù)組的引用格式 一維字符數(shù)組的引用格式:數(shù)組名下標(biāo) 二維字符數(shù)組的引用格式:數(shù)組名下標(biāo)1下標(biāo)2 2. 字符數(shù)組的初始化字符數(shù)組的初始化 字符數(shù)組的初始化主要有以下幾種形式: 1)逐個(gè)為字符數(shù)組的各數(shù)組元素賦初值逐個(gè)為字符數(shù)組
32、的各數(shù)組元素賦初值。即用字符常量對(duì)字符數(shù)組進(jìn)行初始用字符常量對(duì)字符數(shù)組進(jìn)行初始化?;?。例如: char ch7= a, b, c,d, e, f; 相當(dāng)于: ch0= a; ch1= b; ch2= c; ch3= d; ch4= e; ch5= f; 數(shù)組元素?cái)?shù)組元素ch6未賦值,默認(rèn)是未賦值,默認(rèn)是0,即,即ASCII碼為碼為0的字符的字符0 2)用字符串對(duì)字符數(shù)組初始化用字符串對(duì)字符數(shù)組初始化。例如: char ch7=abcdef; char ch7= abcdef; char ch7=a, b, c, d, e, f, 0; 上述三種形式等價(jià)。6. 字符數(shù)組字符數(shù)組6.3.2 字符數(shù)
33、組的引用與初始化字符數(shù)組的引用與初始化可以省略數(shù)組元素的個(gè)數(shù),通過(guò)初值來(lái)確定??梢允÷詳?shù)組元素的個(gè)數(shù),通過(guò)初值來(lái)確定。例如: char ch =a, b, c, d, e, f, 0;等價(jià)于char ch7=a, b, c, d, e, f, 0;注意字符串賦初值與字符常量賦初值的區(qū)別:注意字符串賦初值與字符常量賦初值的區(qū)別:例如:char str =“program”; 該方式賦予數(shù)組8個(gè)字符, 最后一個(gè)為“0”,而char str =p,r,o,g,r,a,m; 該方式賦予數(shù)組7個(gè)字符 3. 字符數(shù)組的引用與初始化實(shí)例 【例6. 4】通過(guò)鍵盤(pán)給一個(gè)2*3的字符數(shù)組輸入數(shù)據(jù),并且輸出該字符數(shù)
34、組。 分析分析:因?yàn)轭}中要求的字符數(shù)組是二維的,所以需要使用雙重循環(huán)語(yǔ)句控制字符的輸入和輸出。程序如下: 6. 字符數(shù)組字符數(shù)組6.3.2 字符數(shù)組的引用與初始化字符數(shù)組的引用與初始化 運(yùn)行程序后輸入:運(yùn)行程序后輸入: abcdef 輸出結(jié)果如下:輸出結(jié)果如下: Output the array: a b c d e f6. 字符數(shù)組字符數(shù)組 #include void main( ) int i,j; char ch23; printf(Please input data,press enter to end:n); for(i=0;i2;i+) for(j=0;j3;j+) scanf(%
35、c,&chij); printf(Output the array:n); for(i=0;i2;i+) for(j=0;j3;j+) printf(%5c,chij); printf(n); 6.3 6.3 字符數(shù)組字符數(shù)組6.3.3 6.3.3 字符串變量的表示字符串變量的表示在C語(yǔ)言中,沒(méi)有專(zhuān)門(mén)的字符串變量類(lèi)型,不過(guò)可用一個(gè)一維一維字符數(shù)組來(lái)表示一個(gè)字符串變量字符數(shù)組來(lái)表示一個(gè)字符串變量。在實(shí)際應(yīng)用時(shí),從該字符數(shù)組的首地址開(kāi)始,由左至右依次存放字符串中的字符,并在最后一個(gè)字符之后再額外存放一個(gè)0字符作為該字符串的結(jié)束標(biāo)志。0發(fā)音為“null”,不是0字符0,而是ASCII值為0的
36、字符。因此,用一維字符數(shù)組來(lái)表示字符串變量,該數(shù)組的長(zhǎng)度要比想表示的字符串變量的最大取值長(zhǎng)度多1。例如例如Language在內(nèi)存中保存的情況如圖在內(nèi)存中保存的情況如圖6-6所示:所示: 圖圖6-6 字符串字符串Language在內(nèi)存中保存的情況在內(nèi)存中保存的情況當(dāng)字符數(shù)組用來(lái)存儲(chǔ)字符串時(shí),字符數(shù)組的長(zhǎng)度比字符串長(zhǎng)度當(dāng)字符數(shù)組用來(lái)存儲(chǔ)字符串時(shí),字符數(shù)組的長(zhǎng)度比字符串長(zhǎng)度大大1.C語(yǔ)言程序設(shè)計(jì) 第六章數(shù)組L a n g u a g e 0 結(jié)束標(biāo)志結(jié)束標(biāo)志6.3.4 字符串的輸入和輸出 字符數(shù)組和字符串都可以以單個(gè)字符的形式逐個(gè)輸入和輸出,也可以以整體的形式輸入和輸出。其方式主要有兩種: 1. 用
37、格式說(shuō)明符來(lái)控制字符數(shù)組和字符串的輸入和輸出 2. 用字符串輸入和輸出函數(shù)實(shí)現(xiàn)字符數(shù)組和字符串的輸入和輸出 1 1、逐個(gè)字符輸入、逐個(gè)字符輸入/ /輸出輸出 (1)在標(biāo)準(zhǔn)輸入/輸出函數(shù)printf和scanf中使用%c格式描述符 (2)使用getchar和putchar函數(shù)。6.3.4 字符串的輸入和輸出nstr為字符數(shù)組名,代表該數(shù)組的起始地址。n輸入時(shí),系統(tǒng)自動(dòng)在每個(gè)字符串后加入結(jié)束符0。n若同時(shí)輸入多個(gè)字符串,則以空格或回車(chē)符分隔。6.3.4 字符串的輸入和輸出How0are0you06.3.4 字符串的輸入和輸出注意不同: 對(duì)于“%s”格式符和調(diào)用scanf函數(shù)時(shí),空格和換行符都作為字
38、符串的分隔符而不能讀入。系統(tǒng)將自動(dòng)地在字符串最后加上結(jié)束符0作為輸出結(jié)束標(biāo)志。也就是說(shuō)只截取空格前的部分作為字符串付給字符數(shù)組。若需實(shí)現(xiàn)輸入含有空格的字符串賦給字符數(shù)組,可使用gets( )函數(shù)。在使用gets( )函數(shù)和puts( )函數(shù)時(shí),一次只能輸入或輸出一個(gè)字符串,對(duì)于對(duì)于“%s”格式符,回車(chē)和空格都是字符串輸入結(jié)束標(biāo)志;格式符,回車(chē)和空格都是字符串輸入結(jié)束標(biāo)志;對(duì)于對(duì)于“%c”格式符和格式符和gets ( ),回車(chē)是字符串輸入結(jié)束標(biāo)志,空格是字符串一,回車(chē)是字符串輸入結(jié)束標(biāo)志,空格是字符串一部分;部分; puts( )函數(shù)輸出之后換行,而函數(shù)輸出之后換行,而printf( )輸出之后
39、不換行。輸出之后不換行。6.3 6.3 字符數(shù)組字符數(shù)組6.3.5 6.3.5 常用字符串處理函數(shù)常用字符串處理函數(shù)1. puts(1. puts(字符串字符串) ) (需要 #include )將給定字符串輸出到標(biāo)準(zhǔn)輸出設(shè)備上。在輸出時(shí)將字符串結(jié)束標(biāo)志0轉(zhuǎn)換成n,即輸出完字符串后換行。 2. gets(2. gets(字符串變量字符串變量) ) (需要 #include ) 從標(biāo)準(zhǔn)輸入設(shè)備(通常為鍵盤(pán))上讀入一個(gè)字符串(以回車(chē)作(以回車(chē)作為輸入結(jié)束標(biāo)志)為輸入結(jié)束標(biāo)志)到字符串變量所對(duì)應(yīng)的字符數(shù)組中,并且返回一個(gè)函數(shù)值,它是字符串變量所對(duì)應(yīng)的字符數(shù)組的起始地址。C語(yǔ)言程序設(shè)計(jì) 第六章數(shù)組 #
40、include void main( ) char ch10; for(i=0;i10;i+) scanf(%c,&chi); puts(ch); #include void main( ) int i; char ch10; gets(ch); for(i=0;i10;i+) printf(%c,chi); 6.3.5 字符串處理函數(shù)字符串處理函數(shù) 3. 3.字符串長(zhǎng)度函數(shù)字符串長(zhǎng)度函數(shù)strlen( )strlen( ) ( (需要#include ) 格式:strlen (字符數(shù)組名/字符串) 功能:測(cè)量字符數(shù)組/字符串的實(shí)際長(zhǎng)度(不含字符串結(jié)束標(biāo)志0)并作為 函數(shù)值返回。6.
41、字符數(shù)組字符數(shù)組 #include #include void main( ) char ch10= 12345; printf(%dn,strlen(ch); printf(%d,strlen(12345); 注意:此時(shí)運(yùn)行程序輸出的結(jié)果都是注意:此時(shí)運(yùn)行程序輸出的結(jié)果都是5,尤其應(yīng)注意,尤其應(yīng)注意strlen(ch)的輸出的輸出結(jié)果也是結(jié)果也是5,而不是,而不是6,也不是,也不是10。6.3 6.3 字符數(shù)組字符數(shù)組4. strcpy(4. strcpy(字符串變量字符串變量, ,字符串字符串)()(需要#include ) 把字符串復(fù)制到字符串變量所對(duì)應(yīng)的字符數(shù)組中,通常用于對(duì)字符串變量
42、賦值。5. strcat(5. strcat(字符串變量字符串變量, ,字符串字符串) ) (需要 #include ) 連接兩個(gè)字符串,把字符串連接到字符串變量中的當(dāng)前串的后面,結(jié)果放在字符串變量所對(duì)應(yīng)的字符數(shù)組中。函數(shù)調(diào)用后返回一個(gè)值,它是字符串變量所對(duì)應(yīng)的字符數(shù)組的起始地址。 C語(yǔ)言程序設(shè)計(jì) 第五章數(shù)組6.3.5 字符串處理函數(shù)字符串處理函數(shù) 4.字符串復(fù)制函數(shù)strcpy( ) ( (需要#include ) 格式:strcpy (字符數(shù)組名1,字符數(shù)組名2) strcpy (字符數(shù)組名,字符串) 功能:將字符數(shù)組2/字符串的內(nèi)容復(fù)制給字符數(shù)組1中。其返回值是字符數(shù)組 1的首地址。 注意:字符數(shù)組注意:字符數(shù)組1的長(zhǎng)度也應(yīng)該足夠長(zhǎng),才能容納復(fù)制后的全部?jī)?nèi)容。的長(zhǎng)度也應(yīng)該足夠長(zhǎng),才能容納復(fù)制后的全部?jī)?nèi)容。
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年電力測(cè)量?jī)x表項(xiàng)目發(fā)展計(jì)劃
- 2025年鋯合金管材項(xiàng)目建議書(shū)
- 法式烘焙知識(shí)培訓(xùn)課件
- 2025年氦氖激光血管內(nèi)照射治療儀項(xiàng)目發(fā)展計(jì)劃
- 管道搶修施工方案
- 企管科工作總結(jié)
- 管道支架模板施工方案
- 紹興泳池加固施工方案
- 露天煤礦開(kāi)采施工方案
- 2025年力與變形檢測(cè)儀合作協(xié)議書(shū)
- 2022年安全生產(chǎn)費(fèi)用投入臺(tái)賬(模版報(bào)表)
- 供水設(shè)施水池基礎(chǔ)土石方開(kāi)挖施工組織方案
- 《魚(yú)類(lèi)的骨骼系統(tǒng)》
- 車(chē)輛工程畢業(yè)設(shè)計(jì)(論文)-電動(dòng)叉車(chē)設(shè)計(jì)
- 《建筑識(shí)圖》匯總題庫(kù)(學(xué)生用)
- 印刷制品Q(chēng)C工程圖
- 傳感器及檢測(cè)技術(shù)教案
- 手工焊錫知識(shí)
- 《采油工程》講義
- 法蘭蝶閥螺栓配用表正式版
- 電子舌技術(shù)在普洱茶品質(zhì)識(shí)別中應(yīng)用的研究
評(píng)論
0/150
提交評(píng)論