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

下載本文檔

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

文檔簡(jiǎn)介

數(shù)

4.1一維數(shù)組

4.1.1數(shù)組的引入

【例4-1】

求10人某門課程的平均分,并將高于平均分的成績(jī)輸出。

首先需要求出10人成績(jī)的平均分并輸出,再依次將10人的成績(jī)與平均分進(jìn)行比較,若高出平均分則輸出。

該例的算法可用如圖4-1所示的流程圖來(lái)描述。圖4-1例4-1流程圖

從流程圖中可看出,必須存儲(chǔ)10人的成績(jī)以便在求出平均分后與其進(jìn)行比較、輸出。

如何存儲(chǔ)這10人的成績(jī)呢?

若如例3-3中僅使用一個(gè)變量x來(lái)存儲(chǔ)成績(jī),可使用循環(huán)結(jié)構(gòu)來(lái)求解平均分,但每輸入一個(gè)成績(jī)便會(huì)覆蓋前一個(gè)成績(jī),無(wú)法完成程序的后半段成績(jī)與平均分的比較、輸出。

若分別使用10個(gè)變量如x1、x2、……、x10來(lái)存儲(chǔ)10人的成績(jī),將無(wú)法使用循環(huán)結(jié)構(gòu)進(jìn)行處理。若需要處理的成績(jī)數(shù)達(dá)到100個(gè)、1000個(gè)甚至更多,顯然不使用循環(huán)結(jié)構(gòu)將無(wú)法處理。

因此,以目前所學(xué)內(nèi)容無(wú)法解決大量數(shù)據(jù)既能方便地定義、存儲(chǔ),又能使用循環(huán)結(jié)構(gòu)進(jìn)行處理的需求。使用數(shù)組則可以簡(jiǎn)便易行地滿足上述需求。

#include<stdio.h>

main()

