




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第六章數(shù)組前面我們使用了基本數(shù)據(jù)類型(如整型、實(shí)型、字符型),數(shù)組是C語(yǔ)言提供的一種構(gòu)造類型數(shù)據(jù),即由基本數(shù)據(jù)類型按一定規(guī)則組成。
數(shù)組是有序數(shù)據(jù)的集合。數(shù)組中的每一個(gè)元素都屬于同一個(gè)數(shù)據(jù)類型。用一個(gè)統(tǒng)一的數(shù)組名和下標(biāo)來(lái)唯一地確定數(shù)組中的元素。如:intcharfloat等。遵循標(biāo)識(shí)符定名規(guī)則只能包含常量和符號(hào)常量。表示數(shù)組包含的元素個(gè)數(shù)。既數(shù)組的長(zhǎng)度,從0開始。1.一維數(shù)組的定義和引用
一維數(shù)組的定義方式:
類型說(shuō)明符數(shù)組名[常量表達(dá)式];如:inta[10];
定義了一個(gè)一維數(shù)組a,它包含了10個(gè)具有整型數(shù)據(jù)類型的元素。即a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]。一維數(shù)組的引用:C語(yǔ)言規(guī)定只能逐個(gè)引用數(shù)組元素,不能一次引用整個(gè)數(shù)組。而且必須先定義數(shù)組,然后才能使用數(shù)組元素。數(shù)組元素的引用形式:
數(shù)組名[下標(biāo)]下標(biāo)可以是表達(dá)式例6.1main(){inti,a[10];for(i=0;i<=9;i++)a[i]=i;for(i=9;i>=0;i--)printf("%d",a[i]);}a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]0123456789一維數(shù)組的初始化:所謂初始化就是在定義數(shù)組的同時(shí),給數(shù)組元素賦初始值。方法見下例:
0123456789a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]0123400000b[0]b[1]b[2]b[3]b[4]b[5]b[6]b[7]b[8]b[9]0000000000c[0]c[1]c[2]c[3]c[4]c[5]c[6]c[7]c[8]c[9]inta[10]={0,1,2,3,4,5,6,7,8,9};intb[10]={0,1,2,3,4};(后5個(gè)元素賦值0。)intc[10]={0,0,0,0,0,0,0,0,0,0};staticintc[10]等價(jià)12345d[0]d[1]d[2]d[3]d[4]intd[]={1,2,3,4,5};可以不指定數(shù)組長(zhǎng)度,系統(tǒng)根據(jù)后面花括號(hào)里的數(shù)據(jù)決定數(shù)組的長(zhǎng)度。一維數(shù)組程序舉例:例6.2給數(shù)組a中存入10個(gè)整數(shù),在保證數(shù)據(jù)不丟失的情況下,將數(shù)組中的最大數(shù)存入a[0]位置。輸入:10個(gè)整數(shù)計(jì)算:求最大數(shù)輸出:a數(shù)組
真假i=0;當(dāng)i<=9a[0]<a[i]t=a[0]a[0]=a[i]a[i]=tmain(){inti,j,k,x,a[10];for(i=0;i<=9;i++)scanf(“%d”,&a[i]);printf(“\n”);for(i=1;i<=9;i++){
if(a[i]>a[0]){t=a[0];a[0]=a[i];a[i]=t;}}
for(i=0;i<=9;i++)printf(“%d”,a[i]);printf(“\n”);}9513648617289a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]
真假i=0;當(dāng)i<=9a[0]<a[i]t=a[0]a[0]=a[i]a[i]=t將數(shù)組中的最大數(shù)存入a[0]位置例6.3:請(qǐng)將數(shù)組a[0……9]中的元素循環(huán)右移k位,要求只用一個(gè)元素大小的附加空間。main(){inti,j,k,x,a[10];for(i=0;i<=9;i++)scanf(“%d”,&a[i]);printf(“\n”);scanf(“%d”,&k);printf(“\n”);for(i=1;i<=k;i++){x=a[9];for(j=8;j>=0;j--)a[j+1]=a[j];
a[0]=x;}for(i=0;i<=9;i++)printf(“%d”,a[i]);printf(“\n”);}0123456789a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]9012345678a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]8901234567a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]7890123456a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]6.4輸入100個(gè)字符,統(tǒng)計(jì)各個(gè)字母的出現(xiàn)的個(gè)數(shù)(不區(qū)分大小寫)。#include“stdio.h”main(){inti=1;intnum[26]={0};charc;while(i<=100){c=getchar();if(c==‘#’)break;if(c>=‘A‘&&c<=‘Z’)num[c-’A’]++;elseif(c>=‘a(chǎn)‘&&c<=‘z’)num[c-’a’]++;}for(i=‘A’;i<=‘Z’;i++){printf(“%c:%d\n”,i,num[i-’A’]);}}用數(shù)組解排序問題問題:給定一組數(shù)(整數(shù)或者實(shí)數(shù)),如何進(jìn)行從小到大或從大到小的排序?如:已知原始數(shù)據(jù):[4733618272112547]最后排序結(jié)果:11253347476172824733618272112547a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]例6.5用選擇法對(duì)若干個(gè)數(shù)排序(由小到大)。
選擇法:通過比較首先選出最小的數(shù)放在第一個(gè)位置上,然后在其余的數(shù)中選出次小數(shù)放在第二個(gè)位置上,依此類推,直到所有的數(shù)成為有序序列。第二趟排序后:1125[61827247
33
47]第一趟排序后:11[3361827247
25
47]第三趟排序后:112533[827247
6147]第四趟排序后:11253347[728261
47]第五趟排序后:1125334747[82
6172]第六趟排序后:112533474761[82
72]第七趟排序后:11253347476172[82]最后排序結(jié)果:1125334747617282如:已知原始數(shù)據(jù):[4733618272112547]main(){inta[11],i,j,min,t;printf("input10numbers:\n");
for(i=1;i<11;i++)scanf("%d",&a[i]);printf("\n");for(i=1;i<=9;i++)
{min=i;
for(j=i+1;j<=10;j++)
if(a[min]>a[j])
min=j;if(min!=i){t=a[i];a[i]=a[min];a[min]=t;}}printf("thesortednumbers:\n");for(i=1;i<11;i++)printf("%d",a[i]);printf(“\n”);}a[i]>a[j]t=a[i]a[i]=a[j]a[j]=t真假forj=i+1tonfori=1ton-1輸出a[1]到a[n]輸入n個(gè)數(shù)給a數(shù)組選擇的次數(shù)select
例6.6用起泡法對(duì)若干個(gè)數(shù)排序(由小到大)。
起泡法:對(duì)相鄰兩個(gè)數(shù)比較和交換,使全部數(shù)據(jù)排列有序。如:985420895420859420854920854290854209第1次第2次第3次第4次第5次結(jié)果第一趟最大數(shù)已得到。
8542058420548205428054208第1次第2次第3次第4次結(jié)果第二趟542089
5420452042504205第1次第2次第3次結(jié)果第三趟
420240204第1次第2次結(jié)果第四趟2002第1次結(jié)果第五趟024589最后結(jié)果即:如果有n個(gè)數(shù),則要進(jìn)行n-1趟比較。在第j趟比較中要進(jìn)行n-j次兩兩比較。204589a[j]>a[j+1]t=a[j]a[j]=a[j+1]a[j+1]=t真假forj=1ton-ifori=1ton-1輸出a[1]到a[n]輸入n個(gè)數(shù)給a數(shù)組main(){inta[11],i,j,t;printf("input10numbers:\n");
for(i=1;i<11;i++)scanf("%d",&a[i]);printf("\n");for(i=1;i<=9;i++)
for(j=1;j<=10-i;j++)
if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}printf("thesortednumbers:\n");for(i=1;i<11;i++)printf("%d",a[i]);printf(“\n”);}請(qǐng)比較冒泡法和選擇法的不同?bubble如:初始數(shù)據(jù):[47]33618272112547i=2(33)[3347]618272112547i=3(61)[334761]8272112547i=4(82)[33476182]72112547i=6(11)[113347617282]2547i=7(25)[11253347617282]
47i=8(47)[1125334747617282]i=5(72)[3347617282]112547例6.7插入排序:每次對(duì)一個(gè)待排的數(shù)據(jù),按其值的大小插入到前面已排好序的數(shù)據(jù)中。i=4(82)[33476182]72112547/*把t放到第j+1個(gè)位置*/a[j+1]=t;將第i個(gè)元素插入1到i-1個(gè)元素組成的數(shù)組中t=a[i];/*已排好序的數(shù)組是從1到i*/j=i-1;/*未排好序的數(shù)組是從i-1到N*//*查找插入第i-1個(gè)元素的位置*/while(t<a[j]){j=j-1;}/*查完之后j中記錄應(yīng)該插入元素的位置*//*把第j個(gè)元素到第i-1個(gè)元素向后移*/x=i-1;while(x>=j)a[x+1]=a[x++];定位查找后移插入&&j>0寫循環(huán)的時(shí)候切記檢查邊界!i=4(82)[33476182]72112547t=a[i];/*已排好序的數(shù)組是從1到i*/j=i-1;/*未排好序的數(shù)組是從i-1到N*/
/*查找插入第i-1個(gè)元素的位置,同時(shí)把第j個(gè)元素到第i-1個(gè)元素向后移*/while(t<a[j]&&j>0){
a[j+1]=a[j];
j=j-1;}/*查完之后j中記錄應(yīng)該插入第i-1個(gè)元素的位置*/
/*把t放到第j+1個(gè)位置*/a[j+1]=t;改版節(jié)約一個(gè)循環(huán)!可不可以邊查找邊后移?i=4(82)[33476182]72112547
a[0]=a[i];/*已排好序的數(shù)組是從1到i*/j=i-1;/*未排好序的數(shù)組是從i-1到N*/
/*查找插入第i-1個(gè)元素的位置,同時(shí)把第j個(gè)元素到第i-1個(gè)元素向后移*/while(a[0]<a[j]&&j>0){
a[j+1]=a[j];j=j-1;}/*查完之后j中記錄應(yīng)該插入第i-1個(gè)元素的位置*/
/*把a(bǔ)[0]放到第j+1個(gè)位置*/a[j+1]=a[0];節(jié)約一個(gè)空間,同時(shí)可以略過邊界檢查可不可以使用a[0]的空閑位置?while(a[0]<a[j])main(){inta[11],i,j,t;printf("input10numbers:\n");
for(i=1;i<11;i++)scanf("%d",&a[i]);printf("\n");for(i=2;i<=10;i++){a[0]=a[i];j=i-1;
while(a[0]<a[j]){a[j+1]=a[j];j=j-1;}a[j+1]=a[0];}printf("thesortednumbers:\n");for(i=1;i<11;i++)printf("%d",a[i]);printf(“\n”);}為什么把a(bǔ)[i]送給a[0]?a[0]的作用有幾個(gè)?數(shù)組和循環(huán)問題的基本技巧分析是不是有規(guī)律的問題如果是,先構(gòu)建一次循環(huán)的算法查看需要做多少次循環(huán)(循環(huán)次數(shù))
決定是for循環(huán)還是while/do循環(huán)查看每次循環(huán)中需要變化的量(循環(huán)變量).
決定循環(huán)變量每次變化的步長(zhǎng)確定循環(huán)的初始和結(jié)束條件
是中途滿足條件退出還是循環(huán)若干次退出6.多重循環(huán)情況一重一重考慮例6.8:用折半查找法在一組排好序(遞增有序或遞減有序)的值中查找某個(gè)數(shù)據(jù)。折半查找的基本思想:首先將待查數(shù)據(jù)k與排好序(遞增有序)的一組數(shù)據(jù)的中間位置上的數(shù)據(jù)進(jìn)行比較,若相等,則查找成功;若k>a[mid],則待查數(shù)據(jù)k只可能出現(xiàn)在右半部a[mid+1…n]中,則應(yīng)在這個(gè)右半部中再進(jìn)行折半查找;若k<a[mid],則待查數(shù)據(jù)k只可能出現(xiàn)在左半部a[1…mid-1]中,則應(yīng)在這個(gè)左半部中再進(jìn)行折半查找;這樣通過逐步縮小查找范圍,直到找到或找不到該數(shù)據(jù)k為止。1
116
05,13,19,21,37,56,64,75,80,88,92
low
mid
hig=(low+high)/2例:05,13,19,21,37,56,64,75,80,88,92查找k=21的過程(分析規(guī)律):2.05,13,19,21,37,56,64,75,80,88,92
low
mid
hig
153high=mid-13.05,13,19,21,37,56,64,75,80,88,92
lowhigmid45查找成功low=mid+11.05,13,19,21,37,56,64,75,80,88,92
low
mid
hig2.05,13,19,21,37,56,64,75,80,88,92
low
mid
hig3.05,13,19,21,37,56,64,75,80,88,92
lowhigmid111671194.05,13,19,21,37,56,64,75,80,88,92
higlow1011low>hig,查找不成功查找85910一次循環(huán)的算法mid=(low+hig)/2;//計(jì)算中間元素的位置if(number==a[mid])//檢查是否查中find=mid;//查中的情況elseif(number<a[mid])//如果小hig=mid-1;//到前半段else//如果大low=mid+1;//到后半段構(gòu)建循環(huán)low=1;hig=N;find=0//標(biāo)志變量;while((find==0)&&(low<=hig))//結(jié)束條件{mid=(low+hig)/2;if(number==a[mid])find=mid;elseif(number<a[mid])hig=mid-1;elselow=mid+1;}low=1;hig=N;find=0;while((find==0)&&(low<=hig)){mid=(low+hig)/2;if(number==a[mid])find=mid;elseif(number<a[mid])hig=mid-1;elselow=mid+1;}
將折半查找程序放入插入排序中,即是折半排序!if(find==0)printf(“%disnotfound\n”,number);elseprintf(“%disthe%dthnumber.\n”,number,find);}a[0]=a[i];//將a[i]暫存到a[0]low=1;hig=i-1;while(low<=hig){//在a[low..hig]中折半查找插入的位置mid=(low+hig)/2;//折半if(a[0]<a[mid])hig=mid-1;//插入點(diǎn)在低半?yún)^(qū)elselow=mid+1;//插入點(diǎn)在高半?yún)^(qū)}折半排序(折半插入排序)例如:i=5(72)[33476182]72112547low=1hig=4mid=2low=3mid=3low=4mid=4hig=3把mid到i的元素后移a[mid]=a[0];2.二維數(shù)組的定義和引用
二維數(shù)組的定義方式:
類型說(shuō)明符數(shù)組名[常量表達(dá)式][常量表達(dá)式];例如:
floata[3][4];
/*定義a為3行4列的實(shí)型數(shù)組*/
intb[5][2];/*定義b為5行2列的整型數(shù)組*/
charc[2][3];/*定義c為2行3列的字符數(shù)組*/二維數(shù)組元素在內(nèi)存中的排放順序是:按行存放。如數(shù)組a[3][4]的存放為
a[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]內(nèi)存二維數(shù)組的引用:與一維數(shù)組一樣,只能逐個(gè)引用數(shù)組元素,不能一次引用整個(gè)數(shù)組。而且必須先定義二維數(shù)組,然后才能使用數(shù)組元素。二維數(shù)組元素的表示形式:
數(shù)組名[下標(biāo)][下標(biāo)]如:a[2][1]=a[0][0]+a[0][1];在引用數(shù)組元素時(shí),應(yīng)注意下標(biāo)值不要超出已定義數(shù)組的范圍。下標(biāo)可以是表達(dá)式內(nèi)存a[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]123456789101112二維數(shù)組的初始化:如:staticinta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};分行賦初值:
staticinta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};a[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]123456789101112部分元素賦初值:
staticinta[3][4]={{1},{5},{9}};a[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]100050009000staticinta[3][4]={{1},{0,5},{0,0,11}};1000050000110a[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]printf(“%disnotfound\n”,number);staticinta[3][4]={{1},{0,5},{0,0,11}};{staticinta[2][3]={{1,2,3},{4,1,2}},b[3][3]={{1,4,1},{2,1,2},{3,4,3}};while((find==0)&&(low<=hig))//結(jié)束條件所謂初始化就是在定義數(shù)組的同時(shí),給數(shù)組元素賦初始值。下面程序輸入數(shù)據(jù)為:Howareyou?word=1;能否寫:if(s1==s2)?printf(“\n”);數(shù)組是有序數(shù)據(jù)的集合。strupr(字符串)與一維數(shù)組一樣,只能逐個(gè)引用數(shù)組元素,不能一次引用整個(gè)數(shù)組。for(i=0;i<10;i++)a[0]=x;}如:已知原始數(shù)據(jù):[4733618272112547]low=mid+1;//插入點(diǎn)在高半?yún)^(qū)staticinta[3][4]={{1},{9}};100090000000staticinta[3][4]={{1},{},{9}};100000009000C語(yǔ)言規(guī)定一維長(zhǎng)度可省略,但二維長(zhǎng)度不能省略。系統(tǒng)會(huì)根據(jù)順序賦初值或分行賦初值自動(dòng)分配存儲(chǔ)空間。如:
staticinta[][4]={1,2,3,4,5,6,7,8,9,10,11,12};
系統(tǒng)根據(jù)順序賦初值自動(dòng)分配3行4列存儲(chǔ)空間。
staticinta[][3]={{0,3},{},{0,12}};
系統(tǒng)根據(jù)分行賦初值自動(dòng)分配3行2列存儲(chǔ)空間。a[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][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]幾點(diǎn)注意:
在數(shù)組定義時(shí),一般要加“靜態(tài)存儲(chǔ)”static或“外部存儲(chǔ)”extern。它可以使未賦初值的數(shù)組元素為零值。
數(shù)組引用的下標(biāo),從零開始。
可以把二維數(shù)組看作是一種特殊的一維數(shù)組:它的元素又是一個(gè)一維數(shù)組。如:floata[3][4];
a[0]
a[0][0]
a[0][1]
a[0][2]
a[0][3]aa[1]
a[1][0]
a[1][1]
a[1][2]
a[1][3]
a[2]
a[2][0]
a[2][1]
a[2][2]
a[2][3]
C語(yǔ)言還允許使用多維數(shù)組,它們的定義和引用方法與二維數(shù)組的定義和引用相同。例如:floata[2][2][2];a為一個(gè)三維數(shù)組,在內(nèi)存中的排列順序?yàn)椋?/p>
a[0][0][0]a[0][0][1]a[0][1][0]a[0][1][1]a[1][0][0]a[1][0][1]a[1][1][0]a[1][1][1]二維數(shù)組程序舉例:例6.9:二維數(shù)組元素輸入輸出123456a=#defineM2#defineN3main(){inta[M][N],i,j;printf(“pleaseinput%drowand%dcolumnelements”,M,N);for(i=0;i<M;i++)for(j=0;j<N;j++)scanf("%d",&a[i][j]);
for(i=0;i<=M;i++){for(j=0;j<N;j++)printf("%5d",a[i][j]);printf("\n");}
二維數(shù)組程序舉例:例6.10將一個(gè)二維數(shù)組行和列元素互換,存到另一個(gè)二維數(shù)組中。142536123456a=b=main(){staticinta[2][3]={{1,2,3},{4,5,6}},b[3][2],i,j;printf("arraya:\n");for(i=0;i<2;i++){for(j=0;j<3;j++){printf("%5d",a[i][j]);
b[j][i]=a[i][j];}printf("\n");}printf("arrayb:\n");for(i=0;i<3;i++){for(j=0;j<2;j++)printf("%5d",b[i][j]);printf("\n");}}輸出b數(shù)組交換元素輸出a數(shù)組a數(shù)組大小(2×3)b數(shù)組大小(3×2)//a數(shù)組元素的遍歷:for(i=0;i<2;i++){for(j=0;j<3;j++){printf("%5d",a[i][j]);
}printf(“\n”);
}如何在這個(gè)循環(huán)中遍歷b數(shù)組?b[j][i]=a[i][j];能不能用a數(shù)組存放互換的結(jié)果?main()
{inti,j,row,col,max;
staticinta[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};
max=a[0][0];row=0,col=0;
for(i=0;i<=2;i++)
for(j=0;j<=3;j++)
if(a[i][j]>)
{max=a[i][j];
row=i;
col=j;}
printf("max=%d,row=%d,column=%d\n",,row,col);
}例6.11有一個(gè)3*4的矩陣,要求編程序以求出其中值最大的那個(gè)元素的值,以及其所在的行號(hào)和列號(hào)。a[i][j]>maxmax=a[i][j]row=icolumn=j真假forj=0to3fori=0to2輸出:max、row和columnmax=a[0][0]------------------------------在數(shù)組的遍歷中,只要沒有改變?cè)氐闹?記住元素位置就不用記錄元素內(nèi)容maxa[row][col]a[row][col]maxsum=0;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
if(i==j)
sum+=a[i][j];
例6.12求方陣主對(duì)角線元素的和。12356789a=sum=0;
for(i=0;i<N;i++)
sum+=a[i][i];
空循環(huán)了很多次,浪費(fèi)時(shí)間例6.13:編程求兩個(gè)矩陣的乘積。(A=M*N,B=N*P,C=M*P)123412a=141212343b=a*b=main(){staticinta[2][3]={{1,2,3},{4,1,2}},b[3][3]={{1,4,1},{2,1,2},{3,4,3}};intc[2][3],i,j,k;for(i=0;i<2;i++)for(j=0;j<3;j++){c[i][j]=0;for(k=0;k<3;k++)c[i][j]]+=a[i][k]*b[k][j];}printf("arrayc:\n");for(i=0;i<2;i++){for(j=0;j<3;j++)printf("%5d",c[i][j]);printf("\n");}}c[1][1]=1*1+2*2+3*3=1414c[2][2]=4*4+1*1+2*4=252518141212c[i][j]=sum(?)c[i][j]=0;for(k=0;k<N;k++)
c[i][j]+=a[i][k]*b[k][j];3.字符數(shù)組—存放字符串的數(shù)組Iamhappyc[0]c[1]c[2]c[3]c[4]c[5]c[6]c[7]c[8]c[9]charc[]={'c','','p','r','o','g','r','a','m'}cprogramc[0]c[1]c[2]c[3]c[4]c[5]c[6]c[7]c[8]字符數(shù)組的定義、初始化和引用方式:
charc[10],b[3][4];
charc[10]={'I','','a','m','','h','a','p','p','y'};字符數(shù)組程序舉例:例6.14輸出一個(gè)字符串。
main(){charc[10]={'I','','a','m','','a','','b','o','y'};inti;for(i=0;i<10;i++)printf("%c",c[i]);}例6.15輸出一個(gè)鉆石圖形。main(){chardiamond[][5]={{'','','*',},{'','*','','*'},{'*','','','','*'},{'','*','','*'},{'','','*'}};inti,j;for(i=0;i<5;i++){for(j=0;j<5;j++)printf("%c",diamond[i][j]);printf("\n");}}字符串和字符串結(jié)束標(biāo)志:字符串:用雙引號(hào)括起來(lái)的一串字符。字符串結(jié)束標(biāo)志:C語(yǔ)言規(guī)定,以字符‘\0’作為字符串結(jié)束標(biāo)志。例如:“Iamhappy”在內(nèi)存的存放為Iamhappy\0系統(tǒng)自動(dòng)在最后附加C語(yǔ)言中將字符串作為字符數(shù)組來(lái)處理(即將字符串存放在字符數(shù)組中)。當(dāng)字符串存放在字符數(shù)組中時(shí),系統(tǒng)會(huì)自動(dòng)附加一個(gè)字符‘\0’。如:
staticcharc[]={"Iamhappy"};Iamhappyc[0]c[1]c[2]c[3]c[4]c[5]c[6]c[7]c[8]c[9]c[10]\0用字符串常量初始化字符數(shù)組charc[10]={"china"};Chinac[0]c[1]c[2]c[3]c[4]c[5]c[6]c[7]c[8]c[9]\0\0\0\0\0
charc[]={'I','','a','m','','h','a','p','p','y'};Iamhappyc[0]c[1]c[2]c[3]c[4]c[5]c[6]c[7]c[8]c[9]系統(tǒng)不加字符‘\0’。注意:下面兩例的不同
charc[]="Iamhappy";Iamhappyc[0]c[1]c[2]c[3]c[4]c[5]c[6]c[7]c[8]c[9]c[10]\0花括號(hào)也可省略系統(tǒng)自動(dòng)在最后附加字符數(shù)組的輸入輸出:逐個(gè)字符輸入輸出:用格式“%c”。如main(){staticcharc[10];inti;for(i=0;i<10;i++)scanf("%c",&c[i]);for(i=0;i<10;i++)printf("%c",c[i]);}數(shù)組名數(shù)組元素輸出時(shí)遇到第一個(gè)“\0”字符結(jié)束輸出。輸入字符串時(shí),不要超過數(shù)組長(zhǎng)度。字符串的輸入輸出:將整個(gè)字符串一次輸入輸出。用格式“%s”。
如:
main(){staticcharc[10];scanf("%s",c);printf("%s",c);}下面程序輸入數(shù)據(jù)為:Howareyou?
main(){staticcharc[20];scanf("%s",c);printf(“%s”,c);輸出結(jié)果:?
}C語(yǔ)言在用scanf輸入多個(gè)字符串時(shí),以空格分隔。如:
staticcharc[5],d[5],e[5];scanf("%s%s%s",c,d,e);
輸入數(shù)據(jù):Howareyou?則結(jié)果為you?e[0]e[1]e[2]e[3]e[4]\0HowHowc[0]c[1]c[2]c[3]c[4]\0\0ared[0]d[1]d[2]d[3]d[4]\0\0如何進(jìn)行字符串的操作,例如連接和比較?字符串程序舉例:例6.16比較兩個(gè)字符串是否相等。
staticchars1[20],s2[20];//s1=“Tony”,s2=“Tim”scanf("%s%s",s1,s2);
能否寫:if(s1==s2)?Xi=0;flag=1;while(s1[i]!=‘\0’){if(s1[i]!=s2[i]){flag=1;break;}i++;}補(bǔ)充練習(xí)1:求一個(gè)字符串的長(zhǎng)度補(bǔ)充練習(xí)2:將一個(gè)字符串復(fù)制到另一個(gè)數(shù)組中字符串處理函數(shù):puts(字符串)將一個(gè)字符串輸出到終端。在輸出時(shí)將‘\0’轉(zhuǎn)換成‘\n’如:staticcharstr[]="China\nXi’an";puts(str);輸出結(jié)果為:strcat(字符串1,字符串2)連接兩個(gè)字符串,把字符串2接到字符串1的后面,結(jié)果放在字符串1中,函數(shù)調(diào)用后得到一個(gè)函數(shù)值——字符串1的地址。注意字符串1要有足夠的空間存放結(jié)果。gets(字符串)從終端輸入一個(gè)字符串,并且得到一個(gè)函數(shù)值,該函數(shù)值是字符串的起始地址。如:gets(str);ChinaXi’anstrcpy(字符串1,字符串2,N)將字符串2的N個(gè)字符復(fù)制到字符串1中。例如:
staticcharstr[30]="People’sRepublicof";strcpy(str,"China”);strcpy(str,"happy”,2);
str字符串變?yōu)椋?/p>
ha\0na\0’sRepublicof\0\0……staticcharstr1[30]="People’sRepublicof";staticcharstr2[]="China";printf("%s",strcat(str1,str2));輸出:People’sRepublicofChina{chardiamond[][5]={{'','','*',},{'','*','','*'},printf("thesortednumbers:\n");str[i]==‘’輸入數(shù)據(jù):Howareyou?puts(a[i]);charc[]={'c','','p','r','o','g','r','a','m'}strcpy(max,a[i]);{for(j=0;j<N;j++)所謂初始化就是在定義數(shù)組的同時(shí),給數(shù)組元素賦初始值。mid=(low+hig)/2;//計(jì)算中間元素的位置fori=0to2例如:“Iamhappy”在內(nèi)存的存放為i=6(11)[113347617282]2547hig=mid-1;sum=0;
for(i=0;i<N;i++)
sum+=a[i][i];strcmp(字符串1,字符串2)
字符串1與字符串2比較,比較規(guī)則是兩個(gè)字符串自左至右逐個(gè)字符相比(按ASCII碼值大小比較),直到出現(xiàn)不同的字符或遇到\0為止。如全部字符相同,則認(rèn)為相等;若出現(xiàn)不同的字符,則以第一個(gè)不同的字符的比較結(jié)果為準(zhǔn)。比較結(jié)果由函數(shù)帶回。
如果:字符串1=字符串2,函數(shù)值為0。字符串1>字符串2,函數(shù)值為一正整數(shù)。字符串1<字符串2,函數(shù)值為一負(fù)整數(shù)。strlen(字符數(shù)組)
求字符串長(zhǎng)度。如:
staticcharstr[20]="China";printf("%d",strlen(str));strlwr(字符串)
將字符串中的大寫字母轉(zhuǎn)換成小寫字母。strupr(字符串)
將字符串中的小寫字母轉(zhuǎn)換成大寫字母。是否單詞分界?真假輸出取得字符串長(zhǎng)度讀入字符串字符串長(zhǎng)度循環(huán)單詞數(shù)加1例6.17輸入一行字符,統(tǒng)計(jì)其中有多少個(gè)單詞,單詞之間用空格分隔開。字符串處理函數(shù)程序舉例:nWordNum++gets(str);nWordNum=0;nWordNum+1自頂向下,逐步求精的程序設(shè)計(jì)方法:第一步:搞清程序的基本流程第二步:求出程序的實(shí)現(xiàn)細(xì)節(jié)第三步:設(shè)想程序的特殊情況len=strlen(str)for(i=0;i<len;i++)str[i]==‘’真單詞開始?假str[i-1]!=‘’特殊情況盡可能想全面有時(shí)會(huì)使用程序設(shè)計(jì)技巧word=1word=0word=0word==1第四步使用各種不同的數(shù)據(jù)情況進(jìn)行測(cè)試和調(diào)試#include<stdio.h>#include<string.h>#defineN100main(){charstr[N];inti,num=0,word=0;gets(str);intlen=strlen(str);for(i=0;i<len;i++){if(str[i]==''){if(word==1) {num++;word=0; }else word=1;num++;}printf("thereare%dwordsintheline\n",num);}#defineN100main(){charstr[N];inti,num=0,word=0;charc;gets(str);for(i=0;(c=str[i])!=‘\0’;i++)if(c==‘’)word=0;elseif(word==0){word=1;
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度國(guó)有企業(yè)員工績(jī)效評(píng)估及激勵(lì)合同
- 2025年度環(huán)保項(xiàng)目評(píng)估外聘專家合作協(xié)議
- 二零二五年度日租房短租與藝術(shù)展覽合作協(xié)議
- 二零二五年度家長(zhǎng)參與校園安全責(zé)任協(xié)議書反饋流程
- 環(huán)保能源行業(yè)項(xiàng)目投資風(fēng)險(xiǎn)免責(zé)
- 農(nóng)業(yè)行業(yè)精準(zhǔn)農(nóng)業(yè)技術(shù)支持平臺(tái)搭建方案
- 幼兒園繪本故事集征文
- 電商平臺(tái)商戶退換貨規(guī)則協(xié)議
- 高考語(yǔ)文大一輪總復(fù)習(xí) 文言文閱讀 文言實(shí)詞題題組訓(xùn)練試題
- 高考語(yǔ)文備考文言文閱讀專項(xiàng)練習(xí)之文言文斷句
- 2025年湖南理工職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)一套
- 2025年專利權(quán)侵權(quán)和解協(xié)議書范本
- 2024中考百日誓師大會(huì)動(dòng)員講話稿
- 2025年中國(guó)廣州軌道交通行業(yè)市場(chǎng)全景評(píng)估及投資前景展望報(bào)告
- 2025年中國(guó)電力中電華創(chuàng)電力技術(shù)研究有限公司招聘筆試參考題庫(kù)附帶答案詳解
- 教職工開學(xué)安全第一課培訓(xùn)
- 2025年貴州貴安發(fā)展集團(tuán)有限公司招聘筆試參考題庫(kù)含答案解析
- 2024-2025學(xué)年北京西城區(qū)八年級(jí)初二(上)期末英語(yǔ)試卷(含答案)
- 《家庭護(hù)士》課件
- 2024年社區(qū)工作者考試時(shí)事政治模擬題及答案
- 物業(yè)服務(wù)行業(yè)禮儀培訓(xùn)
評(píng)論
0/150
提交評(píng)論