程序設(shè)計(jì)基礎(chǔ)(C語言)教程 課件 6數(shù)組_第1頁
程序設(shè)計(jì)基礎(chǔ)(C語言)教程 課件 6數(shù)組_第2頁
程序設(shè)計(jì)基礎(chǔ)(C語言)教程 課件 6數(shù)組_第3頁
程序設(shè)計(jì)基礎(chǔ)(C語言)教程 課件 6數(shù)組_第4頁
程序設(shè)計(jì)基礎(chǔ)(C語言)教程 課件 6數(shù)組_第5頁
已閱讀5頁,還剩52頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

6數(shù)組數(shù)組是通過指定數(shù)組的元素類型、數(shù)組的維數(shù)及數(shù)組每個(gè)維度的上限和下限來定義的,及一個(gè)數(shù)組的定義需要包含以下幾個(gè)要素:(1)元素類型(2)數(shù)組的維數(shù)(3)每個(gè)維數(shù)的上下限數(shù)組可分為一維數(shù)組和多維數(shù)組等。1.一維數(shù)組的定義和使用1.1一維數(shù)組定義類型說明符數(shù)組名[常量表達(dá)式]例如:intsum[10];【說明】:(1)類型說明符:任一種基本數(shù)據(jù)類型或構(gòu)造數(shù)據(jù)類型。(2)數(shù)組名:用戶定義的標(biāo)識符,它的命名規(guī)則遵循標(biāo)識符的規(guī)則,如例子中的sum就是定義的數(shù)組的數(shù)組名。(3)常量表達(dá)式:表示數(shù)據(jù)元素的個(gè)數(shù),也稱為數(shù)組的長度。如例子中的10表示數(shù)組sum包含10個(gè)元素。在C語言中不允許對數(shù)組進(jìn)行動(dòng)態(tài)定義,數(shù)組的大小不會(huì)隨著程序運(yùn)行中的變化而改變。(4)在定義數(shù)組時(shí),需要指定數(shù)組中元素的個(gè)數(shù),方括號中的常量表達(dá)式用來表示元素的個(gè)數(shù),即數(shù)組長度。例如,指定a[10],表示a數(shù)組有10個(gè)元素,注意,下標(biāo)從0開始的,這10個(gè)元素是:a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]。請?zhí)貏e注意,按上面的定義,不存在數(shù)組元素a[10]。(5)數(shù)組的類型實(shí)際上是指數(shù)組元素的取值類型。對于同一個(gè)數(shù)組,其所有元素的數(shù)據(jù)類型都是相同的。(6)允許在同一個(gè)類型說明中,說明多個(gè)數(shù)組和多個(gè)變量。例如:inta,b,c[4];1.2一維數(shù)組的存儲(chǔ)結(jié)構(gòu)例如,定義數(shù)組a如下:inta[5];則數(shù)組a的存儲(chǔ)示意圖如圖所示:a[0]a[1]a[2]a[3]a[4]

空閑空間空閑空間分配的連續(xù)空間數(shù)組元素地址=數(shù)組起始地址+元素下標(biāo)×sizeof(數(shù)組類型)假設(shè)數(shù)組a的起始地址為1000,在VC環(huán)境下,在則元素a[3]的地址為1000+3×4=1012。1.3一維數(shù)組元素的引用數(shù)組元素是組成數(shù)組的基本單元,引用之前必須先定義。數(shù)組元素的一般形式為:

數(shù)組名[下標(biāo)];下標(biāo)是數(shù)組元素在整個(gè)數(shù)組中的順序號,可以是整型常量或整型表達(dá)式。下標(biāo)的取值范圍是從0到“數(shù)組元素個(gè)數(shù)”減1,例如:inta[5];則說明數(shù)組a共有5個(gè)元素,分別表示為a[0],a[1],a[2],a[3],a[4]。注意:a[5]不是數(shù)組a的元素。下面有關(guān)數(shù)組元素的操作都是合法的數(shù)組元素引用。a[0]=1;a[1]=a[0]+3;a[1]=a[2*3];a[‘c’-‘a(chǎn)’]=7;scanf(“%d”,&a[3]);printf(“%d”,a[4]);【例6-1】將10個(gè)數(shù)1、3、5、6、7、34、67、22、56、76存于數(shù)組中,求出這10個(gè)數(shù)的平均數(shù),并將結(jié)果輸出至屏幕。

[分析]:本例中給出的10個(gè)數(shù)都為整型數(shù),可用大小為10的整型數(shù)組存放這10個(gè)數(shù)。定義一個(gè)變量來計(jì)算其總和;另外定義一個(gè)變量來計(jì)算平均值,最后輸出該變量,該變量即為這10個(gè)數(shù)的平均值。

[N-S流程圖]:(見圖6-2):

定義數(shù)組x并賦初值。定義變量i,sum定義變量aver

for(i=0;i<5;i++)sum=sum+x[i]; aver=sum/10.0;printf(“zheaverageis%f\n”,aver);

#include<stdio.h>/*包含stdio.h頭文件*/voidmain(){ intx[10]={1,3,5,6,7,34,67,22,56,76};/*定義一個(gè)整型數(shù)組x,并對其進(jìn)行初始化*/inti,sum=0; /*定義整型變量i和sum,sum賦初值0*/floataver; for(i=0;i<10;i++){sum=sum+x[i]; /*計(jì)算x數(shù)組中每個(gè)元素的累加和*/}aver=sum/10.0; /*求10個(gè)數(shù)的平均數(shù)*/printf(“zheaverageis%f\n”,aver);}運(yùn)行結(jié)果:theaverageis27.7000001.4一維數(shù)組的初始化