{ floatscore[10],sum,aver;

inti;

printf("請(qǐng)輸入10人的成績(jī):\n");

for(sum=0,i=0;i<10;i++)

{ scanf("%f",&score[i]);

sum=sum+score[i];

}

aver=sum/10;

printf("平均分為:%.2f\n",aver);

printf("高于平均分的成績(jī)?yōu)椋?);

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

if(score[i]>aver)

printf("%6.1f",score[i]);

printf("\n");

}圖4-2例4-1程序運(yùn)行結(jié)果4.1.2一維數(shù)組的定義、初始化、引用、遍歷

1.一維數(shù)組的定義

在C語(yǔ)言中,定義一維數(shù)組的一般格式如下:

類型說(shuō)明符

數(shù)組標(biāo)識(shí)符[常量表達(dá)式];

其中:“類型說(shuō)明符”可以是任何一種基本數(shù)據(jù)類型或構(gòu)造數(shù)據(jù)類型;“數(shù)組標(biāo)識(shí)符”就是數(shù)組名,必須是合法標(biāo)識(shí)符;“常量表達(dá)式”表示數(shù)組的長(zhǎng)度,即數(shù)組中元素的個(gè)數(shù)。例如:

intScore[5]; /*定義了具有5個(gè)元素的整型數(shù)組*/

floatmaths[5]; /*定義了具有5個(gè)元素的浮點(diǎn)型數(shù)組*/

charname[10]; /*定義了具有10個(gè)元素的字符類型數(shù)組

*/圖4-3一維數(shù)組存儲(chǔ)示意圖2.一維數(shù)組的初始化

數(shù)組可以在定義時(shí)賦初值,通常也稱之為初始化,常見(jiàn)形式如下:

(1)對(duì)數(shù)組所有元素賦初值,此時(shí)數(shù)組長(zhǎng)度可以省略。例如:

inta[5]={1,2,3,4,5};

/*定義時(shí)給數(shù)組所有元素賦初值*/

charn[]={‘a(chǎn)’,‘b’,‘c’,‘d’,‘e’};

/*全部數(shù)組元素賦初值,不用指定數(shù)組的長(zhǎng)度*/

(2)對(duì)數(shù)組部分元素賦初值,未賦值的元素值為0。例如:

floatmaths[5]={65,75,85};

/*定義時(shí)只給部分元素賦初值,剩余元素值為0*/

inta[5]={0};·

/*定義時(shí)將所有元素賦值為0*/

3.一維數(shù)組元素的引用

數(shù)組定義后,可在程序中引用其元素。數(shù)組元素的引用形式如下:

數(shù)組標(biāo)識(shí)符[下標(biāo)]

特點(diǎn):

(1)下標(biāo)從0開(kāi)始,其取值范圍為0~(數(shù)組元素個(gè)數(shù)-1)。注意,下標(biāo)不能越界。

(2)下標(biāo)必須是正整數(shù)。

例如:

intscore[5];

score[0]=90; /*引用score數(shù)組的第一個(gè)元素*/

score[4]=70; /*引用score數(shù)組的最后一個(gè)元素*/

4.一維數(shù)組的遍歷

對(duì)一個(gè)數(shù)組中元素的遍歷通常使用循環(huán)結(jié)構(gòu)來(lái)完成。由于C語(yǔ)言數(shù)組中數(shù)組元素的個(gè)數(shù)是確定的,因此常使用for循環(huán)來(lái)完成數(shù)組元素的遍歷。其一般格式如下:

for(i=0;i<數(shù)組元素個(gè)數(shù);i++)

{

…數(shù)組名[i]…

}

【例4-2】

閱讀以下程序,若輸入5個(gè)數(shù),分別為1、5、8、3、6,寫(xiě)出該程序的輸出結(jié)果。

#include<stdio.h>

main()

{ inta[10]={7,9,2};

inti;

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

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

a[3]=11;

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

a[i]=a[i]+1;

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

printf("%5d",a[i]);

printf("\n");

}圖4-4例4-2程序運(yùn)行結(jié)果

【例4-3】

輸入10人的成績(jī),求最高分及最低分。

將10人的成績(jī)存儲(chǔ)在數(shù)組score中,則擂主初始值默認(rèn)為score[0]即可,而隨后的挑戰(zhàn)者為score[1]~score[9]。

#include<stdio.h>

main()

{ intscore[10],max,min,i;

printf("請(qǐng)輸入10人的成績(jī):\n");

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

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

max=score[0];

min=score[0];

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

{ if(score[i]>max)max=score[i];

if(score[i]<min)min=score[i];

}

printf("最高分為:%d\n",max);

printf("最低分為:%d\n",min);

}

圖4-5例4-3程序運(yùn)行結(jié)果

【例4-4】

利用數(shù)組求Fibonacci數(shù)列的前20項(xiàng)。

定義fib數(shù)組存儲(chǔ)數(shù)列的前20項(xiàng)。fib數(shù)組的前兩個(gè)元素即fib[0]、fib[1]為1,隨后的每一個(gè)元素的值為前兩個(gè)元素之和??墒筰從2至19變化,則fib[i]的值應(yīng)為fib[i-2]+fib[i-1]。圖4-6例4-4程序運(yùn)行結(jié)果4.1.3一維數(shù)組的應(yīng)用

1.基礎(chǔ)應(yīng)用

【例4-5】

數(shù)組score中存儲(chǔ)了10個(gè)人的分?jǐn)?shù),輸入一個(gè)分?jǐn)?shù)x,在數(shù)組中查找有沒(méi)有值為x的元素,如果有,則輸出“found!”,否則輸出“notfound!”。

本例通過(guò)for循環(huán)來(lái)完成指定分?jǐn)?shù)值的查找過(guò)程,若判斷出某分?jǐn)?shù)與x相等,則中斷循環(huán)。結(jié)束循環(huán)后通過(guò)判斷循環(huán)變量i的值是否大于10來(lái)斷定x是否被找到。圖4-7例4-5程序運(yùn)行結(jié)果

【例4-6】

