版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第6章數(shù)組6.1一維數(shù)組6.2二維數(shù)組6.3
字符數(shù)組6.1一維數(shù)組6.1.1一維數(shù)組的定義6.1.2一維數(shù)組元素的引用6.1.3一維數(shù)組的初始化6.1.4一維數(shù)組程序舉例6.1.1一維數(shù)組的定義問題:輸入30個(gè)數(shù),將它們排序后輸出。設(shè)置變量:s0、s1、s2、……s29這些數(shù)據(jù)的特點(diǎn)是:具有相同的數(shù)據(jù)類型使用過程中需要保留原始數(shù)據(jù)s012296.1.1一維數(shù)組的定義數(shù)組:是相同類型數(shù)據(jù)的有序集合。數(shù)組中的每一個(gè)元素都屬于同一個(gè)數(shù)據(jù)類型。用一個(gè)統(tǒng)一的數(shù)組名和下標(biāo)來唯一確定數(shù)組元素。屬于構(gòu)造數(shù)據(jù)類型。構(gòu)造類型數(shù)據(jù)是由基本類型數(shù)據(jù)按一定規(guī)則組成的。s01229
s[0]s[1]s[29]6.1.1一維數(shù)組的定義優(yōu)點(diǎn):表述簡(jiǎn)潔,可讀性高便于使用循環(huán)結(jié)構(gòu)s01229
s[0]s[1]s[29]6.1.1一維數(shù)組的定義一維數(shù)組的定義的一般形式:例如:inta[10];
類型名數(shù)組名[常量表達(dá)式];數(shù)組元素的類型數(shù)組變量的名稱,標(biāo)識(shí)符用來給定數(shù)組長(zhǎng)度??梢允钦统A亢头?hào)常量,不能包含變量。//包含10個(gè)整型元素的數(shù)組a6.1.1一維數(shù)組的定義正確的定義方法:charc[200];floatf[5];#defineN10intnum[10+N];錯(cuò)誤的定義方法:intarray(10);charstr[];intn;floatscore[n];6.1.2一維數(shù)組元素的引用引用數(shù)組元素的一般形式:數(shù)組名[下標(biāo)]例:inta[10];//10個(gè)元素:a[0]、a[1]、……a[9]//下標(biāo)不要越界,不能使用a[10]可以是整型常量或整型表達(dá)式。下標(biāo)取值范圍:[0,數(shù)組長(zhǎng)度-1]說明:數(shù)組必須先定義,后使用。只能引用數(shù)組元素而不能一次引用整個(gè)數(shù)組。數(shù)組元素的使用方法與同類型的變量相同例如:intk,a[10];k=3;a[0]=23;a[k-2]=a[0]+1;scanf("%d",&a[9]);a[0]=a[5]+a[7]-a[2*3];6.1.2一維數(shù)組元素的引用一維數(shù)組在內(nèi)存中的存放:一維數(shù)組的數(shù)組元素在內(nèi)存里按順序存放。系統(tǒng)根據(jù)數(shù)組元素的類型分配存儲(chǔ)單元。數(shù)組名代表數(shù)組的首地址。例如:floatmark[100];低地址mark[0]mark[1]mark[2]mark[3]…高地址mark[99]一個(gè)元素占4個(gè)字節(jié)86.592.077.552.0…94.0【例6.1】一維數(shù)組的輸出。main(){inta[10];inti;for(i=0;i<10;i++)a[i]=i;for(i=0;i<10;i++)printf("%d",a[i]);printf("\n");}運(yùn)行結(jié)果:0123456789aa[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]【例6.2】數(shù)組元素的引用。main(){inti;inta[10];printf("input10numbers:\n");for(i=0;i<10;i++)scanf("%d",&a[i]);for(i=0;i<10;i++)printf("%d",a[i]);printf("\n");for(i=9;i>=0;i--)printf("%d",a[i]);printf("\n");}運(yùn)行情況:12345678910↙1234567891010987654321aa[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]6.1.3一維數(shù)組的初始化是指在定義一個(gè)數(shù)組變量的同時(shí)給它賦值。對(duì)全部數(shù)組元素初始化inta[10]={0,1,2,3,4,5,6,7,8,9};說明:數(shù)組不初始化,其元素值為隨機(jī)數(shù)。aa[0]0a[1]1a[2]2a[3]3a[4]4a[5]5a[6]6a[7]7a[8]8a[9]96.1.3一維數(shù)組的初始化只給部分?jǐn)?shù)組元素賦初值。如果只給數(shù)組的前半部分元素賦初值,可連續(xù)寫出初值。例如:inta[5]={1,2};只給數(shù)組的后半部分元素或某些不連續(xù)的元素賦初值,則不予賦值的地方應(yīng)寫0。例如:inta[5]={0,3,0,7,9};inta[5]={1,,3,,5};a[0]a[1]a[2]a[3]a[4]12000a[0]a[1]a[2]a[3]a[4]030786.1.3一維數(shù)組的初始化使一個(gè)數(shù)組中全部元素值為0,可以寫成:inta[10]={0,0,0,0,0,0,0,0,0,0};或inta[10]={0};不能inta[10]={0*10};6.1.3一維數(shù)組的初始化在對(duì)全部數(shù)組元素賦初值時(shí),由于數(shù)據(jù)的個(gè)數(shù)已經(jīng)確定,因此可以不指定數(shù)組長(zhǎng)度。例如:inta[5]={1,2,3,4,5};也可以寫成inta[]={1,2,3,4,5};
inta[];6.1.4一維數(shù)組程序舉例【例6.3】輸入10個(gè)數(shù),求和。#include<stdio.h>main(){
inti,a[10]; longsum=0; for(i=0;i<10;i++)
scanf("%d",&a[i]); for(i=0;i<10;i++) sum=sum+a[i];
printf("%ld\n",sum);}【例6.3】輸入10個(gè)數(shù),求和。#include<stdio.h>main(){
inti,a[10]; longsum=0; for(i=0;i<10;i++) {
scanf("%d",&a[i]); sum=sum+a[i]; }
printf("%ld\n",sum);}【例6.4】計(jì)算fibonacci數(shù)列前20個(gè)數(shù)。分析:用數(shù)組f[20]存放fibonacci數(shù)列的前20個(gè)數(shù)f[0]=f[1]=1f[n]=f[n-1]+f[n-2](2≤n≤19)Fibonacci數(shù)列:1,1,2,3,5,8,13……1 (n=1)1 (n=2)Fn-1+Fn-2 (n>2)Fn=f[0]1f[1]1f[2]f[3]f[4]f[5]f[6]…f[18]f[19]【例6.4】計(jì)算fibonacci數(shù)列前20個(gè)數(shù)。
inti;
int
f[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]); }523求最小值問題【例6.5】輸入10個(gè)數(shù),求最小值?!纠?.6】輸入n個(gè)數(shù)(n<10),求最小值?!纠?.7】輸入n個(gè)數(shù)(n<10),輸出最小值和它所對(duì)應(yīng)的下標(biāo)?!纠?.8】輸入n個(gè)數(shù)(n<10),將最小值與第一個(gè)數(shù)交換,然后再輸出整個(gè)數(shù)組?!纠?.5】輸入10個(gè)數(shù),求最小值。
inti,a[10],min; //min:存放最小數(shù)
for(i=0;i<10;i++)
scanf("%d",&a[i]); min=a[0]; for(i=1;i<10;i++) if(a[i]<min)min=a[i];
printf("%d\n",min);a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]a【例6.6】輸入n個(gè)數(shù)(n<10),求最小值。
inti,a[10],min,n;
printf("input
n(n<10):\n");
scanf("%d",&n);
printf("input%dnumbers:\n",n);
for(i=0;i<n;i++)
scanf("%d",&a[i]); min=a[0]; for(i=1;i<n;i++) if(a[i]<min)min=a[i];
printf("%d\n",min);【例6.7】輸入n個(gè)數(shù)(n<10),輸出最小值和它所對(duì)應(yīng)的下標(biāo)。分析:index:記錄最小值對(duì)應(yīng)的下標(biāo);a[index]:最小值輸入數(shù)組aindex=0fori=1ton-1a[i]<a[index]index=i輸出最小值a[index]和下標(biāo)indexYN【例6.7】輸入n個(gè)數(shù)(n<10),輸出最小值和它所對(duì)應(yīng)的下標(biāo)。N-S流程圖:
inti,min,n,index,a[10];
printf("input
n(n<10):\n");
scanf("%d",&n);
printf("input%dnumbers:\n",n); for(i=0;i<n;i++)
scanf("%d",&a[i]);
index=0; for(i=1;i<n;i++) if(a[i]<a[index])index=i;
printf("a[%d]=%d\n",index,a[index]);【例6.7】輸入n個(gè)數(shù)(n<10),輸出最小值和它所對(duì)應(yīng)的下標(biāo)。【例6.8】輸入n個(gè)數(shù)(n<10),將最小值與第一個(gè)數(shù)交換,然后再輸出整個(gè)數(shù)組。分析:用index記錄最小值的下標(biāo),a[index]就是最小值最小值與第一個(gè)數(shù)交換:a[index]<==>a[0]a[0]a[1]a[2]a[index]a輸入數(shù)組aindex=0fori=1ton-1a[i]<a[index]index=i
a[index]<==>a[0]YN【例6.8】輸入n個(gè)數(shù)(n<10),將最小值與第一個(gè)數(shù)交換,然后再輸出整個(gè)數(shù)組。N-S流程圖:排序問題【例】用選擇法對(duì)數(shù)據(jù)進(jìn)行排序?!纠坑妹芭莘▽?duì)數(shù)據(jù)進(jìn)行排序?!纠坑眠x擇法對(duì)n個(gè)數(shù)據(jù)進(jìn)行排序。假設(shè)n=53528115283125831238512358a[0]a[1]a[2]a[3]a[4]【例】用選擇法對(duì)n個(gè)數(shù)據(jù)進(jìn)行排序。選擇法排序過程:從n個(gè)數(shù)中找出最小的,將它與第一個(gè)數(shù)交換,結(jié)果最小的數(shù)被安置在第一個(gè)元素位置上;再?gòu)氖S嗟膎-1個(gè)數(shù)中找出次小的數(shù),將它與第二個(gè)數(shù)交換;重復(fù)上述過程,共經(jīng)過n-1趟排序后,排序結(jié)束?!纠坑眠x擇法對(duì)n個(gè)數(shù)據(jù)進(jìn)行排序。分析:5個(gè)數(shù)a[0]~a[4]中找最小數(shù),與a[0]交換4個(gè)數(shù)a[1]~a[4]中找最小數(shù),與a[1]交換3個(gè)數(shù)
a[2]~a[4]中找最小數(shù),與a[2]交換2個(gè)數(shù)
a[3]~a[4]中找最小數(shù),與a[3]交換【例】用選擇法對(duì)n個(gè)數(shù)據(jù)進(jìn)行排序。對(duì)于n個(gè)數(shù):n個(gè)數(shù)
a[0]~a[n-1]中找最小數(shù),與a[0]交換n-1個(gè)數(shù)
a[1]~a[n-1]中找最小數(shù),與a[1]交換…2個(gè)數(shù)
a[n-2]~a[n-1]中找最小數(shù),與a[n-2]交換總結(jié):a[k]~a[n-1]中找最小值,與a[k]交換(k的范圍:0~n-2)【例】用選擇法對(duì)n個(gè)數(shù)據(jù)進(jìn)行排序。N-S流程圖表示:輸入數(shù)組aindex=kfori=k+1ton-1a[i]<a[index]index=ia[index]<==>a[k]YNfork=0ton-2輸出數(shù)組a【例】用選擇法對(duì)n個(gè)數(shù)據(jù)進(jìn)行排序。
inti,index,k,n,temp,a[10];
scanf("%d",&n); for(i=0;i<n;i++)
scanf("%d",&a[i]); for(k=0;k<=n-2;k++) { index=k; for(i=k+1;i<=n-1;i++) if(a[i]<a[index])index=i; temp=a[index]; a[index]=a[k]; a[k]=temp; } for(i=0;i<n;i++)
printf("%d",a[i]);運(yùn)行情況:5↙35281↙12358【例】用冒泡法對(duì)n個(gè)數(shù)據(jù)進(jìn)行排序。設(shè)n=6第一趟比較經(jīng)過第一趟(共5次比較與交換)后,最大數(shù)9“沉底”。【例】用冒泡法對(duì)n個(gè)數(shù)據(jù)進(jìn)行排序。第二趟比較如果有n個(gè)數(shù),則要進(jìn)行n-1趟比較。在第1趟比較中要進(jìn)行n-1次兩兩比較,在第j趟比較中要進(jìn)行n-j次兩兩比較。【例】用冒泡法對(duì)n個(gè)數(shù)據(jù)進(jìn)行排序。冒泡法排序過程:第一趟冒泡排序比較第一個(gè)數(shù)與第二個(gè)數(shù),若為逆序a[0]>a[1],則交換;然后依次兩兩比較,結(jié)果最大的數(shù)被安置在最后一個(gè)元素位置上;第二趟冒泡排序?qū)η皀-1個(gè)數(shù)進(jìn)行,結(jié)果使次大的數(shù)被安置在第n-1個(gè)元素位置;重復(fù)上述過程,共經(jīng)過n-1趟冒泡排序后,排序結(jié)束。【例】用冒泡法對(duì)n個(gè)數(shù)據(jù)進(jìn)行排序。總結(jié):對(duì)于6個(gè)數(shù),共進(jìn)行5趟比較過程。第1趟排序(a[0]-a[5]):進(jìn)行5次兩兩比較。第2趟排序(a[0]-a[4]):經(jīng)過4次兩兩比較。第3趟排序(a[0]-a[3]):經(jīng)過3次兩兩比較。第4趟排序(a[0]-a[2]):2次兩兩比較。第5趟排序(a[0]-a[1]):1次兩兩比較【例】用冒泡法對(duì)n個(gè)數(shù)據(jù)進(jìn)行排序。N-S流程圖表示:輸入數(shù)組a[n]forj=0ton-2fori=0ton-2-ja[i]>a[i+1]真假a[i]
a[i+1]輸出a[0]到a[n-1]n-1趟比較【例】用冒泡法對(duì)n個(gè)數(shù)據(jù)進(jìn)行排序。
inti,j,t,a[10];
printf("input10number:\n"); for(i=0;i<10;i++)
scanf("%d",&a[i]);
printf("\n"); for(j=0;j<=8;j++) for(i=0;i<=8-j;i++) if(a[i]>a[i+1]) { t=a[i];
a[i]=a[i+1]; a[i+1]=t; }6.2二維數(shù)組一維數(shù)組:處理列表/向量二維數(shù)組:處理表格/平面矩陣三維數(shù)組:處理三維空間的方陣6.2二維數(shù)組6.2.1二維數(shù)組的定義6.2.2二維數(shù)組元素的引用6.2.3二維數(shù)組的初始化6.2.4二維數(shù)組的輸入輸出6.2.5二維數(shù)組程序舉例6.2.1二維數(shù)組的定義二維數(shù)組變量定義的一般形式:例如:floata[3][4];//a為3行4列的數(shù)組類型說明數(shù)組名[常量表達(dá)式][常量表達(dá)式];行數(shù)列數(shù)6.2.1二維數(shù)組的定義錯(cuò)誤的數(shù)組定義方法:int
a[3,4];intb(3,4);intc[][];intd(3)(4);6.2.2二維數(shù)組元素的引用二維數(shù)組元素的表示形式為:例:inta[3][4];a[0][0]=3;a[0][1]=a[0][0]+10;
a[3][4]=3; /*下標(biāo)越界*/數(shù)組名[行下標(biāo)][列下標(biāo)]行下標(biāo)的取值范圍:[0,行長(zhǎng)度-1]列下標(biāo)的取值范圍:[0,列長(zhǎng)度-1]說明:我們可以把二維數(shù)組看作是一種特殊的一維數(shù)組:它的元素又是一個(gè)一維數(shù)組。例:inta[3][4];6.2.2二維數(shù)組元素的引用二維數(shù)組在內(nèi)存的存放:二維數(shù)組可看作特殊的一維數(shù)組;二維數(shù)組的元素在內(nèi)存中按行存放。例如:
inta[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]6.2.3二維數(shù)組的初始化4種方法對(duì)二維數(shù)組初始化:分行給二維數(shù)組賦初值。例如:
inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};1234567891011126.2.3二維數(shù)組的初始化將所有數(shù)據(jù)寫在一個(gè)花括號(hào)內(nèi),按數(shù)組排列的順序?qū)Ω髟刭x初值。例如:inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};1234567891011126.2.3二維數(shù)組的初始化只對(duì)部分元素賦初值。例如:inta[3][4]={{1},{5},{9}};inta[3][4]={{1},{0,6},{0,0,11}};inta[3][4]={{1},{5,6}};10005000900010000600001101000560000006.2.3二維數(shù)組的初始化如果對(duì)全部元素都賦初值,則定義數(shù)組時(shí),對(duì)第一維的長(zhǎng)度可以不指定。例如:inta[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};6.2.4二維數(shù)組的輸入輸出二維數(shù)組的輸入:inti,j;inta[3][2];for(i=0;i<3;i++
) //行標(biāo)
for(j=0;j<2;j++
) //列標(biāo)
scanf(“%d”,&a[i][j]);a[0][0]1a[0][1]2a[1][0]3a[1][1]4a[2][0]5a[2][1]6輸入:123456a1234566.2.4二維數(shù)組的輸入輸出二維數(shù)組的輸入:inti,j;inta[3][2];for(j=0;j<2;j++) //列標(biāo)
for(i=0;i<3;i++
) //行標(biāo)
scanf(“%d”,&a[i][j]);輸入:123456a[0][0]1a[0][1]4a[1][0]2a[1][1]5a[2][0]3a[2][1]6a1425366.2.4
二維數(shù)組的輸入輸出以矩陣的形式輸出二維數(shù)組a[0][0]a[0][1]a[1][0]a[1][1]a[2][0]a[2][1]inti,j;inta[3][2];for(i=0;i<3;i++){for(j=0;j<2;j++)
printf("%d",a[i][j]);
printf("\n");}【例6.11】輸入二維數(shù)組,并按矩陣形式輸出。
inti,j,a[3][2]; for(i=0;i<3;i++) for(j=0;j<2;j++)
scanf("%d",&a[i][j]); for(i=0;i<3;i++) { for(j=0;j<2;j++)
printf("%5d",a[i][j]);
printf("\n"); }小結(jié):遍歷二維數(shù)組的方法:通常應(yīng)使用二層嵌套的for循環(huán);行下標(biāo)和列下標(biāo)分別做為循環(huán)變量;外層對(duì)行進(jìn)行循環(huán),內(nèi)層對(duì)列進(jìn)行循環(huán)6.2.5
二維數(shù)組程序舉例【例6.12】將二維數(shù)組a行列元素互換,存到另一個(gè)數(shù)組b中。
inta[2][3]={{1,2,3},{4,5,6}};
intb[3][2],i,j;
for(i=0;i<=1;i++) for(j=0;j<=2;j++) b[j][i]=a[i][j];【例6.13】有一個(gè)3×4的矩陣,要求編程序求出其中值最大的那個(gè)元素的值,以及其所在的行號(hào)和列號(hào)。分析:row:記錄值最大的那個(gè)元素的行下標(biāo)colum:記錄值最大的那個(gè)元素的列下標(biāo)max:最大的那個(gè)元素,即a[row][colum]【例6.13】有一個(gè)3×4的矩陣,要求編程序求出其中值最大的那個(gè)元素的值,以及其所在的行號(hào)和列號(hào)。N-S流程圖表示算法如下:【例6.13】有一個(gè)3×4的矩陣,要求編程序求出其中值最大的那個(gè)元素的值,以及其所在的行號(hào)和列號(hào)。
inti,j,row,colum,max;
inta[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}}; max=a[0][0]; for(i=0;i<3;i++)
for(j=0;j<4;j++) if(a[i][j]>max) { max=a[i][j]; row=i;
colum=j; } 【例6.13】有一個(gè)3×4的矩陣,要求編程序求出其中值最大的那個(gè)元素的值,以及其所在的行號(hào)和列號(hào)。
inti,j,row,colum;
inta[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}}; row=0;
colum=0; for(i=0;i<3;i++)
for(j=0;j<4;j++) if(a[i][j]>a[row][colum]) { row=i;
colum=j; } 【例6.14】有5個(gè)學(xué)生,已知每個(gè)學(xué)生有5門課的成績(jī),要求輸出平均成績(jī)最高的學(xué)生的成績(jī),以及該學(xué)生的序號(hào)。分析:采用5*6的二維數(shù)組:科目學(xué)生語(yǔ)文數(shù)學(xué)物理化學(xué)英語(yǔ)平均成績(jī)張三7882937465李四9182727667李敏10090857298王超6789906578王瑩7788994589【例6.14】有5個(gè)學(xué)生,已知每個(gè)學(xué)生有5門課的成績(jī),要求輸出平均成績(jī)最高的學(xué)生的成績(jī),以及該學(xué)生的序號(hào)。inti,j,max_i;floatsum,max=0;floats[5][6]={{78,82,93,74,65},{91,82,72,76,67},{100,90,85,72,98},{67,89,90,65,78},{77,88,99,45,89}};科目學(xué)生語(yǔ)文數(shù)學(xué)物理化學(xué)英語(yǔ)平均成績(jī)張三7882937465李四9182727667李敏10090857298王超6789906578王瑩7788994589
for(i=0;i<5;i++) //求學(xué)生的平均成績(jī)
{sum=0;for(j=0;j<5;j++)sum=sum+s[i][j];s[i][5]=sum/5;}for(i=0;i<5;i++)if(s[i][5]>max){max=s[i][5];
max_i=i;}科目學(xué)生語(yǔ)文數(shù)學(xué)物理化學(xué)英語(yǔ)平均成績(jī)張三7882937465李四9182727667李敏10090857298王超6789906578王瑩77889945896.3字符數(shù)組6.3.1字符數(shù)組的定義6.3.2字符數(shù)組的初始化6.3.3字符串和字符串結(jié)束標(biāo)志6.3.4字符數(shù)組的輸入輸出6.3.5字符串處理函數(shù)6.3.6字符數(shù)組應(yīng)用舉例6.3.1字符數(shù)組的定義用來存放字符數(shù)據(jù)的數(shù)組是字符數(shù)組。定義字符數(shù)組的一般形式:char
數(shù)組名[常量表達(dá)式];例如:
charc[10];//包含10個(gè)字符的數(shù)組6.3.2字符數(shù)組的初始化用字符常量賦初值可逐個(gè)字符賦給數(shù)組中各元素。例如:charc[10]={'I','','a','m','','h','a','p','p','y'};說明:如果在定義字符數(shù)組時(shí)不進(jìn)行初始化,數(shù)組元素的值為隨機(jī)數(shù)。如果初值個(gè)數(shù)>數(shù)組長(zhǎng)度,則語(yǔ)法錯(cuò)誤;如果初值個(gè)數(shù)<數(shù)組長(zhǎng)度,則只將這些字符賦給數(shù)組中前面那些元素,其余元素自動(dòng)定為空字符例如:charc[10]={'c','','p','r','o','g','r','a','m'};說明:如果提供的初值個(gè)數(shù)與預(yù)定的數(shù)組長(zhǎng)度相同,在定義時(shí)可以省略數(shù)組長(zhǎng)度,系統(tǒng)會(huì)自動(dòng)根據(jù)初值個(gè)數(shù)確定數(shù)組長(zhǎng)度。例如:charc[]={'I','','a','m','','h','a','p','p','y',};6.3.2字符數(shù)組的初始化用字符串常量賦初值例如:charc[]={"Iamhappy"};charc[]="Iamhappy";等價(jià)于charc[]={'I','','a','m','','h','a','p','p','y','\0'};說明:字符串常量包含一個(gè)字符串結(jié)束符'\0'6.3.3字符串和字符串結(jié)束標(biāo)志字符串常量的存儲(chǔ)和運(yùn)算用一維字符數(shù)組實(shí)現(xiàn)。字符串特殊的一維字符數(shù)組。c語(yǔ)言規(guī)定:一個(gè)字符串以字符'\0'作為字符串結(jié)束標(biāo)志。例如:charc[]="Happy";Happy\0說明:字符數(shù)組并不要求最后一個(gè)字符為'\0'在程序中往往依靠檢測(cè)‘\0’的位置來判定字符串是否結(jié)束?!纠?.15】計(jì)算字符串的有效長(zhǎng)度,并輸出該字符串。字符串的有效長(zhǎng)度:有效字符的個(gè)數(shù)。即:數(shù)組中第一個(gè)'\0'前面的字符個(gè)數(shù)。Happy\0???s[0]s[1]s[2]s[3]s[4]s[5]s[6]s[7]s[8]……【例6.15】計(jì)算字符串的有效長(zhǎng)度,并輸出該字符串。chars[80]="Happy";inti,len;for(i=0;s[i]!='\0';i++);
len=i;printf("len=%d\n",len);for(i=0;s[i]!='\0';i++)
putchar(s[i]); //計(jì)算有效長(zhǎng)度//for(i=0;i<len;i++)6.3.4字符數(shù)組的輸入/輸出字符數(shù)組的輸入/輸出有兩種方法:?jiǎn)蝹€(gè)字符輸入/輸出使用格式控制符“%c”字符串的輸入/輸出格式控制符“%s”1、單個(gè)字符輸入/輸出【例6.16】字符數(shù)組的輸出。#include<stdio.h>voidmain(){ charc[10]={'I','','a','m','','a','','b','o','y'};
inti; for(i=0;i<10;i++)
printf("%c",c[i]);
printf("\n");}//putchar(c[i]);2、字符串的輸入/輸出用格式符“%s”輸出字符串如:charc[]={"China"};printf("%s",c);
輸出遇結(jié)束符'\0'結(jié)束說明:不輸出結(jié)束符'\0',且輸出后不換行。printf函數(shù)中的輸出項(xiàng)是字符數(shù)組名,而不是數(shù)組元素名。把第一個(gè)“\0”字符之前的部分輸出,其它的字符被忽略。
charc[20]="China\0Beijing";
printf("%s",c);
printf("%s",c);輸出:ChinaChinachara[5]={‘H’,’e’,’l’,’l’,’o’};printf(“%s”,a);chara[]=“Hello”;printf(“%s”,a);輸出:Hello#-=*輸出:Hellochara[]={'h','e','l','\0','l','o','\0'};printf("%s",a);輸出:hel【例6.17】判斷輸出結(jié)果。2、字符串的輸入/輸出用格式符“%s”輸入字符串例如:charc[10];scanf("%s",c);輸入:beijing
說明:輸入時(shí),遇空格鍵或回車鍵時(shí)結(jié)束輸入。系統(tǒng)自動(dòng)在字符串末尾添加'\0'結(jié)束符。beijing\0【例6.18】輸入一個(gè)以問號(hào)結(jié)束的字符串(少于80個(gè)字符),統(tǒng)計(jì)其中數(shù)字字符的個(gè)數(shù)。分析:數(shù)組長(zhǎng)度取上限80以'?'做為輸入結(jié)束符將輸入結(jié)束符'?'轉(zhuǎn)換為字符串結(jié)束符'\0'It's512?It's512\0
intcount=0,i=0; chars[80]; while((s[i]=getchar())!='?') i++;
s[i]='\0'; for(i=0;s[i]!='\0';i++) if(s[i]<='9'&&s[i]>='0') count++;
printf("count=%d\n",count);運(yùn)行結(jié)果:It's512?count=3【例6.18】輸入一個(gè)以問號(hào)結(jié)束的字符串(少于80個(gè)字符),統(tǒng)計(jì)其中數(shù)字字符的個(gè)數(shù)。說明:如果輸入的字符串中有空格,只將空格以前的部分讀入數(shù)組。
chara[15];
scanf("%s",a);
printf("%s\n",a);輸入:Howareyou?
how說明:如果利用一個(gè)scanf函數(shù)輸入多個(gè)字符串,則以空格分隔。chara[5],b[5],c[5];scanf("%s%s%s",a,b,c);輸入:Howareyou?
說明:使用字符數(shù)組名,而不是數(shù)組元素名。輸入串長(zhǎng)度<數(shù)組長(zhǎng)度不要加地址運(yùn)算符“&”。
如:scanf("%s",a);6.3.5字符串處理函數(shù)puts函數(shù)gets函數(shù)字符串連接函數(shù)strcat()字符串拷貝函數(shù)strcpy()字符串比較函數(shù)strcmp()計(jì)算字符串長(zhǎng)度的函數(shù)strlen()1.puts函數(shù)功能:輸出字符串輸出字符串后自動(dòng)換行可以包含轉(zhuǎn)義字符一般形式:puts(字符數(shù)組)例如:charstr[]={"China\nBeijing"};puts(str);運(yùn)行結(jié)果:ChinaBeijing2、gets函數(shù)功能:從鍵盤接收一個(gè)以回車結(jié)束的字符串放入字符數(shù)組,并自動(dòng)加‘\0’輸入的字符串中可以包含空格。一般形式:gets(字符數(shù)組)例如:charstring[80];gets(string);puts(string);輸入:Howareyou?
Howareyou?說明:用puts和gets函數(shù)只能輸入/輸出一個(gè)字符串。不能寫成puts(str1,str2)gets(str1,str2)3、字符串連接函數(shù)strcat()一般形式:
作用:把字符串str2連接到字符串str1的后面,結(jié)果放在str1中。連接后,str1的
'\0'取消,新字符串最后加
'\0'。strcat(str1,str2)3、字符串連接函數(shù)strcat()例如:chara[20]="Mynameis",b[10]="Liming";strcat(a,b);aMynameisLiming\0bLiming\0aMynameis\04、字符串拷貝函數(shù)strcpy()一般形式:作用:將字符串str2復(fù)制到字符串str1中。說明:str1的長(zhǎng)度應(yīng)大于str2的長(zhǎng)度;拷貝時(shí)'\0'一同拷貝strcpy(str1,str2)4、字符串拷貝函數(shù)strcpy()例如:charstr1[]="student",str2[]="china";strcpy(str1,str2);str1student\0str1china\0t\0str2china\0說明:可以用strncpy函數(shù)將一個(gè)字符串中的前若干個(gè)字符復(fù)制到另一個(gè)字符串中。例如:charstr1[]="student",str2[]="china";strncpy(str1,str2,2);str1student\0str1chudent\0str2china\0說明:不能用賦值語(yǔ)句將一個(gè)字符串常量或字符數(shù)組直接給一個(gè)字符數(shù)組。例如:charstr1[20],str2[20];str1={“Hello!”}; //數(shù)組名代表地址str2=str1;【例6.19】分析下面程序的運(yùn)行結(jié)果。#include<stdio.h>voidmain(){ charc1[10]="abcdefghi",c2[]="china";
strcpy(c1,c2); puts(c1);
printf("%c",c1[7]);}運(yùn)行結(jié)果:chinah5、字符串比較函數(shù)strcmp()一般形式:作用:對(duì)兩個(gè)字符串從左向右逐個(gè)字符比較ASCII碼,直到遇到不同字符或遇到'\0'為止。
若str1
<str2,返回負(fù)整數(shù)
若str1
>str2,返回正整數(shù)
若str1
==str2,返回零strcmp(str1,str2)str1abc\0
str2abcde\0str1abcd\0
str2Abcde\0strcmp(str1,str2)>0strcmp(str1,str2)<0str1china\0str2china\0strcmp(str1,str2)==0說明:字符串比較不能直接用關(guān)系運(yùn)算符,必須用strcmp函數(shù)。如:if(strcmp(str1,str2)>0) if(str1>str2) 【例6.20】比較兩個(gè)字符串的大小。#include<stdio.h>voidmain(){ chars1[]="aBC",s2[]="abc"; if(strcmp(s1,s2)==0) printf("s1=s2"); elseif(strcmp(s1,s2)>0) printf("s1>s2"); else printf("s1<s2");}輸出結(jié)果:s1<s2【例6.21】有3個(gè)字符串,要求找出其中最大者。
chars1[10]="China",s2[10]="America", s3[10]="Japan", string[10]; if(strcmp(s1,s2)>0) strcpy(string,s1); else strcpy(string,s2); if(strcmp(s3,string)>0) strcpy(string,s3);
puts(string);6、計(jì)算字符串長(zhǎng)度的函數(shù)strlen()一般形式:作用:計(jì)算字符串長(zhǎng)度(實(shí)際長(zhǎng)度,不包括'\0'
)。strlen(str)【例6.22】寫出程序的運(yùn)行結(jié)果。#include<string.h>#include<stdio.h>voidmain(){ charstr[20]={"hello\0abcd\0abc\0"};
printf("%d\n",strlen(str));}運(yùn)行結(jié)果:56.3.6字符數(shù)組應(yīng)用舉例【例6.23】輸入一行字符,統(tǒng)計(jì)其中以空格分開的單詞的個(gè)數(shù)。分析:?jiǎn)卧~的數(shù)目可以由空格出現(xiàn)的次數(shù)決定。連續(xù)的若
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 抖音電商達(dá)人招募合同模板
- 綠化費(fèi)合同模板
- 飲料供應(yīng)合同模板
- 課時(shí)01 功(基礎(chǔ)練)-2024-2025學(xué)年八年級(jí)物理下冊(cè)十分鐘同步課堂專練(人教版)含答案
- 一般青旅社租賃合同模板
- 村集體閑置看護(hù)房承包合同(2篇)
- 報(bào)班合同模板
- 墓地長(zhǎng)期租用合同模板
- 高壓電力合同模板
- 鋼網(wǎng)架安裝施工合同模板
- 機(jī)床數(shù)控技術(shù)PPT完整全套教學(xué)課件
- 文印投標(biāo)服務(wù)方案
- 小學(xué)美術(shù)-7有趣的圖形教學(xué)課件設(shè)計(jì)
- 26個(gè)英文字母描紅(A4打印版)-26個(gè)英文字母描紅打印
- 2023年江蘇省南京市鼓樓區(qū)九年級(jí)上學(xué)期數(shù)學(xué)期中考試試卷含答案
- 光伏項(xiàng)目概算計(jì)算表
- 鈑金工常用工具簡(jiǎn)介
- 四季皆宜的養(yǎng)生藥膳食譜詳解演示文稿
- 新教材人教版高中物理必修第三冊(cè)全冊(cè)各章節(jié)課時(shí)分層練習(xí)題及章末測(cè)驗(yàn)含解析
- AA大華 教育 大華智慧校園 解決方案 V3.30(基線版)
- 永動(dòng)機(jī)電子教案
評(píng)論
0/150
提交評(píng)論