初始化的一般形式為:

類型說明符數(shù)組名[常量表達(dá)式]={常量表達(dá)式1,常量表達(dá)式1┅常量表達(dá)式n};【說明】:在{}中的各數(shù)據(jù)值即為各元素的初值,各值之間用逗號間隔。各常量表達(dá)式中不能出現(xiàn)變量。例如:inta[4]={1,2,3,4};相當(dāng)于a[0]=1;a[1]=2;a[2]=3;a[3]=4;C語言對數(shù)組的初始賦值還有以下幾點(diǎn)規(guī)定:<1>可以只給部分元素賦初值。例如:inta[10]={1,2,3,4};表示只給a[0]~a[3]這四個(gè)元素賦值,而后的元素值為0。<2>只能給元素逐個(gè)賦值,不能給數(shù)組整體賦值。例如給十個(gè)元素全部賦1值,只能寫為: inta[10]={1,1,1,1,1,1,1,1,1,1};而不能寫為:inta[10]=1;<3>如給全部元素賦值,則在數(shù)組說明中,可以不給出數(shù)組元素的個(gè)數(shù)。例如:inta[5]={1,2,3,4,5};可寫為:inta[]={1,2,3,4,5};<4>當(dāng)數(shù)組指定的元素個(gè)數(shù)少于初始化值的個(gè)數(shù)時(shí),作為語法錯(cuò)誤處理。例如:inta[4]={1,2,3,4,5};是不合法的,因?yàn)閿?shù)組a只能有4個(gè)元素?!纠?-2】對定義的數(shù)組變量進(jìn)行初始化操作,然后隔位進(jìn)行輸出。[分析]:在程序中,定義一個(gè)數(shù)組變量s,并且對其進(jìn)行初始化賦值。使用for循環(huán)輸出數(shù)組中的元素,在循環(huán)中,控制循環(huán)變量index使其每次增加2,這樣根據(jù)下標(biāo)進(jìn)行輸出時(shí)就會(huì)得到隔一個(gè)元素輸出的結(jié)果了。[N-S流程圖](見圖6-3):

ints[6]={0,1,2,3,4,5};

for(index=0;index<6;index+=2) printf("%d\n",s[index]);

intindex; C源程序:(文件名:li6_2.c)#include<stdio.h>voidmain(){intindex; /*定義循環(huán)控制變量*/ints[6]={0,1,2,3,4,5};/*對數(shù)組中的元素賦值*/for(index=0;index<6;index+=2) /*隔位輸出數(shù)組中的元素*/{printf("%d\n",s[index]);}}運(yùn)行結(jié)果:0242.二維數(shù)組的定義和使用2.1二維數(shù)組的定義一般形式:

存儲(chǔ)類別類型說明符數(shù)組名[常量表達(dá)式1][常量表達(dá)式2];【說明】:(1)類型說明符是任一種基本數(shù)據(jù)類型或構(gòu)造數(shù)據(jù)類型。(2)數(shù)組名是用戶定義的數(shù)組標(biāo)識符。(3)方括號中的常量表達(dá)式表示數(shù)據(jù)元素的個(gè)數(shù),也稱為數(shù)組的長度。(4)常量表達(dá)式1表示第一維下標(biāo)的長度,常量表達(dá)式2表示第二維下標(biāo)的長度。例如:staticinta[2][3];charb[4][3];以上定義了一個(gè)靜態(tài)型的整型二維數(shù)組a,包含的元素個(gè)數(shù)為2*3=6,字符型二維數(shù)組b的元素個(gè)數(shù)為4*3=12。2.2二維數(shù)組元素的引用二維數(shù)組的元素也稱為雙下標(biāo)變量,引用的時(shí)候必須有雙下標(biāo)。其表示的一般形式為:數(shù)組名[下標(biāo)1][下標(biāo)2];【說明】:下標(biāo)應(yīng)為整型常量或整型表達(dá)式。例如:a[3][4]、b[i][j]、c[i+3][j*2]等形式都是被允許的。下標(biāo)變量和數(shù)組說明在形式中有些相似,但這兩者具有完全不同的含義。數(shù)組說明的方括號中給出的是某一維的長度,即可取下標(biāo)的最大值;而數(shù)組元素中的下標(biāo)是該元素在數(shù)組中的位置標(biāo)識。前者只能是常量,后者可以是常量,變量或表達(dá)式。引用二維數(shù)組元素與引用一維數(shù)組元素、普通基本型變量的方法一樣,在使用中只能逐個(gè)引用數(shù)組元素而不能一次引用整個(gè)數(shù)組?!咀⒁狻浚?1)數(shù)組元素可以出現(xiàn)在表達(dá)式中,也可以被賦值;例如:b[1][1]=a[2][3]-4;(2)下標(biāo)可以是整型表達(dá)式;例如a[2*2-1][2]。但不要寫成a[2,3],a[2*2-1,2]形式,這是錯(cuò)誤的。(3)在使用數(shù)組元素時(shí),應(yīng)該注意下標(biāo)值應(yīng)在已定義的數(shù)組大小的范圍內(nèi)。例如:inta[3][4];a[3][4]=3;/*沒有a[3][4]這個(gè)元素,越界*/【例6-4】定義4×6的實(shí)型數(shù)組,并將各行前五列元素的平均值分別放在同一行的第6列上。[N-S流程圖](見圖6-5):for(i=0;i<4;i++)