數(shù)組a中存儲(chǔ)了10個(gè)從小到大排序的整數(shù),輸入x并將其插入到數(shù)組a中,使得數(shù)組元素仍保持從小到大的順序,并輸出所有元素。

自后向前查找x待插入的位置。循環(huán)變量i從9至0變化,循環(huán)中將x與a[i]比較,若x<a[i]成立,則x的插入位置應(yīng)在i之前,于是a[i]中的數(shù)值向后挪動(dòng)1位為前方待插入的x騰出位置,即a[i+1]=a[i];否則,若x>=a[i],則x的插入位置就是i+1,無(wú)需再執(zhí)行循環(huán),中斷循環(huán)。結(jié)束循環(huán)后,將x插入到i+1位置上,即a[i+1]=x。

從有序數(shù)組的尾部開(kāi)始進(jìn)行比較插入,可明顯減少現(xiàn)有有序數(shù)組中數(shù)值的移動(dòng)量,提高程序效率的同時(shí)也使程序的編寫(xiě)得到簡(jiǎn)化。

圖4-8例4-6程序運(yùn)行結(jié)果

2.高級(jí)應(yīng)用

【例4-7】

從鍵盤(pán)輸入8個(gè)數(shù),采用直接選擇排序法將數(shù)組元素按照從小到大的順序排列并輸出。

直接選擇排序法是一輪一輪在指定范圍內(nèi)尋找最小數(shù)在數(shù)組中的位置(下標(biāo))k,由于最小數(shù)的正確位置應(yīng)該是在該范圍內(nèi)的最前面,因此將位置k上的最小數(shù)與指定范圍中最前面位置上的數(shù)進(jìn)行互換。由于已經(jīng)將指定范圍內(nèi)最小數(shù)放置到了該范圍的最前方,因此下一輪的指定范圍將不包含本輪范圍最前方的數(shù),指定范圍縮小1,即范圍起始下標(biāo)增加1。假設(shè)這8個(gè)數(shù)分別為80、70、60、90、75、65、50、85,則實(shí)現(xiàn)過(guò)程如表4-2所示,一輪排定一個(gè)數(shù)據(jù)。每一輪排序中,灰色底紋為已經(jīng)排好序的數(shù)據(jù),白色底紋為指定范圍內(nèi)待排序的數(shù)據(jù),加粗的數(shù)據(jù)為指定范圍內(nèi)的最小數(shù)。8個(gè)數(shù)要進(jìn)行7輪(第0輪~第6輪),依次類推,n個(gè)元素要進(jìn)行n-1輪。

圖4-9例4-7程序運(yùn)行結(jié)果

【例4-8】

從鍵盤(pán)輸入8個(gè)數(shù),采用冒泡排序法將數(shù)組元素按照從小到大的順序排列并輸出。

冒泡排序也是一輪一輪進(jìn)行排序。每一輪都是將相鄰的兩個(gè)元素作為一對(duì),按小數(shù)在前、大數(shù)在后的原則一對(duì)對(duì)排好順序。如果某一對(duì)元素大數(shù)在前、小數(shù)在后,則將這一對(duì)的兩個(gè)元素?cái)?shù)據(jù)交換,否則不用交換。就像氣泡一般,越來(lái)越大,這樣越大的數(shù)位置越靠后。假設(shè)這8個(gè)數(shù)分別為80、70、60、90、75、65、50、85,第0輪排序過(guò)程如圖4-10所示,整個(gè)排序過(guò)程如表4-3所示,一輪排定一個(gè)數(shù)據(jù)。每一輪排序中,灰色底紋為已經(jīng)排好序的數(shù)據(jù),白色底紋為指定范圍內(nèi)待排序的數(shù)據(jù)。

圖4-10冒泡排序法第0輪排序過(guò)程示意圖圖4-11例4-8程序運(yùn)行結(jié)果

【例4-9】

從鍵盤(pán)輸入8個(gè)數(shù),采用插入排序法將數(shù)組元素按照從小到大的順序排列并輸出。

