




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第5章利用數(shù)組處理批量數(shù)據(jù).第5章利用數(shù)組處理批量數(shù)據(jù).1前幾章使用的變量都屬于基本類型,例如整型、字符型、浮點(diǎn)型數(shù)據(jù),這些都是簡(jiǎn)單的數(shù)據(jù)類型。對(duì)于有些數(shù)據(jù),只用簡(jiǎn)單的數(shù)據(jù)類型是不夠的,難以反映出數(shù)據(jù)的特點(diǎn),也難以有效地進(jìn)行處理。.前幾章使用的變量都屬于基本類型,例如整型、字符型、浮點(diǎn)型數(shù)據(jù)2如果有1000名學(xué)生,每個(gè)學(xué)生有一個(gè)成績(jī),需要求這1000名學(xué)生的平均成績(jī)。用s1,s2,s3,……,s1000表示每個(gè)學(xué)生的成績(jī),能體現(xiàn)內(nèi)在聯(lián)系。C語(yǔ)言用方括號(hào)中的數(shù)字表示下標(biāo),如用s[15]表示數(shù)組名.如果有1000名學(xué)生,每個(gè)學(xué)生有一個(gè)成績(jī),需要求這1000名3數(shù)組是一組有序數(shù)據(jù)的集合。數(shù)組中各數(shù)據(jù)的排列是有一定規(guī)律的,下標(biāo)代表數(shù)據(jù)在數(shù)組中的序號(hào)用一個(gè)數(shù)組名和下標(biāo)惟一確定數(shù)組中的元素?cái)?shù)組中的每一個(gè)元素都屬于同一個(gè)數(shù)據(jù)類型.數(shù)組是一組有序數(shù)據(jù)的集合。數(shù)組中各數(shù)據(jù)的排列是有一定規(guī)律的,45.1怎樣定義和引用一維數(shù)組5.2怎樣定義和引用二維數(shù)組5.3字符數(shù)組.5.1怎樣定義和引用一維數(shù)組.55.1怎樣定義和引用一維數(shù)組5.1.1怎樣定義一維數(shù)組5.1.2怎樣引用一維數(shù)組元素5.1.3一維數(shù)組的初始化5.1.4一維數(shù)組程序舉例.5.1怎樣定義和引用一維數(shù)組5.1.1怎樣定義一維數(shù)組.65.1.1怎樣定義一維數(shù)組一維數(shù)組是數(shù)組中最簡(jiǎn)單的它的元素只需要用數(shù)組名加一個(gè)下標(biāo),就能惟一確定要使用數(shù)組,必須在程序中先定義數(shù)組.5.1.1怎樣定義一維數(shù)組一維數(shù)組是數(shù)組中最簡(jiǎn)單的.75.1.1怎樣定義一維數(shù)組定義一維數(shù)組的一般形式為:
類型符
數(shù)組名[常量表達(dá)式];數(shù)組名的命名規(guī)則和變量名相同如inta[10];數(shù)組名.5.1.1怎樣定義一維數(shù)組定義一維數(shù)組的一般形式為:數(shù)組名.85.1.1怎樣定義一維數(shù)組定義一維數(shù)組的一般形式為:
類型符
數(shù)組名[常量表達(dá)式];數(shù)組名的命名規(guī)則和變量名相同如inta[10];數(shù)組長(zhǎng)度.5.1.1怎樣定義一維數(shù)組定義一維數(shù)組的一般形式為:數(shù)組長(zhǎng)度95.1.1怎樣定義一維數(shù)組定義一維數(shù)組的一般形式為:
類型符
數(shù)組名[常量表達(dá)式];數(shù)組名的命名規(guī)則和變量名相同如inta[10];10個(gè)元素:a[0],a[1],a[2],…,a[9]每個(gè)元素的數(shù)據(jù)類型a[0]a[1]a[2]a[3]…a[7]a[8]a[9].5.1.1怎樣定義一維數(shù)組定義一維數(shù)組的一般形式為:每個(gè)元素105.1.1怎樣定義一維數(shù)組定義一維數(shù)組的一般形式為:
類型符
數(shù)組名[常量表達(dá)式];inta[4+6];合法intn=10;inta[n];不合法.5.1.1怎樣定義一維數(shù)組定義一維數(shù)組的一般形式為:不合法.115.1.2怎樣引用一維數(shù)組元素在定義數(shù)組并對(duì)其中各元素賦值后,就可以引用數(shù)組中的元素注意:只能引用數(shù)組元素而不能一次整體調(diào)用整個(gè)數(shù)組全部元素的值.5.1.2怎樣引用一維數(shù)組元素在定義數(shù)組并對(duì)其中各元素賦值125.1.2怎樣引用一維數(shù)組元素引用數(shù)組元素的表示形式為:
數(shù)組名[下標(biāo)]如a[0]=a[5]+a[7]-a[2*3]合法intn=5,a[10];a[n]=20;合法.5.1.2怎樣引用一維數(shù)組元素引用數(shù)組元素的表示形式為:合135.1.2怎樣引用一維數(shù)組元素
例5.1對(duì)10個(gè)數(shù)組元素依次賦值為0,1,2,3,4,5,6,7,8,9,要求按逆序輸出。解題思路:定義一個(gè)長(zhǎng)度為10的數(shù)組,數(shù)組定義為整型要賦的值是從0到9,可以用循環(huán)來(lái)賦值用循環(huán)按下標(biāo)從大到小輸出這10個(gè)元素.5.1.2怎樣引用一維數(shù)組元素例5.1對(duì)10個(gè)數(shù)組元14#include<stdio.h>intmain(){inti,a[10];for(i=0;i<=9;i++)a[i]=i;for(i=9;i>=0;i--)printf("%d",a[i]);printf("\n");return0;}使a[0]~a[9]的值為0~90123456789a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9].#include<stdio.h>使a[0]~a[9]的值15#include<stdio.h>intmain(){inti,a[10];for(i=0;i<=9;i++)a[i]=i;for(i=9;i>=0;i--)printf("%d",a[i]);printf("\n");return0;}先輸出a[9],最后輸出a[0]0123456789a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9].#include<stdio.h>先輸出a[9],最后輸出165.1.3一維數(shù)組的初始化在定義數(shù)組的同時(shí),給各數(shù)組元素賦值inta[10]={0,1,2,3,4,5,6,7,8,9};inta[10]={0,1,2,3,4};相當(dāng)于inta[10]={0,1,2,3,4,0,0,0,0,0};inta[10]={0,0,0,0,0,0,0,0,0,0};相當(dāng)于inta[10]={0};inta[5]={1,2,3,4,5};可寫(xiě)為inta[]={1,2,3,4,5};.5.1.3一維數(shù)組的初始化在定義數(shù)組的同時(shí),給各數(shù)組元素賦值175.1.4一維數(shù)組程序舉例
例5.2用數(shù)組處理求Fibonacci數(shù)列問(wèn)題解題思路:例5.8中用簡(jiǎn)單變量處理的,缺點(diǎn)不能在內(nèi)存中保存這些數(shù)。假如想直接輸出數(shù)列中第25個(gè)數(shù),是很困難的。如果用數(shù)組處理,每一個(gè)數(shù)組元素代表數(shù)列中的一個(gè)數(shù),依次求出各數(shù)并存放在相應(yīng)的數(shù)組元素中.5.1.4一維數(shù)組程序舉例例5.2用數(shù)組處理求Fib18#include<stdio.h>intmain(){inti;intf[20]={1,1};for(i=2;i<20;i++)f[i]=f[i-2]+f[i-1];for(i=0;i<20;i++){if(i%5==0)printf(“\n”);printf(“%12d”,f[i]);}printf("\n");return0;}.#include<stdio.h>.19
例5.3有10個(gè)地區(qū)的面積,要求對(duì)它們按由小到大的順序排列。解題思路:排序的規(guī)律有兩種:一種是“升序”,從小到大;另一種是“降序”,從大到小把題目抽象為:“對(duì)n個(gè)數(shù)按升序排序”采用起泡法排序.例5.3有10個(gè)地區(qū)的面積,要求對(duì)它們按由小到大的順20985420895420859420854920854290854209大數(shù)沉淀,小數(shù)起泡a[0]a[1]a[2]a[3]a[4]a[5]for(j=0;j<5;j++)if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}.988888大數(shù)沉淀,小數(shù)起泡a[0]for(j=0;j<521854209584209548209542809542089a[0]a[1]a[2]a[3]a[4]a[5]for(j=0;j<4;j++)if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}.85555a[0]for(j=0;j<4;j++)22542089452089425089420589a[0]a[1]a[2]a[3]a[4]a[5]for(j=0;j<3;j++)if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}.5444a[0]for(j=0;j<3;j++)23420589240589204589a[0]a[1]a[2]a[3]a[4]a[5]for(j=0;j<2;j++)if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}.422a[0]for(j=0;j<2;j++)24204589024589a[0]a[1]a[2]a[3]a[4]a[5]for(j=0;j<1;j++)if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}.20a[0]for(j=0;j<1;j++)25for(j=0;i<5;j++)if(a[j]>a[j+1]){……}for(j=0;j<4;j++)if(a[j]>a[j+1]){……}for(j=0;j<1;j++)if(a[j]>a[j+1]){……}……for(j=0;j<i;j++)if(a[j]>a[j+1]){……}for(i=5;i>0;i--).for(j=0;i<5;j++)26inta[10];inti,j,t;printf("input10numbers:\n");for(i=0;i<10;i++)scanf("%d",&a[i]);printf("\n");for(i=0;j<9;j++) for(j=0;i<9-j;i++) if(a[j]>a[j+1]) {t=a[j];a[j]=a[j+1];a[j+1]=t;}printf("thesortednumbers:\n");for(i=0;i<10;i++)printf("%d",a[i]);printf("\n");.inta[10];inti,j,t;.27【例4-4】查找問(wèn)題假設(shè)數(shù)組a中有10個(gè)互不相同且按從小到大排列的數(shù),從鍵盤上再輸入一個(gè)同類型的數(shù),然后在數(shù)組a中查找x,如果找到,輸出相應(yīng)的下標(biāo),否則,輸出“NotFound”。.【例4-4】查找問(wèn)題假設(shè)數(shù)組a中有10個(gè)互不相同且按從小到大28順序查找先用較簡(jiǎn)單的方法實(shí)現(xiàn)查找,就是在數(shù)組a中從第一個(gè)開(kāi)始比較,若相等則找到,結(jié)束查找;否則繼續(xù)比較第二個(gè)、第三個(gè)……。如果都沒(méi)有找到,說(shuō)明x不在數(shù)組a中,輸出“NotFound”。.順序查找.29#include<stdio.h>Voidmain(){intx,i,a[10]={2,3,5,8,12,13,14,15,18,20};printf("Pleaseinputanumbertosearch:\n");scanf("%d",&x);
for(i=0;i<10;i++) if(x==a[i])/*找到則結(jié)束循環(huán)*/
break;if(i==10)printf("NotFound!\n");elseprintf("Thepositioninarrayais%d\n",i+1);}.#include<stdio.h>.30對(duì)半查找對(duì)半查找算法的基本思想是:首選比較x和數(shù)組a的中間元素,如果相等則找到,否則x小則它只可能在數(shù)組a的上半部分,反之則它只可能在數(shù)組a的下半部分。.對(duì)半查找對(duì)半查找算法的基本思想是:首選比較x和數(shù)組a的中間31解:①先設(shè)定3個(gè)輔助標(biāo)志:
low,high,mid,二分查找舉例:已知如下11個(gè)元素的有序表a:請(qǐng)查找關(guān)鍵字為56和36的數(shù)據(jù)元素。顯然有:mid=
(low+high)/2
1221303538404855566064012345678910
1221303538404855566064012345678910②運(yùn)算步驟:low=0high=10mid=556>r[5],令low=mid+1low=6mid=856=r[8]查找成功(1)查的56.解:①先設(shè)定3個(gè)輔助標(biāo)志:low,high,mid,二分32
1221303538404855566064012345678910low=0high=10mid=536<r[5],令high=mid-1mid=2high=4low=036>r[2],令low=mid+1high=4low=mid=336>r[3],令low=mid+1high=low=mid=436<r[4],令high=mid-1=3;此時(shí)由于low>high,子表長(zhǎng)為0,查找失敗。(b)查找36.122130353840485556606433#include<stdio.h>voidmain(){intx,low,high,mid;inta[11]={12,21,30,35,38,40,48,55,56,60,64};printf("Pleaseinputanumbertosearch:\n");scanf("%d",&x);
.#include<stdio.h>.34low=0; high=10;/*設(shè)置下標(biāo)邊界*/while(low<=high){/*利用循環(huán),查找x所在的范圍*/ mid=(low+high)/2; if(x==a[mid])break; elseif(x<a[mid])high=mid-1; else low=mid+1; } if(low>high) printf("NotFound!\n"); else printf("Thepositioninarrayais%d\n",mid);}.low=0; high=10;355.2怎樣定義和引用二維數(shù)組2456184712431600234627573045201817252020245814361427117510461976147720181分隊(duì)2分隊(duì)3分隊(duì)隊(duì)員1隊(duì)員2隊(duì)員3隊(duì)員4隊(duì)員5隊(duì)員6floatpay[3][6];.5.2怎樣定義和引用二維數(shù)組245618471243160365.2.1怎樣定義二維數(shù)組5.2.2怎樣引用二維數(shù)組的元素5.2.3二維數(shù)組的初始化5.2.4二維數(shù)組程序舉例5.2怎樣定義和引用二維數(shù)組.5.2.1怎樣定義二維數(shù)組5.2怎樣定義和引用二維數(shù)組.37二維數(shù)組定義的一般形式為
類型符數(shù)組名[常量表達(dá)式][常量表達(dá)式];如:floata[3][4],b[5][10];二維數(shù)組可被看作是一種特殊的一維數(shù)組:
它的元素又是一個(gè)一維數(shù)組例如,把a(bǔ)看作是一個(gè)一維數(shù)組,它有3個(gè)元素:a[0]、a[1]、a[2]每個(gè)元素又是一個(gè)包含4個(gè)元素的一維數(shù)組5.2.1怎樣定義二維數(shù)組.二維數(shù)組定義的一般形式為5.2.1怎樣定義二維數(shù)組.38a[0][0]a[0][1]a[0][2]a[0][3]a[1][0]a[1][1]a[1][2]a[1][3]a[2][0]a[2][1]a[2][2]a[2][3]a[0]a[1]a[2].a[0][0]a[0][1]a[0][2]a[0][3]a[39a[0][0]a[0][1]a[0][2]a[0][3]a[1][0]a[1][1]a[1][2]a[1][3]a[2][0]a[2][1]a[2][2]a[2][3]邏輯存儲(chǔ)內(nèi)存中的存儲(chǔ)順序.a[0][0]a[0][1]a[0][2]a[0][3]a[40二維數(shù)組元素的表示形式為:
數(shù)組名[下標(biāo)][下標(biāo)]
b[1][2]=a[2][3]/2合法for(i=0;i<m;i++)printf(“%d,%d\n”,a[i][0],a[0][i]);合法5.2.2怎樣引用二維數(shù)組的元素.二維數(shù)組元素的表示形式為:5.2.2怎樣引用二維數(shù)組的元素.41inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};inta[3][4]={{1},{5},{9}};等價(jià)于inta[3][4]={{1,0,0,0},{5,0,0,0},{9,0,0,0}};inta[3][4]={{1},{5,6}};相當(dāng)于inta[3][4]={{1},{5,6},{0}};5.2.3二維數(shù)組的初始化.inta[3][4]={{1,2,3,4},{5,6,7,42inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};等價(jià)于:inta[][4]={1,2,3,4,5,6,7,8,9,10,11,12};inta[][4]={{0,0,3},{},{0,10}};合法5.2.3二維數(shù)組的初始化.inta[3][4]={1,2,3,4,5,6,7,8,943
例5.4將一個(gè)二維數(shù)組行和列的元素互換,存到另一個(gè)二維數(shù)組中。5.2.4二維數(shù)組程序舉例.例5.4將一個(gè)二維數(shù)組行和列的元素互換,存到另一個(gè)二44解題思路:可以定義兩個(gè)數(shù)組:數(shù)組a為2行3列,存放指定的6個(gè)數(shù)數(shù)組b為3行2列,開(kāi)始時(shí)未賦值將a數(shù)組中的元素a[i][j]存放到b數(shù)組中的b[j][i]元素中用嵌套的for循環(huán)完成5.2.4二維數(shù)組程序舉例.解題思路:5.2.4二維數(shù)組程序舉例.45#include<stdio.h>intmain(){inta[2][3]={{1,2,3},{4,5,6}};intb[3][2],i,j;printf("arraya:\n");for(i=0;i<=1;i++){for(j=0;j<=2;j++){printf("%5d",a[i][j]);b[j][i]=a[i][j];}printf("\n");}處理a的一行中各元素處理a中某一列元素輸出a的各元素a元素值賦給b相應(yīng)元素.#include<stdio.h>處理a的一行中各元素處理46printf("arrayb:\n");for(i=0;i<=2;i++){for(j=0;j<=1;j++)printf("%5d",b[i][j]);printf("\n");}return0;}輸出b的各元素.printf("arrayb:\n");輸出b47
例5.5有一個(gè)3×4的矩陣,要求編程序求出其中值最大的那個(gè)元素的值,以及其所在的行號(hào)和列號(hào)。解題思路:采用“打擂臺(tái)算法”先找出任一人站在臺(tái)上,第2人上去與之比武,勝者留在臺(tái)上第3人與臺(tái)上的人比武,勝者留臺(tái)上,敗者下臺(tái)以后每一個(gè)人都是與當(dāng)時(shí)留在臺(tái)上的人比武,直到所有人都上臺(tái)比為止,最后留在臺(tái)上的是冠軍.例5.5有一個(gè)3×4的矩陣,要求編程序求出其中值最大48
例5.5有一個(gè)3×4的矩陣,要求編程序求出其中值最大的那個(gè)元素的值,以及其所在的行號(hào)和列號(hào)。解題思路:采用“打擂臺(tái)算法”先把a(bǔ)[0][0]的值賦給變量maxmax用來(lái)存放當(dāng)前已知的最大值a[0][1]與max比較,如果a[0][1]>max,則表示a[0][1]是已經(jīng)比過(guò)的數(shù)據(jù)中值最大的,把它的值賦給max,取代了max的原值以后依此處理,最后max就是最大的值.例5.5有一個(gè)3×4的矩陣,要求編程序求出其中值最大49fori=0to2forj=0to3max=a[i][j]row=Icolum=ja[i][j]>max真max=a[0][0]輸出:max,row,colum假.fori=0to250記行號(hào)……
inti,j,row=0,colum=0,max;inta[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};max=a[0][0];for(i=0;i<=2;i++)for(j=0;j<=3;j++)if(a[i][j]>max){max=a[i][j];row=i;colum=j;}printf("max=%d\nrow=%d\ncolum=%d\n",max,row,colum);……記最大值記列號(hào).記行號(hào)……記最大值記列號(hào).51【例4-6】求3×3矩陣對(duì)角線之和。基本思想:用一個(gè)3×3二維數(shù)組表示該矩陣,對(duì)角線元素的特點(diǎn)是行號(hào)等于列號(hào)。遍歷該3×3二維數(shù)組,對(duì)符合對(duì)角線特點(diǎn)的元素累加求和。.【例4-6】求3×3矩陣對(duì)角線之和。.52Voidmain(){ inta[3][3]; inti,j,sum=0;
printf("input3×3matrix:\n");
for(i=0;i<3;i++)/*輸入3*3矩陣并打印出來(lái)*/ { for(j=0;j<3;j++) { scanf("%d",&a[i][j]); printf("%5d",a[i][j]);
} printf("\n"); }.Voidmain().53for(i=0;i<3;i++) for(j=0;j<3;j++) if(i==j)sum+=a[i][j];/*對(duì)角線上的元素所處的位置是行列下標(biāo)相等*/ printf("Thesumis%d\n",sum);}.for(i=0;i<3;i++) .54【例4-7】打印出以下楊輝三角形(要求打印10行)。111121133114641……….【例4-7】打印出以下楊輝三角形(要求打印10行)。.55基本思想:楊輝三角形的特點(diǎn)是第一列及對(duì)角線上均為1,其余每一個(gè)元素正好等于它上面一行的同一列和前一列的兩個(gè)元素之和。即a[i][j]=a[i-1][j-1]+a[i-1][j].基本思想:.56voidmain(){ inti,j; inta[10][10]; printf("\n"); for(i=0;i<10;i++)/*為楊輝三角的每行第1列的元素和對(duì)角線上元素賦值1*/
{ a[i][0]=1; a[i][i]=1; }.voidmain().57/*從楊輝三角形的第三行、第二列開(kāi)始,每個(gè)元素值等于其上一行對(duì)應(yīng)列元素的值加上前一列元素的值*/
for(i=2;i<10;i++) for(j=1;j<i;j++) a[i][j]=a[i-1][j]+a[i-1][j-1];./*從楊輝三角形的第三行、第二列開(kāi)始,每個(gè)元素值等于其上一行58for(i=0;i<10;i++)/*打印輸出楊輝三角形*/ { for(j=0;j<=i;j++) /*每一行只輸出至對(duì)角線的位置為止*/ printf("%5d",a[i][j]);
printf("\n"); }}.for(i=0;i<10;i++)595.3.1怎樣定義字符數(shù)組5.3.2字符數(shù)組的初始化5.3.3怎樣引用字符數(shù)組中的元素5.3.4字符串和字符串結(jié)束標(biāo)志5.3.5字符數(shù)組的輸入輸出5.3.6善于使用字符串處理函數(shù)5.3.7字符數(shù)組應(yīng)用舉例5.3字符數(shù)組.5.3.1怎樣定義字符數(shù)組5.3字符數(shù)組.60用來(lái)存放字符數(shù)據(jù)的數(shù)組是字符數(shù)組字符數(shù)組中的一個(gè)元素存放一個(gè)字符定義字符數(shù)組的方法與定義數(shù)值型數(shù)組的方法類似5.3.1怎樣定義字符數(shù)組.用來(lái)存放字符數(shù)據(jù)的數(shù)組是字符數(shù)組5.3.1怎樣定義字符數(shù)組.61charc[10];c[0]=’I’;c[1]=’’;c[2]=’a’;c[3]=’m’;c[4]=’’;c[5]=’h’;c[6]=’a’;c[7]=’p’;c[8]=’p’;c[9]=’y’;5.3.1怎樣定義字符數(shù)組Iam
happyc[0]c[1]c[2]c[3]c[4]c[5]c[6]c[7]c[8]c[9].charc[10];5.3.1怎樣定義字符數(shù)組Iamha62charc[10]={’I’,’’,’a’,’m’,’’,’h’,’a’,’p’,’p’,’y’};charc[10]={’c’,’’,’p’,’r’,’o’,’g’,’r’,’a’,’m’};5.3.2字符數(shù)組的初始化Iam
happyc[0]c[1]c[2]c[3]c[4]c[5]c[6]c[7]c[8]c[9]cprogram\0c[0]c[1]c[2]c[3]c[4]c[5]c[6]c[7]c[8]c[9].charc[10]={’I’,’’,’a’,’m’,’63chardiamond[5][5]={{’’,’’,’*’},{’’,’*’,’’,’*’},{’*’,’’,’’,’’,’*’},{’’,’*’,’’,’*’},{’’,’’,’*’}};5.3.2字符數(shù)組的初始化.chardiamond[5][5]={{’’,’’,’64例5.6輸出一個(gè)已知的字符串。解題思路:定義一個(gè)字符數(shù)組,并用“初始化列表”對(duì)其賦以初值用循環(huán)逐個(gè)輸出此字符數(shù)組中的字符5.3.3怎樣引用字符數(shù)組中的元素.例5.6輸出一個(gè)已知的字符串。5.3.3怎樣引用字符數(shù)組中65#include<stdio.h>intmain(){charc[15]={'I','','a','m','','a','','s','t','u','d','e','n','t','.'};inti;for(i=0;i<15;i++)printf("%c",c[i]);printf("\n");return0;}5.3.3怎樣引用字符數(shù)組中的元素.#include<stdio.h>5.3.3怎樣引用字符數(shù)66例5.7輸出一個(gè)菱形圖。解題思路:定義一個(gè)字符型的二維數(shù)組,用“初始化列表”進(jìn)行初始化用嵌套的for循環(huán)輸出字符數(shù)組中的所有元素。5.3.3怎樣引用字符數(shù)組中的元素.例5.7輸出一個(gè)菱形圖。5.3.3怎樣引用字符數(shù)組中的元67#include<stdio.h>intmain(){chardiamond[][5]={{'','','*'},{'','*','','*'},{'*','','','','*'},{'','*','','*'},{'','','*'}};inti,j;for(i=0;i<5;i++){for(j=0;j<5;j++)printf("%c",diamond[i][j]);printf("\n");}return0;}.#include<stdio.h>.68在C語(yǔ)言中,是將字符串作為字符數(shù)組來(lái)處理的關(guān)心的是字符串的有效長(zhǎng)度而不是字符數(shù)組的長(zhǎng)度為了測(cè)定字符串的實(shí)際長(zhǎng)度,C語(yǔ)言規(guī)定了字符串結(jié)束標(biāo)志’\0’5.3.4字符串和字符串結(jié)束標(biāo)志.在C語(yǔ)言中,是將字符串作為字符數(shù)組來(lái)處理的5.3.4字符串和69’\0’代表ASCII碼為0的字符從ASCII碼表可以查到,ASCII碼為0的字符不是一個(gè)可以顯示的字符,而是一個(gè)“空操作符”,即它什么也不做用它作為字符串結(jié)束標(biāo)志不會(huì)產(chǎn)生附加的操作或增加有效字符,只起一個(gè)供辨別的標(biāo)志5.3.4字符串和字符串結(jié)束標(biāo)志.’\0’代表ASCII碼為0的字符5.3.4字符串和字符串70charc[]={”Iamhappy”};可寫(xiě)成charc[]=”Iamhappy”;相當(dāng)于charc[11]={”Iamhappy”};5.3.4字符串和字符串結(jié)束標(biāo)志.charc[]={”Iamhappy”};5.371charc[10]={”China”};可寫(xiě)成charc[10]=”China”;從c[5]開(kāi)始,元素值均為\0只顯示printf(”%s”,c);5.3.4字符串和字符串結(jié)束標(biāo)志China\0\0\0\0\0.charc[10]={”China”};5.3.4字符串和72字符數(shù)組的輸入輸出可以有兩種方法:
逐個(gè)字符輸入輸出(%c)
整個(gè)字符串一次輸入輸出(%s)輸出的字符中不包括結(jié)束符’\0’用%s輸出字符串時(shí),printf函數(shù)中的輸出項(xiàng)是字符數(shù)組名,不是數(shù)組元素名5.3.5字符數(shù)組的輸入輸出.字符數(shù)組的輸入輸出可以有兩種方法:5.3.5字符數(shù)組的輸入73如果一個(gè)字符數(shù)組中包含多個(gè)’\0’,則遇第一個(gè)’\0’時(shí)輸出就結(jié)束可以用scanf函數(shù)輸入一個(gè)字符串scanf函數(shù)中的輸入項(xiàng)c是已定義的字符數(shù)組名,輸入的字符串應(yīng)短于已定義的字符數(shù)組的長(zhǎng)度5.3.5字符數(shù)組的輸入輸出.如果一個(gè)字符數(shù)組中包含多個(gè)’\0’,則遇第一個(gè)’\0’時(shí)輸出74charc[6];scanf(”%s”,c);China↙系統(tǒng)自動(dòng)在China后面加一個(gè)’\0’5.3.5字符數(shù)組的輸入輸出.charc[6];5.3.5字符數(shù)組的輸入輸出.75charstr1[5],str2[5],str3[5];scanf(”%s%s%s”,str1,str2,str3);Howareyou?↙5.3.5字符數(shù)組的輸入輸出How
\0str1are
\0str2you?\0str3.charstr1[5],str2[5],str3[5];576在C函數(shù)庫(kù)中提供了一些用來(lái)專門處理字符串的函數(shù),使用方便5.3.6善于使用字符串處理函數(shù).在C函數(shù)庫(kù)中提供了一些用來(lái)專門處理字符串的函數(shù),使用方便5.771.puts函數(shù)----輸出字符串的函數(shù)其一般形式為:puts(字符數(shù)組)作用是將一個(gè)字符串輸出到終端charstr[20]=”China”;puts(str);
輸出China5.3.6善于使用字符串處理函數(shù).1.puts函數(shù)----輸出字符串的函數(shù)5.3.6善于使用782.gets函數(shù)----輸入字符串的函數(shù)其一般形式為:gets(字符數(shù)組)作用是輸入一個(gè)字符串到字符數(shù)組charstr[20];gets(str);
Computer↙5.3.6善于使用字符串處理函數(shù).2.gets函數(shù)----輸入字符串的函數(shù)5.3.6善于使793.strcat函數(shù)----字符串連接函數(shù)其一般形式為:strcat(字符數(shù)組1,字符數(shù)組2)其作用是把兩個(gè)字符串連接起來(lái),把字符串2接到字符串1的后面,結(jié)果放在字符數(shù)組1中5.3.6善于使用字符串處理函數(shù)使用字符串函數(shù)時(shí),在程序開(kāi)頭用#include<string.h>.3.strcat函數(shù)----字符串連接函數(shù)5.3.6善于803.strcat函數(shù)----字符串連接函數(shù)charstr1[30]=”People”;charstr2[]=”China”;printf(”%s”,strcat(str1,str2));
輸出:PeopleChina5.3.6善于使用字符串處理函數(shù)要足夠大.3.strcat函數(shù)----字符串連接函數(shù)5.3.6善于814.strcpy和strncpy函數(shù)-字符串復(fù)制strcpy一般形式為:strcpy(字符數(shù)組1,字符串2)作用是將字符串2復(fù)制到字符數(shù)組1中去charstr1[10],str2[]=”China”;strcpy(str1,str2);5.3.6善于使用字符串處理函數(shù)China\0\0\0\0\0str1.4.strcpy和strncpy函數(shù)-字符串復(fù)制5.3.6824.strcpy和strncpy函數(shù)-字符串復(fù)制strcpy一般形式為:strcpy(字符數(shù)組1,字符串2)作用是將字符串2復(fù)制到字符數(shù)組1中去charstr1[10],str2[]=”China”;strcpy(str1,str2);5.3.6善于使用字符串處理函數(shù)China\0\0\0\0\0str1要足夠大.4.strcpy和strncpy函數(shù)-字符串復(fù)制5.3.6834.strcpy和strncpy函數(shù)-字符串復(fù)制strcpy一般形式為:strcpy(字符數(shù)組1,字符串2)作用是將字符串2復(fù)制到字符數(shù)組1中去charstr1[10],str2[]=”China”;strcpy(str1,str2);5.3.6善于使用字符串處理函數(shù)數(shù)組名形式.4.strcpy和strncpy函數(shù)-字符串復(fù)制5.3.6844.strcpy和strncpy函數(shù)-字符串復(fù)制strcpy一般形式為:strcpy(字符數(shù)組1,字符串2)作用是將字符串2復(fù)制到字符數(shù)組1中去charstr1[10],str2[]=”China”;strcpy(str1,str2);5.3.6善于使用字符串處理函數(shù)數(shù)組名或字符串常量.4.strcpy和strncpy函數(shù)-字符串復(fù)制5.3.6854.strcpy和strncpy函數(shù)-字符串復(fù)制strcpy一般形式為:strcpy(字符數(shù)組1,字符串2)作用是將字符串2復(fù)制到字符數(shù)組1中去charstr1[10],str2[]=”China”;strcpy(str1,str2);相當(dāng)于strcpy(str1,”China”);5.3.6善于使用字符串處理函數(shù).4.strcpy和strncpy函數(shù)-字符串復(fù)制5.3.6864.strcpy和strncpy函數(shù)-字符串復(fù)制charstr1[10],str2[]=”China”;str1=”China”;錯(cuò)誤str1=str2;錯(cuò)誤5.3.6善于使用字符串處理函數(shù).4.strcpy和strncpy函數(shù)-字符串復(fù)制5.3.6874.strcpy和strncpy函數(shù)-字符串復(fù)制可以用strncpy函數(shù)將字符串2中前面n個(gè)字符復(fù)制到字符數(shù)組1中去strncpy(str1,str2,2);作用是將str2中最前面2個(gè)字符復(fù)制到str1中,取代str1中原有的最前面2個(gè)字符復(fù)制的字符個(gè)數(shù)n不應(yīng)多于str1中原有的字符5.3.6善于使用字符串處理函數(shù).4.strcpy和strncpy函數(shù)-字符串復(fù)制5.3.6885.strcmp函數(shù)----字符串比較函數(shù)其一般形式為strcmp(字符串1,字符串2)作用是比較字符串1和字符串2strcmp(str1,str2);strcmp(”China”,”Korea”);strcmp(str1,”Beijing”);5.3.6善于使用字符串處理函數(shù).5.strcmp函數(shù)----字符串比較函數(shù)5.3.6善于895.strcmp函數(shù)----字符串比較函數(shù)字符串比較的規(guī)則是:將兩個(gè)字符串自左至右逐個(gè)字符相比,直到出現(xiàn)不同的字符或遇到’\0’為止如全部字符相同,認(rèn)為兩個(gè)字符串相等若出現(xiàn)不相同的字符,則以第一對(duì)不相同的字符的比較結(jié)果為準(zhǔn)5.3.6善于使用字符串處理函數(shù).5.strcmp函數(shù)----字符串比較函數(shù)5.3.6善于905.strcmp函數(shù)----字符串比較函數(shù)”A”<”B””a”>”A””computer”>”compare””these”>”that””1A”>”$20””CHINA”>”CANADA””DOG”<”cat””Tsinghua”>”TSINGHUA”5.3.6善于使用字符串處理函數(shù).5.strcmp函數(shù)----字符串比較函數(shù)5.3.6善于915.strcmp函數(shù)----字符串比較函數(shù)比較的結(jié)果由函數(shù)值帶回如果字符串1=字符串2,則函數(shù)值為0如果字符串1>字符串2,則函數(shù)值為一個(gè)正整數(shù)如果字符串1<字符串2,則函數(shù)值為一個(gè)負(fù)整數(shù)5.3.6善于使用字符串處理函數(shù).5.strcmp函數(shù)----字符串比較函數(shù)5.3.6善于925.strcmp函數(shù)----字符串比較函數(shù)if(str1>str2)printf(”yes”);錯(cuò)誤if(strcmp(str1,str2)>0)printf(”yes”);正確5.3.6善于使用字符串處理函數(shù).5.strcmp函數(shù)----字符串比較函數(shù)5.3.6善于935.strlen函數(shù)----測(cè)字符串長(zhǎng)度的函數(shù)其一般形式為:strlen(字符數(shù)組)它是測(cè)試字符串長(zhǎng)度的函數(shù)函數(shù)的值為字符串中的實(shí)際長(zhǎng)度5.3.6善于使用字符串處理函數(shù).5.strlen函數(shù)----測(cè)字符串長(zhǎng)度的函數(shù)5.3.6945.strlen函數(shù)----測(cè)字符串長(zhǎng)度的函數(shù)charstr[10]=”China”;printf(”%d”,strlen(str));輸出結(jié)果是5也可以直接測(cè)試字符串常量的長(zhǎng)度strlen(”China”);5.3.6善于使用字符串處理函數(shù).5.strlen函數(shù)----測(cè)字符串長(zhǎng)度的函數(shù)5.3.6957.strlwr函數(shù)----轉(zhuǎn)換為小寫(xiě)的函數(shù)其一般形式為strlwr(字符串)函數(shù)的作用是將字符串中大寫(xiě)字母換成小寫(xiě)字母5.3.6善于使用字符串處理函數(shù).7.strlwr函數(shù)----轉(zhuǎn)換為小寫(xiě)的函數(shù)5.3.6善968.strupr函數(shù)----轉(zhuǎn)換為大寫(xiě)的函數(shù)其一般形式為strupr(字符串)函數(shù)的作用是將字符串中小寫(xiě)字母換成大寫(xiě)字母5.3.6善于使用字符串處理函數(shù).8.strupr函數(shù)----轉(zhuǎn)換為大寫(xiě)的函數(shù)5.3.6善97
例5.8輸入一行字符,統(tǒng)計(jì)其中有多少個(gè)單詞,單詞之間用空格分隔開(kāi)。解題思路:?jiǎn)栴}的關(guān)鍵是怎樣確定“出現(xiàn)一個(gè)新單詞了”從第1個(gè)字符開(kāi)始逐個(gè)字符進(jìn)行檢查,判斷此字符是否是新單詞的開(kāi)頭,如果是,就使變量num的值加1,最后得到的num的值就是單詞總數(shù)5.3.7字符數(shù)組應(yīng)用舉例.例5.8輸入一行字符,統(tǒng)計(jì)其中有多少個(gè)單詞,單詞之間98判斷是否出現(xiàn)新單詞,可以由是否有空格出現(xiàn)來(lái)決定(連續(xù)的若干個(gè)空格作為出現(xiàn)一次空格;一行開(kāi)頭的空格不統(tǒng)計(jì)在內(nèi))如果測(cè)出某一個(gè)字符為非空格,而它的前面的字符是空格,則表示“新的單詞開(kāi)始了”,此時(shí)使num累加1如果當(dāng)前字符為非空格而其前面的字符也是非空格,則num不應(yīng)再累加15.3.7字符數(shù)組應(yīng)用舉例.判斷是否出現(xiàn)新單詞,可以由是否有空格出現(xiàn)來(lái)決定(連續(xù)的若干個(gè)99用變量word作為判別當(dāng)前是否開(kāi)始了一個(gè)新單詞的標(biāo)志,若word=0表示未出現(xiàn)新單詞,如出現(xiàn)了新單詞,就把word置成1前面一個(gè)字符是否空格可以從word的值看出來(lái),若word等于0,則表示前一個(gè)字符是空格;如果word等于1,意味著前一個(gè)字符為非空格5.3.7字符數(shù)組應(yīng)用舉例.用變量word作為判別當(dāng)前是否開(kāi)始了一個(gè)新單詞的標(biāo)志,若wo100Yc=空格word=0Nword=0Yword=1num++Nif(c=='')word=0;elseif(word==0){word=1;num++;}.Yc=空格word=0Nword=0Yword=1Nif(c101當(dāng)前字符Iamaboy.是否空格否是否否是否是否否否否word原值01011010111新單詞開(kāi)始否是否是否否是否是否否否word新值10110101111num值11222334444.當(dāng)前字符Iamaboy.是否空格否是否否是否是否否否否wor102……charstring[81],c;inti,num=0,word=0;gets(string);//scanf(“%s”,string);for(i=0;(c=string[i])!=‘\0’;i++)if(c==‘’)word=0;elseif(word==0) {word=1; num++; }printf(“%dwords\n”,num);
……一定要設(shè)初始值.
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 加盟連鎖酒店項(xiàng)目計(jì)劃書(shū)
- 噴油漆施工合同協(xié)議書(shū)
- 中國(guó)全自動(dòng)管道清洗機(jī)器人行業(yè)市場(chǎng)占有率及投資前景預(yù)測(cè)分析報(bào)告
- 2025年聚四氟乙烯材質(zhì)報(bào)告單
- 打水井安全合同協(xié)議書(shū)
- 2025年數(shù)字經(jīng)濟(jì)背景下會(huì)展產(chǎn)業(yè)的數(shù)字化轉(zhuǎn)型與線上會(huì)展發(fā)展報(bào)告
- 安裝電動(dòng)幕布合同協(xié)議書(shū)
- 圖文合同協(xié)議書(shū)范本大全
- 基礎(chǔ)合同解除協(xié)議書(shū)怎么寫(xiě)
- 跨境電子商務(wù)項(xiàng)目商業(yè)計(jì)劃書(shū)(五范例)
- 2024北京西城區(qū)三年級(jí)(下)期末數(shù)學(xué)試題及答案
- 2024-2025學(xué)北京房山區(qū)初一語(yǔ)文(下)期末試卷附答案解析
- 南京市事業(yè)單位專項(xiàng)招聘退役大學(xué)生士兵真題2024
- 智能控制(雙語(yǔ))知到課后答案智慧樹(shù)章節(jié)測(cè)試答案2025年春湘潭大學(xué)
- 第2單元 第4課 跨學(xué)科活動(dòng):昆蟲(chóng)的識(shí)別 教學(xué)設(shè)計(jì)-2024-2025學(xué)年清華大學(xué)版初中信息科技八年級(jí)下冊(cè)
- 土地整治與耕地保護(hù)考核試卷
- 2025年高中物理:《公式+思維導(dǎo)圖》三年都有用
- DB11∕T212-2024園林綠化工程施工及驗(yàn)收規(guī)范
- 《電影《絕命毒師》劇情解析》課件
- 2024年淄博高新區(qū)事業(yè)單位招聘退役大學(xué)生士兵筆試真題
- 《鐵路路基智能填筑技術(shù)規(guī)程》
評(píng)論
0/150
提交評(píng)論