for(j=0;j<5;j++)for(i=0;i<4;i++)

for(j=0;j<6;j++)printf("%5.1f",a[i][j]);

printf(“\n”);定義變量及數(shù)組a[i][j]=i*j+1;for(i=0;i<4;i++)

sum=0;for(j=0;j<5;j++)sum=sum+a[i][j];

a[i][5]=sum/5;

#include<stdio.h>#defineN40voidmain(){ floata[4][6]={0},sum=0; inti=0,j=0; for(i=0;i<4;i++)

for(j=0;j<5;j++)

a[i][j]=i*j+1; for(i=0;i<4;i++)

{ sum=0;

for(j=0;j<5;j++)

sum=sum+a[i][j]; a[i][5]=sum/5;} for(i=0;i<4;i++)

{for(j=0;j<6;j++)

printf("%5.1f",a[i][j]);

printf("\n");}}運(yùn)行結(jié)果:1.01.01.01.01.01.01.02.03.04.05.03.01.03.05.07.09.05.01.0

4.07.010.013.07.02.3二維數(shù)組的存儲(chǔ)和初始化<1>二維數(shù)組的初始化二維數(shù)組的初始化格式如下:類型說明符數(shù)組名[整型常量表達(dá)式1][整型常量表達(dá)式2]={初始化數(shù)據(jù)};【說明】:定義數(shù)組的同時(shí),在{}中給出各數(shù)組元素的初始值,并把{}中的初值一次性賦給對應(yīng)的各數(shù)組元素。如果希望從鍵盤一次為數(shù)組元素輸入數(shù)據(jù),可以采用循環(huán)嵌套語句。例如:for(i=1;i<2;i++)for(j=0;j<3;j++)scanf(“%d”,&a[i][j]);二維數(shù)組的初始化有以下幾種形式:(1)分行進(jìn)行初始化例如:inta[2][3]={{1,2,3},{4,5,6}};在{}內(nèi)部再用{}把各行的初始值分開,第一對{}中的值1、2、3賦給第零行的三個(gè)元素,作為其初值;第二對{}中的值4、5、6賦給第一行的三個(gè)元素,作為其初值。相當(dāng)于執(zhí)行如下語句。inta[2][3];a[0][0]=1;a[0][1]=2;a[0][2]=3;a[1][0]=4;a[1][1]=5;a[1][2]=6;(2)不分行的初始化例如:inta[2][3]={1,2,3,4,5,6};將所有初始值放在{}內(nèi),把{}中的數(shù)據(jù)按數(shù)組在內(nèi)存中的存放次序,依次賦給a數(shù)組的各元素,即a[0][0]=1;a[0][1]=2;a[0][2]=3;a[1][0]=4;a[1][1]=5;a[1][2]=6;。(3)為部分?jǐn)?shù)組元素進(jìn)行初始化分兩種情況:①分行初始化例如:inta[2][3]={{1,2},{4}};第一行只有2個(gè)初值,按順序分別賦給a[0][0]和a[0][1];第二行的初值4賦給a[1][0];其它數(shù)組元素的初值為0。即a[0][0]=1;a[0][1]=2;a[0][2]=0;a[1][0]=4;a[1][1]=0;a[1][2]=0;。②不分行初始化例如:inta[2][3]={1,2,3};把{}中的數(shù)據(jù)按數(shù)組在內(nèi)存中的存放次序,依次賦給a數(shù)組的各元素,即a[0][0]=1;a[0][1]=2;a[0][2]=3;其它數(shù)組元素的初值為0。即a[0][0]=1;a[0][1]=2;a[0][2]=3;a[1][0]=0;a[1][1]=0;a[1][2]=0;。(4)第一維大小的確定分兩種情況:①分行初始化時(shí),第一維的大小由花括號的個(gè)數(shù)決定。例如:inta[][3]={{1,2},{4}};等價(jià)于inta[2][3]={{1,2},{4}};②不分行初始化時(shí),系統(tǒng)會(huì)根據(jù)提供的初值個(gè)數(shù)和第二維的長度確定第一維的長度。第一維的大小按如下規(guī)則確定:初值個(gè)數(shù)能被第二維的長度整除,所得的商就是第一維的大??;若不能整除,則第一維的大小為商再加上1。例如:inta[][3]={1,2,3,4};等價(jià)于:inta[2][3]={1,2,3,4};【注意:】第一維的大小定義時(shí)可以省略,但第二維的大小定義時(shí)不能省略?!纠?-5】一個(gè)學(xué)習(xí)小組有5個(gè)人,沒人有3門課程的成績,求該小組各科的平均分和總平均分。[分析]:定義一個(gè)數(shù)組score,保存學(xué)生的成績,并對它初始化,一維的大小代表學(xué)生人數(shù),二維的大小代表課程的數(shù)量。然后利用循環(huán)求出它們的成績。S流程圖](見圖6-6): for(i=0;i<N;i++)

for(j=0;j<M;j++)c_ave[i]=(float)total/M;

for(i=0;i<N;i++)

printf("%6.2f",c_ave[i]);

average=sum/(M*N);

定義數(shù)組并初始化定義變量

total=0;total+=score[j][i];

sum+=score[j][i]; printf("各門課程的平均成績分別為:");

printf("\n全組總平均成績?yōu)?%6.2f\n",average);