插入排序法是假定在一個(gè)有序的數(shù)組中自后向前不斷地插入新值來(lái)完成數(shù)據(jù)的排序過(guò)程。在此仍然以80、70、60、90、75、65、50、85這8個(gè)數(shù)據(jù)來(lái)說(shuō)明插入排序的過(guò)程。實(shí)現(xiàn)過(guò)程如表4-4所示。一個(gè)個(gè)地在有序數(shù)組中插入新值,在這里8個(gè)數(shù)要插入7次,依次類推,n個(gè)元素的數(shù)組要排序就要插入n-1次。

圖4-12例4-9程序運(yùn)行結(jié)果 4.2二維數(shù)組

4.2.1二維數(shù)組的引入

在實(shí)際應(yīng)用中經(jīng)常會(huì)遇到類似于矩陣的以行列格式排列的數(shù)據(jù)處理問(wèn)題,這樣的數(shù)據(jù)不便于使用一維數(shù)組表示,而使用二維數(shù)組可以方便、直觀地表示這樣的數(shù)據(jù)。

【例4-10】

輸入5位同學(xué)3門課程的成績(jī),求每個(gè)同學(xué)的平均分和每門課程的平均分,并輸出包含平均分的成績(jī)總表。圖4-13例4-10程序運(yùn)行結(jié)果

從例4-10可以看出,此時(shí)如果使用一維數(shù)組來(lái)表示5位同學(xué)3門課程的成績(jī),明顯不方便。在此定義“floats[5][3]”,s是一個(gè)5行3列的二維float型數(shù)組,每一行代表1位同學(xué)的3門課程成績(jī),每一列代表1門課程的5位同學(xué)的成績(jī)。每一個(gè)元素分別為s[0][0]、s[0][1]、s[0][2]、s[1][0]、…、s[4][2],可以使用“for(i=0;i<5;i++){for(j=0;j<3;j++){…s[i][j]…}}”的循環(huán)嵌套結(jié)構(gòu)方便地處理這些數(shù)據(jù)。4.2.2二維數(shù)組的定義、初始化、引用、遍歷

1.二維數(shù)組的定義

在C語(yǔ)言中,定義二維數(shù)組的一般格式如下:

類型說(shuō)明符

數(shù)組標(biāo)識(shí)符[常量表達(dá)式1][常量表達(dá)式2];

其中:“類型說(shuō)明符”可以是任何一種基本數(shù)據(jù)類型或構(gòu)造類型;“數(shù)組標(biāo)識(shí)符”就是數(shù)組名,必須是合法標(biāo)識(shí)符;“常量表達(dá)式1”表示二維數(shù)組的行數(shù),“常量表達(dá)式2”表示二維數(shù)組的列數(shù)。例如:

intscore[3][4]; /*定義了一個(gè)3行4列,具有12個(gè)元素的整型數(shù)組*/

二維數(shù)組在邏輯上是二維的,但在物理內(nèi)存中存儲(chǔ)時(shí),卻如同一維數(shù)組采用線性存儲(chǔ),即在C語(yǔ)言中二維數(shù)組采用了按行排列的方式進(jìn)行保存,從這個(gè)層面上來(lái)說(shuō)可以把一個(gè)二維數(shù)組看成是多個(gè)一維數(shù)組。下面以一個(gè)二維數(shù)組Score[2][2]為例來(lái)說(shuō)明,如圖4-14所示。圖4-14二維數(shù)組存儲(chǔ)示意圖

2.二維數(shù)組的初始化

二維數(shù)組初始化的幾種常見(jiàn)形式如下:

(1)分行給二維數(shù)組所有元素賦初值。例如:

inta1[2][3]={{1,2,3},{4,5,7}};

(2)分行給二維數(shù)組部分元素賦初值,省略未賦值的元素值為0。例如:

floata2[3][3]={{65,75,85},{0},{65,75}};

floata3[3][3]={{65},{65,75}};

