版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第5章
數(shù)組理解數(shù)組概念及其在內(nèi)存中的存儲(chǔ)結(jié)構(gòu)一維數(shù)組定義、初始化、引用二維數(shù)組定義、初始化、引用字符數(shù)組及字符串使用數(shù)組處理批量同類型數(shù)據(jù)問題應(yīng)用所學(xué)知識(shí)靈活處理數(shù)據(jù)存儲(chǔ)問題本章目標(biāo)例5-1考試成績統(tǒng)計(jì),輸入一組學(xué)生成績以-1作為結(jié)束標(biāo)記,計(jì)算所有成績的平均分并統(tǒng)計(jì)高于平均分人數(shù)。分析:輸入一組數(shù)據(jù)求平均分,使用循環(huán)就可以解決,讀入數(shù)據(jù)累加,然后計(jì)算平均分(后讀入數(shù)據(jù)覆蓋先讀入數(shù)據(jù))若要統(tǒng)計(jì)高于平均分人數(shù),就需要遍歷之前所有輸入的成績數(shù)據(jù),但是之前所學(xué)知識(shí)無法解決這個(gè)問題。使用數(shù)組存儲(chǔ)讀入的成績數(shù)據(jù),再求出平均分后,再遍歷成績數(shù)組,統(tǒng)計(jì)出高于平均分的人數(shù)。5.1初識(shí)數(shù)組
例5-1代碼#include<stdio.h>intmain(){floatsum=0,ave;intscore;
intscores[100];intnum=0,count=0,i;printf("請輸入學(xué)生成績(以-1作為結(jié)束標(biāo)記):\n");scanf("%d",&score);while(score!=-1){
scores[num]=score;sum+=score;num++;scanf("%d",&score);}if(num!=0){ave=sum/num;printf("學(xué)生平均成績?yōu)椋?.1f\n",ave);for(i=0;i<num;i++)if(scores[i]>ave)count++;printf("高于平均成績的學(xué)生人數(shù)為%d\n",count);}elseprintf("沒有輸入有效成績!\n");return0;}一維數(shù)組的定義形式:
類型名數(shù)組名[數(shù)組長度]說明:類型名確定每個(gè)數(shù)組元素的數(shù)據(jù)類型數(shù)組名是數(shù)組變量的名稱,需要滿足標(biāo)識(shí)符命名原則數(shù)組長度,必須是確定的值5.1.2一維數(shù)組的定義及使用intnum[5];#defineM5......intnum[M];intn=5;intnum[n];
數(shù)組在內(nèi)存中的存儲(chǔ)數(shù)組初始化格式
類型名數(shù)組名[數(shù)組長度]={數(shù)組元素初值表};例如:intnum[5]={25,13,-12,36,54};intnum[]={25,13,-12,36,54};intnum[5]={25,13};說明:定義同時(shí)為數(shù)組元素賦值若對所有元素賦值,可以省略數(shù)組長度數(shù)組的初始化數(shù)組元素引用:數(shù)組名[下標(biāo)]例如:num[i+1]=num[i]*2;說明:數(shù)組下標(biāo)從0開始,可以使用的范圍為0~數(shù)組長度-1注意數(shù)組下標(biāo)不能越界數(shù)組定義完成后,只能通過下標(biāo)對數(shù)組每個(gè)元素進(jìn)行單獨(dú)的使用,而不能單獨(dú)使用數(shù)組名對整個(gè)數(shù)組進(jìn)行訪問數(shù)組元素的引用intnum[5];inti;for(i=0;i<5;i++)num[i]=i*2;1、遍歷數(shù)組【例5-2】鍵盤輸入一個(gè)班級人數(shù)n,以及n個(gè)學(xué)生《C語言程序設(shè)計(jì)》的分?jǐn)?shù),請編寫程序?qū)Τ煽冞M(jìn)行分析,即統(tǒng)計(jì)最高分、最低分、平均分以及及格比例。分析n個(gè)學(xué)生成績需要記錄,所以使用數(shù)組分析時(shí),需要遍歷所有學(xué)生成績,通過數(shù)組下標(biāo)的變化實(shí)現(xiàn)對數(shù)組元素的遍歷程序分為三部分設(shè)計(jì):數(shù)據(jù)輸入、找最大最小、輸出結(jié)果使用一維數(shù)組解決問題
示例代碼#include<stdio.h>intmain(){intscores[50],max,min,sum=0;intnum,i,count=0;doubleave,rate;printf("請輸入學(xué)生人數(shù):");scanf("%d",&num);printf("請輸入學(xué)生成績:\n");for(i=0;i<num;i++)scanf("%d",&scores[i]);max=scores[0];min=scores[0];for(i=0;i<num;i++){sum+=scores[i];if(max<scores[i])max=scores[i];if(min>scores[i])min=scores[i];if(scores[i]>=60)count++;}
/*平均分定義為double類型,計(jì)算時(shí)將sum強(qiáng)制類型轉(zhuǎn)換為double*/ave=(double)sum/num;/*計(jì)算及格率時(shí),需要將count強(qiáng)制類型轉(zhuǎn)換為double類型*/rate=1.0*count/num;printf("******成績分析*******\n");printf("最高分是:%d,最低分是:%d\n",max,min);/*輸出使用格式控制符%0.1lf指明輸出保留1位小數(shù)*/printf("平均分是:%0.1lf\n",ave);/*使用%%輸出%,輸出百分比結(jié)果因此輸出內(nèi)容為rate*100*/printf("及格率:%.1lf%%",rate*100);return0;}2、查找數(shù)組【例5-3】有一門課程的考試成績,按照學(xué)號(hào)順序存在數(shù)組中,現(xiàn)在輸入一個(gè)成績,想知道考這個(gè)成績的學(xué)生學(xué)號(hào),該如何實(shí)現(xiàn)呢?分析查找問題,遍歷數(shù)組,找到后對應(yīng)下標(biāo)即為所求查找的兩種情況:1、遍歷數(shù)組,找到第一個(gè)就結(jié)束(從循環(huán)中break)2、遍歷數(shù)組,要找到所有相等的數(shù)據(jù)(遍歷所有元素,設(shè)置是否找到的標(biāo)記)使用一維數(shù)組解決問題
示例代碼#include<stdio.h>#defineM50intmain(){intiScore[M],input;intiNum,i,flag=0;/*flag標(biāo)記是否查找到,0表示沒有查找到*/printf("請輸入班級人數(shù):");scanf("%d",&iNum);printf("請輸入%d個(gè)成績:\n",iNum);for(i=0;i<iNum;i++)scanf("%d",&iScore[i]);printf("請輸入待查詢成績:");scanf("%d",&input);
for(i=0;i<iNum;i++)if(input==iScore[i]){if(flag==0)printf("成績?yōu)?d的學(xué)號(hào)為:%d",input,i+1);/*如果是第一次找到則輸出*//*學(xué)號(hào)從1開始,而數(shù)組下標(biāo)從0開始,所以返回i+1*/elseprintf("%d",i+1);flag=1;}if(flag==0)printf("沒有找到成績?yōu)?d的學(xué)生",input);return0;}3、數(shù)組中插入數(shù)據(jù)【例5-4】老師在錄入成績結(jié)束后核對發(fā)現(xiàn),有一個(gè)同學(xué)的成績落下了,導(dǎo)致從這個(gè)同學(xué)往后所有的同學(xué)成績都向前串了一位。輸入落下的同學(xué)的學(xué)號(hào)及對應(yīng)的成績,請編寫程序幫助老師將成績單整理正確。分析列表插入問題不能直接在對應(yīng)位置賦值需要將后面的元素一次后移使用一維數(shù)組解決問題
示例代碼#include<stdio.h>#defineM20intmain(){intiScore[M]={0,78,87,98,87,68,79,82,96,77};/*為使學(xué)號(hào)與下標(biāo)對應(yīng),成績從第1個(gè)數(shù)組元素開始存儲(chǔ)*/intiId,i,input;printf("請輸入插入成績的學(xué)號(hào):");scanf("%d",&iId);printf("請輸入插入的成績:");scanf("%d",&input);
if(iId<1||iId>10)printf("輸入學(xué)號(hào)有誤!\n");else{for(i=10;i>iId;i--)iScore[i]=iScore[i-1];iScore[i]=input;}printf("插入的成績序列:");for(i=1;i<=10;i++)printf("%d",iScore[i]);return0;}4、借助數(shù)組計(jì)數(shù)【例5-5】一門課程期末考試成績出來后,老師想了解得分情況,請你編寫程序統(tǒng)計(jì)一下每個(gè)分?jǐn)?shù)成績都有多少人。分析要統(tǒng)計(jì)每個(gè)分?jǐn)?shù)的人數(shù),從第一個(gè)出現(xiàn)的成績開始計(jì)數(shù),會(huì)使程序十分復(fù)雜。百分制成績數(shù)據(jù)范圍一定在0~100之間,將成績作為數(shù)組下標(biāo),數(shù)組元素值用來計(jì)數(shù)iCount[88]對應(yīng)的值為分?jǐn)?shù)為88的人數(shù)。使用一維數(shù)組解決問題
示例代碼#include<stdio.h>#defineM50intmain(){intiScore[M],iNum,i;intiCount[101]={0};/*使用iCount[i]記錄成績?yōu)閕的學(xué)生人數(shù)*/printf("請輸入總?cè)藬?shù):");scanf("%d",&iNum);printf("請輸入%d個(gè)成績:\n",iNum);for(i=0;i<iNum;i++)scanf("%d",&iScore[i]);for(i=0;i<iNum;i++)/*成績iScore[i]對應(yīng)下標(biāo)的iCount數(shù)組元素累加*/iCount[iScore[i]]++;for(i=100;i>=0;i--)if(iCount[i]!=0)printf("%d分%d人\n",i,iCount[i]);return0;}5、排序問題【例5-6】期末考試結(jié)束后,若需要對一個(gè)班級學(xué)生的《C語言程序設(shè)計(jì)》成績進(jìn)行排序,應(yīng)該如何完成呢?排序問題,先將問題進(jìn)行分解:從第0個(gè)元素開始,找到數(shù)組的最大值的下標(biāo)將最大值與第0個(gè)元素互換從第i個(gè)元素開始向后,找到最大值的下標(biāo),并且將最大值與第i個(gè)元素互換i從0到n-1,重復(fù)第3個(gè)步驟實(shí)現(xiàn)排序(選擇法排序)使用一維數(shù)組解決問題從第0個(gè)元素開始,找到數(shù)組的最大值的下標(biāo)
從第0個(gè)元素開始,找到數(shù)組的最大值的下標(biāo)#include<stdio.h>#defineM50intmain(){intiScore[M],iNum,k,maxIndex;printf("請輸入總?cè)藬?shù):");scanf("%d",&iNum);printf("請輸入%d個(gè)成績:\n",iNum);for(k=0;k<iNum;k++)scanf("%d",&iScore[k]);/*使用maxIndex記錄最大值下標(biāo),iScore[maxIndex]為當(dāng)前最大值初始假設(shè)iScore[0]為最大值,因此初始時(shí)maxIndex=0*/maxIndex=0;for(k=1;k<iNum;k++)/*遍歷數(shù)組,若記錄的最大值比當(dāng)前元素值小,則更新最大值下標(biāo)*/if(iScore[maxIndex]<iScore[k])maxIndex=k;printf("成績最大值為%d,下標(biāo)為%d\n",iScore[maxIndex],maxIndex);return0;}
將最大值與第0個(gè)元素互換inttmp;tmp=iScore[0];iScore[0]=iScore[maxIndex];iScore[maxIndex]=tmp;
從第i個(gè)元素開始向后,找到最大值的下標(biāo),并且將最大值與第i個(gè)元素互換maxIndex=i;for(k=i+1;k<iNum;k++)
/*遍歷數(shù)組,若記錄的最大值比當(dāng)前元素值小,則更新最大值下標(biāo)*/if(iScore[maxIndex]<iScore[k])maxIndex=k;tmp=iScore[i];iScore[i]=iScore[maxIndex];iScore[maxIndex]=tmp;
i從0到n-1,重復(fù)第3個(gè)步驟實(shí)現(xiàn)排序(選擇法排序)
i從0到n-1,重復(fù)第3個(gè)步驟實(shí)現(xiàn)排序(選擇法排序)6、借助數(shù)組使程序易于維護(hù)【例5-7】學(xué)校每學(xué)期都會(huì)進(jìn)行獎(jiǎng)學(xué)金的評定,綜合獎(jiǎng)學(xué)金的評定成績由以下幾部分構(gòu)成:學(xué)業(yè)平均成績80%,競賽獲獎(jiǎng)10%,班級貢獻(xiàn)5%,活動(dòng)參與5%,現(xiàn)在已知一位同學(xué)每部分百分制成績,使用數(shù)組存儲(chǔ),請計(jì)算他的綜合評定成績。要考慮程序的可維護(hù)性。軟件維護(hù)是指在軟件產(chǎn)品發(fā)布后,因修正錯(cuò)誤、提升性能或其他屬性而進(jìn)行的軟件修改為了便于維護(hù),將每個(gè)分項(xiàng)成績的占比存放在數(shù)組中,將來修改更方便使用一維數(shù)組解決問題
示例代碼#include<stdio.h>#defineM5intmain(){intiScore[M]={0};intiRate[M]={0,80,10,5,5};/*分項(xiàng)成績存儲(chǔ)在iScore[1]~iScore[4]中,綜合成績計(jì)算完成存入iScore[0]*/inti;printf("請輸入學(xué)業(yè)平均成績、競賽獲獎(jiǎng)、班級貢獻(xiàn)和活動(dòng)參與成績:\n");for(i=1;i<M;i++)scanf("%d",&iScore[i]);for(i=1;i<M;i++)iScore[0]+=iScore[i]*iRate[i];iScore[0]/=100;printf("該同學(xué)綜合成績是:%d\n",iScore[0]);return0;}【例5-8】輸入一個(gè)專業(yè)所有學(xué)生的學(xué)業(yè)平均成績、競賽獲獎(jiǎng)成績、班級貢獻(xiàn)成績、活動(dòng)參與成績,并且按照學(xué)業(yè)平均成績80%,競賽獲獎(jiǎng)10%,班級貢獻(xiàn)5%,活動(dòng)參與5%來計(jì)算每個(gè)學(xué)生的綜合成績,請編寫程序完成這個(gè)任務(wù)。二維數(shù)組解決該問題每個(gè)學(xué)生有四項(xiàng)成績,需要使用數(shù)組記錄(一個(gè)維度)多個(gè)學(xué)生構(gòu)成另一個(gè)維度5.2二維數(shù)組
#include<stdio.h>#defineMAXSTUNUM50#defineM5intmain(){
intiScore[MAXSTUNUM][M]={0};intiRate[5]={0,80,10,5,5};/*分項(xiàng)成績存儲(chǔ)在iScore[1]~iScore[4]中,綜合成績計(jì)算完成存入iScore[0]*/inti,j,iNum;printf("請輸入學(xué)生人數(shù):");scanf("%d",&iNum);printf("請輸入每位學(xué)生的學(xué)業(yè)平均成績、競賽獲獎(jiǎng)、班級貢獻(xiàn)和活動(dòng)參與成績:\n");for(j=0;j<iNum;j++)for(i=1;i<M;i++)scanf("%d",&iScore[j][i]);
for(j=0;j<iNum;j++){for(i=1;i<M;i++)iScore[j][0]+=iScore[j][i]*iRate[i];iScore[j][0]/=100;}for(j=0;j<iNum;j++)printf("第%d位同學(xué)的綜合成績是:%d\n",j+1,iScore[j][0]);return0;}二維數(shù)組定義形式:類型名
數(shù)組名[行長度][列長度]intnum[2][3];1、二維數(shù)組定義5.2.2二維及多維數(shù)組定義、初始化及引用2、二維數(shù)組初始化按行進(jìn)行初始化intnum[2][3]={{1,2,3},{4,5,6}};順序初始化intnum[2][3]={1,2,3,4,5,6};5.2.2二維及多維數(shù)組定義、初始化及引用3、二維數(shù)組引用二維數(shù)組引用形式:數(shù)組名[行下標(biāo)][列下標(biāo)]
行(列)下標(biāo)取值范圍[0,行(列)長度-1],可以是整型表達(dá)式。下列代碼段以矩陣形式輸出二維數(shù)組num。5.2.2二維及多維數(shù)組定義、初始化及引用inti,j,num[2][3]={1,2,3,4,5,6};for(i=0;i<2;i++){for(j=0;j<3;j++)printf(“%d“,num[i][j]);putchar(“\n”);}1、與矩陣相關(guān)操作【例5-9】給定一個(gè)n階方陣,請編寫程序判斷這個(gè)矩陣是否為對稱矩陣,所謂對稱矩陣是指矩陣經(jīng)過行列互換后得到的矩陣與原矩陣相等的矩陣。分析:使用二維數(shù)組記錄方陣內(nèi)容通過對行i和列j進(jìn)行遍歷,判斷方陣特點(diǎn)5.2.3二維數(shù)組應(yīng)用
示例代碼#include<stdio.h>#defineM10intmain(){intn,i,j,iMatrix[M][M];printf("請輸入矩陣的階數(shù):");scanf("%d",&n);printf("請輸入矩陣:\n");for(i=0;i<n;i++)for(j=0;j<n;j++)scanf("%d",&iMatrix[i][j]);
for(i=0;i<n;i++){for(j=0;j<n;j++)if(iMatrix[i][j]!=iMatrix[j][i])break;if(j<n)break;}if(i>=n)printf("該矩陣是對稱矩陣\n");elseprintf("該矩陣不是對稱矩陣\n");return0;}2、二維數(shù)組的排序問題【例5-10】學(xué)校評獎(jiǎng)學(xué)金,在求得一個(gè)專業(yè)每位同學(xué)的綜合評定成績后,請編寫程序輸出學(xué)生的學(xué)號(hào)排名。分析:需要存儲(chǔ)的信息包括兩部分:學(xué)號(hào)和成績問題解決方案兩種:學(xué)號(hào)信息使用一個(gè)數(shù)組,成績使用另一個(gè)數(shù)組,對成績數(shù)組排序,交換數(shù)據(jù)時(shí)同步交換學(xué)號(hào)信息學(xué)號(hào)和成績作為數(shù)據(jù)的一個(gè)維度,所有數(shù)據(jù)存儲(chǔ)在一個(gè)二維數(shù)組中,對二維數(shù)組進(jìn)行排序?qū)ΧS數(shù)組排序,分析排序依據(jù)和交換數(shù)據(jù)對象5.2.3二維數(shù)組應(yīng)用
排序依據(jù)交換數(shù)據(jù)
關(guān)鍵代碼/*對數(shù)組進(jìn)行排序,排序依據(jù)是iScore[i][1]*/for(i=0;i<iNum-1;i++){index=i;for(j=i+1;j<iNum;j++)/*找到當(dāng)前最大成績行下標(biāo)*/if(iScore[j][1]>iScore[index][1])index=j;/*將最大成績行整體與最前面的行互換,因此需要遍歷所有列*/for(k=0;k<2;k++){tmpScore[k]=iScore[i][k];iScore[i][k]=iScore[index][k];iScore[index][k]=tmpScore[k];}}
【例5-11】圖靈在中學(xué)時(shí)代就對密碼產(chǎn)生濃厚的興趣,他與好朋友使用加密的內(nèi)容傳遞小紙條。加密的規(guī)則是確定好一個(gè)秘鑰key(絕對值10以內(nèi)的數(shù)字),然后將消息中的字母使用字母表順序該字母后key個(gè)字母替換。例如key是1,則消息中”A”用”B”替換,”B”用”C”替換,以此類推,最后”Z”用”A”替換。有一天圖靈收到一條消息”WIICSYMEXASPSRKAIIOWHIEVIWXJVMIRH”已知秘鑰是-4,請編寫程序破譯一下這條消息吧。分析:讀入消息,將字符對應(yīng)的ASCII碼加秘鑰后輸出對應(yīng)的字符批量的字符處理方式5.3字符串
示例代碼#include<stdio.h>#defineM500intmain(){charstrCode[M];intkey;inti;printf("請輸入秘鑰:");scanf("%d",&key);getchar();
printf("請輸入待解密的字符串以回車結(jié)束:\n");gets(strCode);for(i=0;strCode[i]!='\0';i++){/*小寫字母的處理,將字符加秘鑰*/if(strCode[i]>='a'&&strCode[i]<='z'){strCode[i]+=key;/*累加完超過字母范圍處理*/if(strCode[i]>'z')strCode[i]-=26;elseif(strCode[i]<'a')strCode[i]+=26;}
/*大寫字母的處理,將字符加秘鑰*/elseif(strCode[i]>='A'&&strCode[i]<='Z'){strCode[i]+=key;if(strCode[i]>'Z')strCode[i]-=26;elseif(strCode[i]<'A')strCode[i]+=26;}}printf("解密后字符串為:\n");puts(strCode);return0;}字符串常量“IloveProgramming!”是一個(gè)字符串常量字符串特點(diǎn)字符串由字符序列和字符串結(jié)束符’\0’構(gòu)成,字符串結(jié)束符’\0’對應(yīng)ASCII表0,是不可見字符,占用存儲(chǔ)空間。字符串“IloveProgramming!”由字符序列IloveProgramming!和不可見的’\0’構(gòu)成。字符串中的字符序列稱為字符串的有效字符。5.3.2使用字符數(shù)組存放字符串C語言沒有字符串類型,字符串使用一維字符數(shù)組存儲(chǔ)。charstr[20]=“LOVE”用字符串對字符數(shù)組初始化時(shí),字符數(shù)組長度可以省略不寫,但其真實(shí)長度是字符串長度+1。charstr1[]=“LOVE”charstr2[]={‘L’,‘O’,‘V’,‘E’}通過判斷字符串結(jié)束符’\0’來判斷字符串的結(jié)束for(length=0;str[length]!=‘\0’;length++);使用字符數(shù)組存放字符串的要點(diǎn)長度不一樣!1、字符串輸入輸出函數(shù)1)使用格式控制符”%s”的scanf函數(shù)和printf函數(shù)scanf(“%s”,str); /*str為存放字符數(shù)組名*/printf(“%s”,str); /*str為存放字符數(shù)組名*/2)gets函數(shù)和puts函數(shù)<string.h>gets(str); /*str為存放字符串的字符數(shù)組*/puts(str); /*str為存放字符串的字符數(shù)組*/5.3.3與字符串相關(guān)的函數(shù)1、字符串輸入輸出函數(shù)注意兩組函數(shù)的差別:1、scanf使用%s讀取字符串時(shí),遇到空格、回車或是制表符輸入結(jié)束;gets函數(shù)從鍵盤讀入字符串,遇到回車符輸入結(jié)束2、printf使用%s直接輸出字符串;puts函數(shù)將str中存儲(chǔ)字符串輸出到終端,并在字符串結(jié)尾出輸出回車。5.3.3與字符串相關(guān)的函數(shù)【例5-12】從鍵盤讀入一個(gè)單詞,統(tǒng)計(jì)單詞中每個(gè)字母出現(xiàn)的次數(shù)。分析:程序要求讀入一個(gè)單詞,因此中間沒有空格,可以使用scanf語句讀入。要統(tǒng)計(jì)每個(gè)字母出現(xiàn)的次數(shù),字母的個(gè)數(shù)是有限的26個(gè),結(jié)合一維數(shù)組中介紹的方法,可以使用一個(gè)長度為26的整型數(shù)組依次存儲(chǔ)字母A(a)到Z(z)出現(xiàn)的次數(shù),將每個(gè)字母的ASCII碼轉(zhuǎn)換為對應(yīng)字母的下標(biāo),進(jìn)行計(jì)數(shù)。字符串輸入輸出示例
代碼示例#include<stdio.h>#defineM20intmain(){charstrWord[M];intiCount[26]={0},i;printf("請輸入一個(gè)單詞:\n");scanf("%s",strWord);for(i=0;strWord[i]!='\0';i++)if(strWord[i]>='a'&&strWord[i]<='z')/*找到字母strWord[i]對應(yīng)下標(biāo)累加*/iCount[strWord[i]-'a']++;elseif(strWord[i]>='A'&&strWord[i]<='Z')iCount[strWord[i]-'A']++;printf("%s中出現(xiàn)的字符為:\n");for(i=0;i<26;i++)if(iCount[i]!=0)printf("%c:%d\n",i+'A',iCount[i]);return0;}【例5-13】鍵盤輸入一個(gè)段落,統(tǒng)計(jì)其中一共出現(xiàn)多少個(gè)單詞。分析:要統(tǒng)計(jì)段落中出現(xiàn)的單詞數(shù),因此輸入包括空格,字符串讀入使用gets函數(shù)。統(tǒng)計(jì)單詞個(gè)數(shù)就需要在每次遇到新單詞時(shí)進(jìn)行計(jì)數(shù),如何才能確定當(dāng)前字符是新單詞的開始呢?設(shè)置一個(gè)標(biāo)記位,在遇到非字母符號(hào)時(shí)標(biāo)記為1,這樣遇到字母符號(hào)當(dāng)標(biāo)記為為1就表示是新單詞的開始。字符串輸入輸出示例
示例代碼#include<stdio.h>#defineM500intmain(){charstrPara[M];intnewWflag=1,iWordCount=0,i;intisLetter;printf("請輸入段落:\n");gets(strPara);for(i=0;strPara[i]!='\0';i++){isLetter=strPara[i]>='A'&&strPara[i]<='Z'||strPara[i]>='a'&&strPara[i]<='z';if(!isLetter)newWflag=1;elseif(isLetter&&newWflag==1){iWordCount++;newWflag=0;}}printf("文中出現(xiàn)了%d個(gè)單詞\n",iWordCount);return0;}2、其他字符串函數(shù)頭文件string.h中1、字符串長度函數(shù)strlen2、字符串復(fù)制函數(shù)strcpy3、字符串連接函數(shù)strcat4、字符串比較函數(shù)strcmp5.3.3與字符串相關(guān)的函數(shù)1、strlenstrlen(str); /*返回字符串有效字符長度*/例如:charstr[]=“LOVE”;printf(“%d”,strlen(str));輸出為4,因?yàn)椤盠OVE”有效字符長度為4,但是需要注意這里str占用的字節(jié)數(shù)是5(有效字符長度+’\0’)。字符串函數(shù)2、strcpystrcpy(str1,str2); /*將字符串str2拷貝到str1中*/例如:charstr1[20],str2[]=“Programming”;/*參數(shù)str1必須定義為字符數(shù)組*/strcpy(str1,str2);puts(str1);將輸出Programming。字符串函數(shù)2、strcpycharstr1[20]=“Love”,str2[]=“Programming”;strcpy(str2,str1);puts(str2);字符串函數(shù)3、strcatstrcat(str1,str2) /*將str2連接到str1后面,生成的新字符串存儲(chǔ)在str1中*/例如:charstr1[20]=“Love”,str2[]=“Programming”;strcat(str1,str2);puts(str1);輸出:LoveProgramming字符串函數(shù)4、strcmp例如:strcmp(“Love”,“Love”); /*返回0*/strcmp(“Love”,“Love“);/*返回負(fù)值,str2后面有空格*/strcmp(“Love”,“LOVE”);/*返回正值*/字符串函數(shù)字符串函數(shù)例題【例5-14】輸入3個(gè)字符串,請按字符串長度從小到大對這三個(gè)字符串排序#include<stdio.h>#include<string.h>#defineM20intmain(){charstrA[M],strB[M],strC[M],strTmp[M];printf("請輸入字符串A:");gets(strA);pri
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版智慧城市基礎(chǔ)設(shè)施施工進(jìn)度管理協(xié)議3篇
- 2025年度體育場館建設(shè)承包合同書模板8篇
- 2024精油購銷合同范本
- 2025年度個(gè)人房屋建造項(xiàng)目驗(yàn)收標(biāo)準(zhǔn)合同4篇
- 2025年物流信息化平臺(tái)開發(fā)與應(yīng)用合同3篇
- 二零二五年度集體土地征收補(bǔ)償安置協(xié)議范本3篇
- 2025版二手房買賣合同示范文本4篇
- 2025版協(xié)議離婚條件及程序法律援助與指導(dǎo)合同3篇
- 2025年度個(gè)人股權(quán)質(zhì)押股權(quán)投資基金管理合同(專業(yè)管理版)3篇
- 2025版美術(shù)教師教育項(xiàng)目評估聘用合同協(xié)議4篇
- 生物人教版七年級(上冊)第一章第一節(jié) 生物的特征 (共28張)2024版新教材
- 2025屆安徽省皖南八校高三上學(xué)期8月摸底考試英語試題+
- 工會(huì)資金采購管理辦法
- 玩具活動(dòng)方案設(shè)計(jì)
- Q∕GDW 516-2010 500kV~1000kV 輸電線路劣化懸式絕緣子檢測規(guī)程
- 2024年湖南汽車工程職業(yè)學(xué)院單招職業(yè)技能測試題庫及答案解析
- 家長心理健康教育知識(shí)講座
- GB/T 292-2023滾動(dòng)軸承角接觸球軸承外形尺寸
- 2024年九省聯(lián)考高考數(shù)學(xué)卷試題真題答案詳解(精校打?。?/a>
- 軍人結(jié)婚函調(diào)報(bào)告表
- 民用無人駕駛航空器實(shí)名制登記管理規(guī)定
評論
0/150
提交評論