#include<stdio.h>#include<stdlib.h>#defineM5#defineN3intmain(){intscore[M][N]={{80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85}};inti,j,total; floatc_ave[N],average,sum=0; for(i=0;i<N;i++) { total=0; for(j=0;j<M;j++) { total+=score[j][i]; sum+=score[j][i];} c_ave[i]=(float)total/M;} average=sum/(M*N); printf("各門課程的平均成績分別為:"); for(i=0;i<N;i++) printf("%6.2f",c_ave[i]); printf("\n全組總平均成績?yōu)?%6.2f\n",average);}運(yùn)行結(jié)果:各門課程的平均成績分別為:72.20 73.40 81.60全組總平均成績?yōu)?75.73<2>二維數(shù)組在內(nèi)存中的存儲(chǔ)C語言規(guī)定,二維數(shù)組中的元素在存儲(chǔ)時(shí)要先存放第一行的數(shù)據(jù),再存放第二行的數(shù)據(jù),以此類推,每行數(shù)據(jù)按下標(biāo)規(guī)定的順序由小到大存放。例如,數(shù)組a[4][3]元素的存儲(chǔ)順序如圖6-7所示。第一行 a[0][0] a[0][1] a[0][2]第二行 a[1][0] a[1][1] a[1][2]第三行 a[2][0] a[2][1] a[2][2]第四行 a[3][0] a[3][1] a[3][2]2.4多維數(shù)組的定義一般形式:類型說明符數(shù)組名[常量表達(dá)式1][常量表達(dá)式2]…[常量表達(dá)式n]【功能】:定義一個(gè)n維數(shù)組?!菊f明】:類型說明符是任一種基本數(shù)據(jù)類型或構(gòu)造數(shù)據(jù)類型。數(shù)組名是用戶定義的數(shù)組標(biāo)識符。方括號中的常量表達(dá)式表示數(shù)據(jù)元素的個(gè)數(shù),也稱為數(shù)組的長度。常量表達(dá)式1表示第一維下標(biāo)的長度,常量表達(dá)式2表示第二維下標(biāo)的長度,常量表達(dá)式n表示第n維下標(biāo)的長度。【注意】:多維數(shù)組元素在內(nèi)存中的排列順序,是第一維的下標(biāo)變化最慢,最右邊的下標(biāo)變化最快。定義:floata[2][3][4];a[0][0][0]a[0][0][1]a[0][0][2]a[0][0][3]a[0][1][0]a[0][1][1]a[0][1][2]a[0][1][3] a[0][2][0]a[0][2][1]a[0][2][2]a[0][2][3]a[1][0][0]a[1][0][1]a[1][0][2]a[1][0][3]a[1][1][0]a[1][1][1]a[1][1][2]a[1][1][3]a[1][2][0]a[1][2][1]a[1][2][2]a[1][2][3]3.字符數(shù)組由于C語言中,沒有提供字符串?dāng)?shù)據(jù)類型,只提供字符數(shù)據(jù)類型,所以對字符串的存取可以用字符數(shù)組來實(shí)現(xiàn)。3.1字符數(shù)組的定義及初始化<1>字符數(shù)組定義字符數(shù)組定義格式:char數(shù)組名[常量表達(dá)式];【說明】:(1)數(shù)組名是用戶定義的數(shù)組標(biāo)識符(2)常量表達(dá)式表示字符的個(gè)數(shù),也稱為數(shù)組的長度例如:

charstr1[10];定義一個(gè)一維字符數(shù)組str1,它有10個(gè)元素。字符數(shù)組也可以是二維或多維數(shù)組。例如:

charstr2[3][10];即為3行10列的二維字符數(shù)組,它有30個(gè)元素。<2>字符數(shù)組初始化(1)字符數(shù)組也允許在定義時(shí)作初始化賦值。例如:chara[5]={′C′,′h′,′i′,′n’,′a’};賦值后各元素的值為圖6-8所示:nChia[0]a[1]

a[2]

aa[3]

a[4]

(2)可以只給部分?jǐn)?shù)組元素賦初值。例如:charstr1[4]={65,’3’};

相當(dāng)于charstr1[4];str1[0]=’A’,str1[1]=’3’;str1[2]=’\0’;str1[3]=’\0’;因?yàn)椤疉’的ASCII碼值是65,所以可以用它的ASCII碼賦值。(3)當(dāng)對全部元素賦初值時(shí)也可以省去長度說明。例如:chara[]={′s′,′t′,′u′,′d’,′e’,′n’,′t’};這時(shí)a數(shù)組的長度自動(dòng)定為7。(4)用字符串常量對數(shù)組進(jìn)行初始化例如:charstr[5]={“Good”};

或charstr[5]=“Good”;/*花括號可以省略。*/

或chars[]=“Good”;