(3)不分行給二維數(shù)組所有元素賦初值。例如:

inta4[2][3]={90,60,55,62,92,83};

(4)不分行給二維數(shù)組部分元素賦初值,省略未賦值的元素值為0。例如:

inta5[5][2]={90,60,80};

inta6[5][2]={0};

(5)給二維數(shù)組所有元素賦初值,二維數(shù)組行數(shù)可省略。例如:

intdata[][5]={1,2,3,4,5,6,7,8,9,10}; /*與intscore[2][5]等價(jià)*/

注意:初始化時(shí)不能省略二維數(shù)組的列數(shù)。

3.二維數(shù)組元素的引用

二維數(shù)組元素的引用形式如下:

數(shù)組標(biāo)識(shí)符[行下標(biāo)][列下標(biāo)]

特點(diǎn):

(1)下標(biāo)從0開(kāi)始計(jì)算,行下標(biāo)的取值范圍為0~(數(shù)組行數(shù)-1),列下標(biāo)的取值范圍為0~(數(shù)組列數(shù)-1)。注意,行下標(biāo)、列下標(biāo)不要越界。

(2)行下標(biāo)、列下標(biāo)必須是正整數(shù)。例如:

intscore[3][5];

score[0][0]=10; /*引用數(shù)組score中的第一個(gè)元素*/

score[2][4]=20; /*引用數(shù)組score中的最后一個(gè)元素*/

4.二維數(shù)組的遍歷

與一維數(shù)組的遍歷類似,需要使用循環(huán)結(jié)構(gòu)控制下標(biāo)變化以便對(duì)二維數(shù)組元素進(jìn)行遍歷。由于二維數(shù)組有行下標(biāo)及列下標(biāo),因此需要使用嵌套循環(huán)的結(jié)構(gòu)進(jìn)行元素遍歷。其一般格式如下:

for(i=0;i<數(shù)組行數(shù);i++)

{ for(j=0;j<數(shù)組列數(shù);j++)

{

…數(shù)組名[i][j]…

}

}

【例4-11】

定義一個(gè)數(shù)組tmp[3][3],遍歷數(shù)組tmp[3][3]中的元素。

#include<stdio.h>

main()

{ inttmp[3][3],i,j;

printf(“請(qǐng)開(kāi)始為這個(gè)3行3列的數(shù)組輸入值\n”);

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

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

scanf(“%d”,&tmp[i][j]);

printf(“開(kāi)始輸出這個(gè)3行3列的數(shù)組中元素的值\n”);

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

{

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

printf(“%6d”,tmp[i][j]);

printf(“\n”);

}

}圖4-15例4-11程序運(yùn)行結(jié)果4.2.3二維數(shù)組的應(yīng)用

【例4-12】

已知3行4列的矩陣a如下:求a的轉(zhuǎn)置矩陣b,并輸出a和b兩個(gè)矩陣。

轉(zhuǎn)置矩陣是將a的4列數(shù)據(jù)依次變成b的4行,b為4行3列的矩陣。仔細(xì)觀察矩陣a中的數(shù)據(jù)及轉(zhuǎn)置后矩陣b中的數(shù)據(jù),會(huì)發(fā)現(xiàn)其規(guī)律是a[x][y]與b[y][x]的值相同,因此只需將b數(shù)組的每一個(gè)元素b[i][j]賦值為a[j][i],即可實(shí)現(xiàn)矩陣的轉(zhuǎn)置。

圖4-16例4-12程序運(yùn)行結(jié)果

可以把楊輝三角看成是一個(gè)三角矩陣,這樣即可用n行n列的二維數(shù)組a表示。每一行最前面和最后面的數(shù)都是1,即這個(gè)二維數(shù)組的a[i][0]=1,a[i][i]=1。從第三行開(kāi)始,每一行中間的數(shù)是上一行左邊一列的數(shù)與上一行同一列的數(shù)之和,即a[i][j]=a[i-1][j-1]+a[i-1][j]。為了增加程序的靈活性,將這個(gè)用來(lái)存儲(chǔ)楊輝三角的二維數(shù)組定義得大一些,如a[100][100],通過(guò)定義一個(gè)變量num從鍵盤(pán)上獲取楊輝三角要輸出的行數(shù)。為了增加程序的健壯性,將用一個(gè)直到型循環(huán)來(lái)控制num值的有效性(num<=100)。圖4-17例4-13程序運(yùn)行結(jié)果

4.3字符數(shù)組與字符串

4.3.1字符數(shù)組的定義、初始化、引用、遍歷和存儲(chǔ)

1.字符數(shù)組與字符串概念引入

字符數(shù)組是一組字符數(shù)據(jù)的集合。在一個(gè)字符數(shù)組里能存儲(chǔ)多個(gè)字符數(shù)據(jù),這為我們?cè)贑語(yǔ)言中處理字符串提供了一個(gè)思路,即使用字符數(shù)組來(lái)存儲(chǔ)字符串,完成字符串?dāng)?shù)據(jù)的輸入、處理和輸出。

2.字符數(shù)組的定義

在C語(yǔ)言中,定義字符數(shù)組的一般格式如下:

char數(shù)組標(biāo)識(shí)符[常量表達(dá)式][[常量表達(dá)式]…];

其中:“數(shù)組標(biāo)識(shí)符”就是數(shù)組名,必須是合法標(biāo)識(shí)符;“常量表達(dá)式”必須為非負(fù)整型常量表達(dá)式。例如:

charname1[5]; /*定義了具有5個(gè)元素的字符數(shù)組*/

charname2[2][3]; /*定義2×3二維字符數(shù)組*/

charname3[2][3][5]; /*定義2×3×5多維字符數(shù)組*/

圖4-18字符數(shù)組存儲(chǔ)示意圖

4.字符數(shù)組元素的引用

字符數(shù)組元素的引用與普通數(shù)組元素的引用無(wú)差別,其格式如下:

數(shù)組標(biāo)識(shí)符[下標(biāo)]

例如:

charname[10];

name[0]='h'; /*引用數(shù)組name中的元素*/

5.字符數(shù)組的遍歷

由于數(shù)值數(shù)組中明確知道數(shù)值元素的個(gè)數(shù),因此往往使用“for(i=0;i<數(shù)組長(zhǎng)度;i++)”的形式控制下標(biāo)來(lái)遍歷元素。而字符數(shù)組定義時(shí)數(shù)組長(zhǎng)度雖是固定的,但往往數(shù)組內(nèi)存放的字符串長(zhǎng)度不固定,因此不宜使用“for(i=0;i<數(shù)組長(zhǎng)度;i++)”的形式進(jìn)行遍歷。但字符串具有特殊的結(jié)束標(biāo)識(shí)'\0',可以通過(guò)'\0'來(lái)判斷遍歷循環(huán)的終止與否。一般格式如下:

i=0;while(數(shù)組名[i]!='\0'){ …數(shù)組名[i]… i++;}

for(i=0;數(shù)組名[i]!='\0';i++){

…數(shù)組名[i]…}圖4-19例4-14程序運(yùn)行結(jié)果4.3.2字符串輸入/輸出

1.字符串輸出

字符串的輸出可以使用printf函數(shù)或puts函數(shù)來(lái)實(shí)現(xiàn)。

1)printf函數(shù)

使用printf函數(shù)輸出字符串時(shí)的格式字符為“%s”(格式字符“%s”已在2.1.2節(jié)中講述過(guò))。例如程序:

charstr[80]=“China”;

printf(“%s”,“Hello,”);

printf(“%s\n”,str);

輸出結(jié)果如下:

Hello,China

printf函數(shù)依次輸出字符串中的每一個(gè)字符,直到遇到字符串結(jié)束標(biāo)志'\0'。

2)

puts函數(shù)

puts函數(shù)將字符串輸出到標(biāo)準(zhǔn)輸出設(shè)備。其一般格式如下:

puts(字符串表達(dá)式)

其中,“字符串表達(dá)式”可以是字符串常量、字符數(shù)組、字符指針。例如程序:

charstr[80]=“China”;

puts(“Hello,”);

puts(str);

輸出結(jié)果如下:

Hello,China

2.字符串輸入

1)

scanf函數(shù)

使用scanf函數(shù)整體輸入字符串時(shí)的格式字符為“%s”。由于scanf函數(shù)要求提供輸入項(xiàng)的地址,而字符數(shù)組名為數(shù)組存儲(chǔ)空間首地址,因此在輸入項(xiàng)地址列表處提供字符數(shù)組名即可。在學(xué)習(xí)了指針后,輸入項(xiàng)地址列表也可以提供字符指針,詳見(jiàn)第6單元。例如:

chars[80];

scanf("%s",s);

當(dāng)輸入一個(gè)字符串后,系統(tǒng)會(huì)自動(dòng)在字符串后面加上字符串結(jié)束標(biāo)志‘\0’。

需要注意的是,scanf函數(shù)輸入字符串時(shí),系統(tǒng)規(guī)定以空格或【Enter】鍵作為輸入字符串的結(jié)束標(biāo)志,因此若待輸入的字符串中有空格,是不能將完整的字符串輸入的?!纠?-15】

使用scanf函數(shù)輸入字符串。

#include<stdio.h>

main()

{ chars1[80];

printf("請(qǐng)輸入一個(gè)字符串:");

scanf("%s",s1);

printf("字符串為:%s\n",s1);

}

程序運(yùn)行結(jié)果如圖4-20所示。

圖4-20例4-15程序運(yùn)行結(jié)果

2)?gets函數(shù)

gets函數(shù)從標(biāo)準(zhǔn)輸入設(shè)備將字符串輸入給字符數(shù)組或字符指針。其一般格式如下:

gets(字符數(shù)組名或字符指針)

gets函數(shù)輸入字符串時(shí)以【Enter】鍵作為輸入字符串的結(jié)束標(biāo)志,這彌補(bǔ)了scanf函數(shù)不能輸入包含空格的字符串的不足。

【例4-16】

使用gets函數(shù)輸入字符串。

#include<stdio.h>

main()

{ chars1[80];

printf("請(qǐng)輸入一個(gè)字符串:");

gets(s1);

puts("字符串為:");

puts(s1);

}

圖4-21例4-16程序運(yùn)行結(jié)果4.3.3字符串?dāng)?shù)組

由于字符串是字符類型的一維數(shù)組,因此字符串的一維數(shù)組其實(shí)就是字符類型的二維數(shù)組。例如:

charstr[3][50];

既可以將str看成是一個(gè)二維的3行50列的字符數(shù)組,也可以將str看成是一個(gè)具有3個(gè)元素的字符串一維數(shù)組,當(dāng)然它的每一個(gè)元素都是一個(gè)字符串,也即是一個(gè)一維的字符數(shù)組。圖4-22例4-17程序運(yùn)行結(jié)果4.3.4字符數(shù)組的應(yīng)用

【例4-18】

將從鍵盤(pán)上輸入的一串字符逆序輸出。

首先借助gets函數(shù)解決從鍵盤(pán)獲取一串字符的問(wèn)題,避免了使用scanf函數(shù)不能完整獲取一行字符的問(wèn)題。實(shí)現(xiàn)逆序輸出有兩個(gè)方法:方法一是從字符數(shù)組的最后一個(gè)字符開(kāi)始倒著向前輸出,字符元素的存儲(chǔ)位置不進(jìn)行置換,如圖4-23所示;方法二是將字符數(shù)組里的元素存儲(chǔ)位置進(jìn)行置換,如圖4-24所示。本例采用方法二。圖4-23逆序輸出字符數(shù)組元素圖4-24置換字符數(shù)組元素圖4-25

溫馨提示

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

評(píng)論

0/150

提交評(píng)論