相當(dāng)于charstr[5];str[0]=’G’;str[1]=’o’;str[2]=’o’;str[3]=’d’;str[4]=’\0’;用字符串常量對數(shù)組進(jìn)行初始化,系統(tǒng)自動(dòng)會(huì)在字符串常量的最后加上一個(gè)字符串結(jié)束標(biāo)志’\0’,所以數(shù)組長度等于4+1;而用單個(gè)字符常量初始化字符數(shù)組時(shí),系統(tǒng)不加字符’\0’。關(guān)于二維字符數(shù)組的初始化和前面介紹的相同,也有兩種初始化方法:(1)分行初始化;(2)按照元素在內(nèi)存中的存放順序初始化。同一維字符數(shù)組一樣,初始化時(shí)有兩種賦初值形式:(1)字符型常量初始化數(shù)組;(2)用字符串常量初始化字符數(shù)組。例如:charstr1[2][10]={{‘m’,’a’,’t’,’h’},{‘a(chǎn)’,’r’,’t’,’s’}};charstr2[][10]={‘m’,’a’,’t’,’h’,‘a(chǎn)’,’r’,’t’,’s’};charstr3[2][10]={{“math”},{“arts”}};charstr4[][10]={“math”,“arts”};3.2字符串的輸入/輸出<1>字符數(shù)組的輸出有兩種方法將一個(gè)字符數(shù)組的內(nèi)容輸出。(1)按%c的格式用printf()函數(shù)將數(shù)組元素逐個(gè)輸出到屏幕。例如:charstr[8]=”student”;for(i=0;i<8;i++)printf(“%c”,str[i]);此處,輸出項(xiàng)是數(shù)組元素。(2)按%s的格式用printf()函數(shù)將數(shù)組中的內(nèi)容按字符串的方式輸出到屏幕(遇到’\0’字符結(jié)束)。例如:chara[]=”China”;printf(“%s”,a);用此方式時(shí),輸出項(xiàng)要寫數(shù)組名a,而不是數(shù)組元素。執(zhí)行此函數(shù)時(shí),從a數(shù)組的第一個(gè)元素開始,一個(gè)元素接一個(gè)元素地輸出到屏幕,一直到遇到’\0’字符為止。如果字符串中有多個(gè)‘\0’,則遇到第一個(gè)‘\0’結(jié)束,并且‘\0’字符將不會(huì)被輸出到屏幕上。如果字符數(shù)組中沒有‘\0’字符,則在使用“%s”輸出的過程中可能會(huì)出現(xiàn)錯(cuò)誤。例如:#include<stdio.h>voidmain(){ charc[]={'h','e','l','l','o','!'}; printf("%s",c);}輸出結(jié)果為:hello!燙燙燙出現(xiàn)了亂碼錯(cuò)誤。所以在使用“%s”時(shí)要注意字符數(shù)組是否有’\0’結(jié)束標(biāo)志。<2>字符數(shù)組的輸入有兩種方法從鍵盤對字符數(shù)組賦值。(1)按%c的格式用循環(huán)和scanf()函數(shù)讀入鍵盤輸入的數(shù)據(jù)。例如:charstr[10];for(i=0;i<10;i++)scanf(“%c”,&str[i]);按這種方式給字符數(shù)組輸入值時(shí),系統(tǒng)不會(huì)自動(dòng)在字符串的最后加字符’\0’作為結(jié)束標(biāo)志。(2)按%s的格式例如:charstr[10];scanf(“%s”,str);將鍵盤輸入的內(nèi)容按字符串的方式送到數(shù)組中,這里注意數(shù)組名就代表了數(shù)組的地址。輸入時(shí),在遇到分隔符時(shí)認(rèn)為字符串輸入完畢,并將分隔符前面的字符后加一個(gè)’\0’字符一并存入數(shù)組中。所以數(shù)組長度是實(shí)際字符的長度再加1。用“%s”輸入字符時(shí),字符串中不能含有空格和回車,因?yàn)檫@些是輸入數(shù)據(jù)的結(jié)束標(biāo)志。3.3字符串處理函數(shù)<1>字符串輸出函數(shù)puts【格式】:puts(字符數(shù)組名)【功能】:把字符數(shù)組中的字符串輸出到顯示器,遇’\0’結(jié)束。例如:chars1[]=”sunshine”;puts(s1);其結(jié)果是在終端輸出“sunshine”。用puts函數(shù)輸出的字符串中可以包含轉(zhuǎn)義字符。例如:chars2[]={“zhang\nsun”};puts(s2);‘\n’是轉(zhuǎn)義字符,執(zhí)行回車換行,在輸出全部字符后遇到結(jié)束標(biāo)志’\0’結(jié)束輸出。最終輸出結(jié)果為:zhangsun<2>字符串輸入函數(shù)gets【格式】:gets(字符數(shù)組名)【功能】:從鍵盤讀入一個(gè)字符串,包括空格符,并把它們一次放到字符數(shù)組中去。本函數(shù)得到一個(gè)函數(shù)值,即為該字符數(shù)組的首地址。用gets()函數(shù)輸入字符串時(shí),只有回車鍵才認(rèn)為是輸入結(jié)束,此時(shí)系統(tǒng)自動(dòng)在輸入的字符的后面加一個(gè)結(jié)束標(biāo)志’\0’。【例6-5】鍵盤輸入一個(gè)字符串到字符數(shù)組s,再將字符串輸出到終端。C源程序:(文件名:li6_6.c)#include<stdio.h>voidmain(){ charstr[80]; printf("請輸入一個(gè)字符串:\n"); gets(str);/*用gets()輸入一個(gè)字符串*/ printf("輸入的字符串是:\n"); puts(str);/*用puts()函數(shù)輸出字符串*/}運(yùn)行結(jié)果:請輸入一個(gè)字符串:Iamateacher!↙輸入的字符串是:Iamateacher!<3>字符串連接函數(shù)strcat【格式】:strcat(字符數(shù)組名1,字符數(shù)組名2)【功能】:把字符數(shù)組2中的字符串連接到字符數(shù)組1中字符串的后面,并刪去字符串1后的結(jié)束符’\0’。本函數(shù)返回值是字符數(shù)組1的首地址。例如:charstr1[16]={“Hello”};charstr2[]={“everyone”};strcat(str1,str2);puts(str1);輸出:Helloeveryonestr1Hello

\0\0\0\0\0\0\0\0\0\0str2everyone\0str1Hello

everyone\0\0連接前:連接后:【說明:】(1)字符數(shù)組1必須足夠大,以便容納連接后的新字符串。本例中定義str1的長度為16,是足夠大的。(2)連接前兩個(gè)字符串的后面都有’\0’,連接時(shí)將字符串1后面的’\0’刪除,只在新串最后保留’\0’。<4>字符串拷貝函數(shù)strcpy【格式】:strcpy(字符數(shù)組名1,字符數(shù)組名2)【功能】:把字符數(shù)組2中的字符串拷貝到字符數(shù)組1中。結(jié)束標(biāo)志’\0’也一同拷貝?!菊f明】:字符數(shù)組1的長度應(yīng)不小于字符數(shù)組2的長度,字符數(shù)組1必須寫成數(shù)組名形式,而字符數(shù)組2可以是字符串常量,也可以是字符數(shù)組名形式。例如:charstr1[10],str2[]={“CLanguage”};strcpy(str1,str2);puts(str1);printf(“\n”);運(yùn)行結(jié)果:CLanguage注意,由于數(shù)組不能進(jìn)行整體賦值,所以不能直接使用賦值語句來實(shí)現(xiàn)復(fù)制(或賦值)。下面兩個(gè)賦值語句是非法的。str1=str2;/*企圖用賦值語句將一個(gè)字符數(shù)組直接賦值給另一個(gè)字符數(shù)組*/str1=”abc”;/*企圖用賦值語句將一個(gè)字符串常量直接賦值給一個(gè)字符數(shù)組*/只能用strcpy函數(shù)將一個(gè)字符串復(fù)制到另一個(gè)字符數(shù)組中去。用賦值語句只能將一個(gè)字符賦給一個(gè)字符型變量或字符數(shù)組元素。例如:chara[5],c1,c2;c1=’a’;c2=’b’;a[0]=’c’;a[1]=’d’;a[2]=’i’;這些是合法的?!纠?-6】復(fù)制字符串。#include<stdio.h>#include<string.h>voidmain(){inti; charstr1[10]="Language",str2[6]="C+\0++"; puts(str1);/*輸出原始數(shù)據(jù)str1字符數(shù)組*/ puts(str2);/*輸出原始數(shù)據(jù)str2字符數(shù)組*/ strcpy(str1,str2);/*將str2中字符串復(fù)制到str1中*/ printf("str1:"); for(i=0;i<9;i++)/*用printf()函數(shù)逐個(gè)將str1中字符串輸出*/ printf("%c",str1[i]); printf("\n"); puts(str1);/*用puts()函數(shù)將str1中字符串輸出*/ printf("str2:"); puts(str2);/*用puts()函數(shù)將str2中字符串輸出*/ for(i=0;i<6;i++)/*用printf()函數(shù)逐個(gè)將str2中字符串輸出*/ printf("%c",str2[i]);}運(yùn)行結(jié)果:LanguageC+str1:C+guageC+str2:C+C+++<5>字符串比較函數(shù)strcmp【格式】:strcmp(字符數(shù)組名1,字符數(shù)組名2)【功能】:按照ASCII碼順序比較兩個(gè)數(shù)組中的字符串,并由函數(shù)返回值返回比較結(jié)果。字符串1=字符串2,返回值=0; 字符串1〉字符串2,返回值〉0; 字符串1〈字符串2,返回值〈0?!菊f明】:執(zhí)行這個(gè)函數(shù)時(shí)

,自左到右逐個(gè)比較對應(yīng)字符的ASCII碼值,直到發(fā)現(xiàn)不同字符或字符串結(jié)束標(biāo)志’\0’為止。字符串不能用數(shù)值型比較符。字符數(shù)組名1和字符數(shù)組名2,可以是字符串常量。比較兩個(gè)字符串是否相等一般用下面的語句形式:if(strcmp(str1,str2)==0){┅};而不能直接判斷:if(str1==str2){┅};【例6-7】輸入5個(gè)字符串,將其中最大的字符串輸出。[分析]定義兩個(gè)字符數(shù)組str和maxstr(maxstr數(shù)組中保存最大的字符串),用gets()函數(shù)輸入第一個(gè)字符串(假設(shè)第一個(gè)字符串是最大的),通過循環(huán)分別輸入其他4個(gè)字符串,并將輸入的字符串與maxstr中保存的最大字符串進(jìn)行比較,若比目前的最大字符串要大,則將新輸入的字符串復(fù)制到maxstr中。[N-S流程圖](見圖6-10):charstr[80],maxstr[80];

inti;

printf("請輸入第1個(gè)字符串:");

gets(maxstr);

for(i=1;i<5;i++)

printf("請輸入第%d個(gè)字符串:",i+1);

gets(str);strcmp(maxstr,str)<0TF

printf("最大的字符串是:%s\n",maxstr);

strcpy(maxstr,str);#include<stdio.h>#include<string.h>voidmain(){charstr[80],maxstr[80];inti;printf("請輸入第1個(gè)字符串:");gets(maxstr);for(i=1;i<5;i++){ printf("請輸入第%d個(gè)字符串:",i+1); gets(str); if(strcmp(maxstr,str)<0) strcpy(maxstr,str);}printf("最大的字符串是:%s\n",maxstr);}運(yùn)行結(jié)果:請輸入第1個(gè)字符串:abcdefg↙

請輸入第1個(gè)字符串:abcdfghi↙

請輸入第1個(gè)字符串:bcdefghi↙

請輸入第1個(gè)字符串:a1b2c3d4e5↙

請輸入第1個(gè)字符串:1234567↙

最大的字符串是:bcdefghi<6>測字符串長度函數(shù)strlen【格式】:strlen(字符數(shù)組名)【功能】:測字符串的實(shí)際長度(不含字符串結(jié)束標(biāo)志‘\0’)并作為函數(shù)返回值?!纠?-8】求字符串長度。C源程序:(文件名:li6_9.c)#include<stdio.h>#include<string.h>voidmain(){ charstr[20]; intcount=0; gets(str); count=strlen(str); /*求字符串長度,參數(shù)是str*/ printf("%s:%d\n",str,count);/*輸出字符串的長度*/ printf("%s:%d\n","abcde",strlen("abcde"));/*參數(shù)也可以是字符串常量*/}運(yùn)行結(jié)果:hello↙hello:5abced:54.數(shù)組的應(yīng)用舉例【例6-9】將10個(gè)數(shù)由小到大進(jìn)行排序(用冒泡法)。[分析]:冒泡排序的基本概念是:依次比較相鄰的兩個(gè)數(shù),將小數(shù)放在前面,大數(shù)放在后面。即在第一趟:首先比較第1個(gè)和第2個(gè)數(shù),將小數(shù)放前,大數(shù)放后。然后比較第2個(gè)數(shù)和第3個(gè)數(shù),將小數(shù)放前,大數(shù)放后,如此繼續(xù),直至比較最后兩個(gè)數(shù),將小數(shù)放前,大數(shù)放后。至此第一趟結(jié)束,將最大的數(shù)放到了最后。在第二趟:仍從第一對數(shù)開始比較(因?yàn)榭赡苡捎诘?個(gè)數(shù)和第3個(gè)數(shù)的交換,使得第1個(gè)數(shù)不再小于第2個(gè)數(shù)),將小數(shù)放前,大數(shù)放后,一直比較到倒數(shù)第二個(gè)數(shù)(倒數(shù)第一的位置上已經(jīng)是最大的),第二趟結(jié)束,在倒數(shù)第二的位置上得到一個(gè)新的最大數(shù)(其實(shí)在整個(gè)數(shù)列中是第二大的數(shù))。如此下去,重復(fù)以上過程,直至最終完成排序。

數(shù)組元素排序過程元素【0】元素【1】元素【2】元素【3】元素【4】起始值961542第1次691542第2次691542第3次694152第4次694215排序結(jié)果694215可以看出,第1次是元素【0】和元素【1】比較,如果逆序,則交換位置,第2次是元素【1】和元素【2】比較,沒有交換位置,因?yàn)椴皇悄嫘?。?次是元素【2】和元素【3】比較,逆序,交換位置。第4次是元素【3】和元素【4】比較,逆序,交換位置。這樣一趟冒泡排序就完成了,結(jié)果最大值放在了最后一個(gè)元素的位置上。接下來,按照同樣的方法,進(jìn)行下一趟冒泡排序。直到排序完成。for(i=0;i<10;i++)for(i=0;i<10;i++)

printf("%d",a[i]);printf(“\n”);printf("Input10numbers:\n");

scanf("%d",&a[i]);

for(i=0;i<9;i++) for(j=0;j<9-i;j++) a[j]>a[j+1]定義變量及數(shù)組 printf("\n");

T

F

temp=a[j];a[j]=a[j+1];a[j+1]=temp;printf("Thesortednumbers:\n");#include<stdio.h>voidmain(){inta[10];inti=0,j=0,temp=0;printf("Input10numbers:\n");for(i=0;i<10;i++)/*將輸入的10個(gè)整數(shù)存入一維數(shù)組*/{scanf("%d",&a[i]);}printf("\n");for(i=0;i<9;i++) /*進(jìn)行9次循環(huán),實(shí)現(xiàn)9趟比較*/{for(j=0;j<9-i;j++) /*在每次循環(huán)中進(jìn)行9-j次比較*/{if(a[j]>a[j+1]) /*相鄰兩個(gè)數(shù)比較*/

{temp=a[j];

a[j]=a[j+1];

a[j+1]=temp;}}}printf("Thesortednumbers:\n");for(i=0;i<10;i++){printf("%d",a[i]);}printf("\n");}運(yùn)行結(jié)果:Input10numbers:10982517346↙Thesortednumbers:12345678910【例6-10】使用選擇排序?qū)崿F(xiàn)10個(gè)數(shù)字的由大到小的排序。[分析]:選擇排序是在n個(gè)數(shù)據(jù)中選出最大值,然后在剩下的n-1個(gè)數(shù)據(jù)中選出最大值。首先,讀取輸入的n個(gè)數(shù)據(jù),存儲(chǔ)于定義好的一維數(shù)組中,然后進(jìn)行n次循環(huán),第一次找出n個(gè)數(shù)據(jù)中的最大值,將其與第一個(gè)數(shù)據(jù)交換,然后再在剩余的n-1個(gè)數(shù)據(jù)中找出最大值將其與第二個(gè)數(shù)據(jù)交換位置。以此類推,當(dāng)循環(huán)到最后一個(gè)數(shù)據(jù)時(shí),這個(gè)數(shù)必然是這組數(shù)據(jù)中最小的數(shù)。最后,得到一組從大到小。如表6-2所示。

數(shù)組元素排序過程元素【0】元素【1】元素【2】元素【3】元素【4】起始值971026第1次107926第2次109726第3次109726第4次109762排序結(jié)果109762for(i=0;i<10;i++)for(i=0;i<10;i++)

printf("%-3d",a[i]);printf(“\n”);printf("pleaseinput10numbers:\n");

scanf("%d",&a[i]);

for(i=0;i<9;i++) for(j=i+1;j<10;j++) a[k]<a[j]定義變量及數(shù)組 printf("\n");

T

F

k=j; printf("Thesortednumbersis:\n");k=i;k!=iT

F

t=a[i]; a[i]=a[k]; a[k]=t;#include<stdio.h>voidmain(){ inta[10],i,j,k,t; printf("pleaseinput10numbers:\n"); for(i=0;i<10;i++) /*給一維數(shù)組賦值*/ scanf("%d",&a[i]); printf("\n"); for(i=0;i<9;i++) /*共進(jìn)行9次循環(huán)*/

{k=i;

for(j=i+1;j<10;j++)

{if(a[k]<a[j])

k=j; /*記錄最大值的位置*/}

if(k!=i) /*如果當(dāng)前不是第i個(gè)數(shù),則將該數(shù)字與第i個(gè)數(shù)字交換位置*/

{t=a[i];

a[i]=a[k];

a[k]=t;}} printf("TheSortedNumbersis:\n"); for(i=0;i<10;i++) /*輸出排序后結(jié)果*/ printf("%-3d",a[i]); printf("\n");}運(yùn)行結(jié)果:pleaseinput10numbers:3528032246756TheSortedNumbersis:5632248765320【例6-11】輸入2個(gè)學(xué)生的學(xué)號和3門課的成績,求每個(gè)學(xué)生的平均成績,輸入所有學(xué)生的學(xué)號、3門課的成績和平均成績。[分析]:建立一個(gè)2行5列的實(shí)型二維數(shù)組,其中,第0列存放學(xué)號,第1、2、3列存放3門課的成績,第4列存放平均成績。首先一次輸入2個(gè)學(xué)生的學(xué)號和3門課的成績,存放到數(shù)組的第0、1、2、3列;其次計(jì)算3門課的平均成績,并存放到第4列。對每個(gè)學(xué)生重復(fù)執(zhí)行以上操作,最后依次輸出所有學(xué)生的學(xué)號、3門課的成績和平均成績。[N-S流程圖](見圖6-13):for(i=0;i<N;i++)for(j=1;j<4;j++)

for(i=0;i<N;i++)

printf(“請輸入%d個(gè)學(xué)生的%d門課程成績:\n”,N,3);scanf(“%d%d%d%d”,&a[i][0],&a[i][1],a[i][2],&a[i][3]);

定義變量及數(shù)組a[i][4]+=a[i][j];a[i][4]=0;

a[i][4]/=3;

printf(“學(xué)號\tC語言\t高數(shù)\t英語\t平均成績\n”);for(i=0;i<N;i++)

for(j=0;j<5;j++)

printf(“%d\t”,a[i][j]);

printf(“\n”);/*每輸出完一個(gè)學(xué)生的數(shù)據(jù),立即換行*/

#include<stdio.h>#defineN2voidmain(){inti=0,j=0;inta[N][5];printf(“請輸入%d個(gè)學(xué)生的%d門課程成績:\n”,N,3);for(i=0;i<N;i++){/*輸入N個(gè)學(xué)生的數(shù)據(jù)for(j=0;j<4;j++){//輸入學(xué)號、C語言、高數(shù)、英語scanf(”%d“,&a[i][j]);*/scanf(“%d%d%d%d”,&a[i][0],&a[i][1],&a[i][2],&a[i][3]);}for(i=0;i<N;i++)/*求N個(gè)學(xué)生的平均成績*/{/*因?yàn)閯偛泡斎霐?shù)據(jù)時(shí),沒有給平均成績列輸入數(shù)據(jù),所以這里需要賦初值*/a[i][4]=0;for(j=1;j<4;j++){a[i][4]+=a[i][j];/*求第i個(gè)學(xué)生的3門課程成績和*/}/*求第i個(gè)學(xué)生的平均成績*/a[i][4]/=3;}printf(“學(xué)號\tC語言\t高數(shù)\t英語\t平均成績\n”);for(i=0;i<N;i++){/*輸出第i個(gè)學(xué)生的學(xué)號*/for(j=0;j<5;j++){/*輸出第i個(gè)學(xué)生的3門課成績和平均成績*/printf(“%d\t”,a[i][j]);}printf(“\n”);/*每輸出完一個(gè)學(xué)生的數(shù)據(jù),立即換行*/}}運(yùn)行結(jié)果:請輸入2個(gè)學(xué)生的3門課程成績:1788986↙2778090↙學(xué)號 C語言 高數(shù) 英語 平均成績1 78

89

86

842 77

80

90

82【例6-12】反轉(zhuǎn)輸出字符串。如輸入“myform”,其反轉(zhuǎn)結(jié)果為“mrofym”。[分析]:在程序中定義兩個(gè)字符數(shù)組,一個(gè)表示源字符串,另一個(gè)表示反轉(zhuǎn)后的字符串,即目標(biāo)字符串。在源字符串中第一個(gè)字符開始,依次讀取字符數(shù)據(jù),在目標(biāo)字符串中從最后一個(gè)字符(結(jié)束標(biāo)志”\0”除外)倒序遍歷字符串,依次將源字符串中的第一個(gè)字符數(shù)據(jù)寫入目標(biāo)字符串的最后一個(gè)字符中,將源字符串中的第二個(gè)字符數(shù)據(jù)寫入目標(biāo)字符串的倒數(shù)第二個(gè)字符中,依次

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論