第6章-C語言-數(shù)組_第1頁
第6章-C語言-數(shù)組_第2頁
第6章-C語言-數(shù)組_第3頁
第6章-C語言-數(shù)組_第4頁
第6章-C語言-數(shù)組_第5頁
已閱讀5頁,還剩85頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第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個數(shù),將它們排序后輸出。設(shè)置變量:s0、s1、s2、……s29這些數(shù)據(jù)的特點是:具有相同的數(shù)據(jù)類型使用過程中需要保留原始數(shù)據(jù)s012296.1.1一維數(shù)組的定義數(shù)組:是相同類型數(shù)據(jù)的有序集合。數(shù)組中的每一個元素都屬于同一個數(shù)據(jù)類型。用一個統(tǒng)一的數(shù)組名和下標來唯一確定數(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)點:表述簡潔,可讀性高便于使用循環(huán)結(jié)構(gòu)s01229

s[0]s[1]s[29]6.1.1一維數(shù)組的定義一維數(shù)組的定義的一般形式:例如:inta[10];

類型名數(shù)組名[常量表達式];數(shù)組元素的類型數(shù)組變量的名稱,標識符用來給定數(shù)組長度??梢允钦统A亢头柍A?,不能包含變量。//包含10個整型元素的數(shù)組a6.1.1一維數(shù)組的定義正確的定義方法:charc[200];floatf[5];#defineN10intnum[10+N];錯誤的定義方法:intarray(10);charstr[];intn;floatscore[n];6.1.2一維數(shù)組元素的引用引用數(shù)組元素的一般形式:數(shù)組名[下標]例:inta[10];//10個元素:a[0]、a[1]、……a[9]//下標不要越界,不能使用a[10]可以是整型常量或整型表達式。下標取值范圍:[0,數(shù)組長度-1]說明:數(shù)組必須先定義,后使用。只能引用數(shù)組元素而不能一次引用整個數(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ù)組元素的類型分配存儲單元。數(shù)組名代表數(shù)組的首地址。例如:floatmark[100];低地址mark[0]mark[1]mark[2]mark[3]…高地址mark[99]一個元素占4個字節(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");}運行結(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");}運行情況: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ù)組的初始化是指在定義一個數(shù)組變量的同時給它賦值。對全部數(shù)組元素初始化inta[10]={0,1,2,3,4,5,6,7,8,9};說明:數(shù)組不初始化,其元素值為隨機數(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ù)組的初始化只給部分數(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ù)組的初始化使一個數(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ù)組的初始化在對全部數(shù)組元素賦初值時,由于數(shù)據(jù)的個數(shù)已經(jīng)確定,因此可以不指定數(shù)組長度。例如:inta[5]={1,2,3,4,5};也可以寫成inta[]={1,2,3,4,5};

inta[];6.1.4一維數(shù)組程序舉例【例6.3】輸入10個數(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個數(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】計算fibonacci數(shù)列前20個數(shù)。分析:用數(shù)組f[20]存放fibonacci數(shù)列的前20個數(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】計算fibonacci數(shù)列前20個數(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個數(shù),求最小值?!纠?.6】輸入n個數(shù)(n<10),求最小值?!纠?.7】輸入n個數(shù)(n<10),輸出最小值和它所對應(yīng)的下標?!纠?.8】輸入n個數(shù)(n<10),將最小值與第一個數(shù)交換,然后再輸出整個數(shù)組?!纠?.5】輸入10個數(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個數(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個數(shù)(n<10),輸出最小值和它所對應(yīng)的下標。分析:index:記錄最小值對應(yīng)的下標;a[index]:最小值輸入數(shù)組aindex=0fori=1ton-1a[i]<a[index]index=i輸出最小值a[index]和下標indexYN【例6.7】輸入n個數(shù)(n<10),輸出最小值和它所對應(yīng)的下標。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個數(shù)(n<10),輸出最小值和它所對應(yīng)的下標。【例6.8】輸入n個數(shù)(n<10),將最小值與第一個數(shù)交換,然后再輸出整個數(shù)組。分析:用index記錄最小值的下標,a[index]就是最小值最小值與第一個數(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個數(shù)(n<10),將最小值與第一個數(shù)交換,然后再輸出整個數(shù)組。N-S流程圖:排序問題【例】用選擇法對數(shù)據(jù)進行排序?!纠坑妹芭莘▽?shù)據(jù)進行排序?!纠坑眠x擇法對n個數(shù)據(jù)進行排序。假設(shè)n=53528115283125831238512358a[0]a[1]a[2]a[3]a[4]【例】用選擇法對n個數(shù)據(jù)進行排序。選擇法排序過程:從n個數(shù)中找出最小的,將它與第一個數(shù)交換,結(jié)果最小的數(shù)被安置在第一個元素位置上;再從剩余的n-1個數(shù)中找出次小的數(shù),將它與第二個數(shù)交換;重復上述過程,共經(jīng)過n-1趟排序后,排序結(jié)束?!纠坑眠x擇法對n個數(shù)據(jù)進行排序。分析:5個數(shù)a[0]~a[4]中找最小數(shù),與a[0]交換4個數(shù)a[1]~a[4]中找最小數(shù),與a[1]交換3個數(shù)

a[2]~a[4]中找最小數(shù),與a[2]交換2個數(shù)

a[3]~a[4]中找最小數(shù),與a[3]交換【例】用選擇法對n個數(shù)據(jù)進行排序。對于n個數(shù):n個數(shù)

a[0]~a[n-1]中找最小數(shù),與a[0]交換n-1個數(shù)

a[1]~a[n-1]中找最小數(shù),與a[1]交換…2個數(shù)

a[n-2]~a[n-1]中找最小數(shù),與a[n-2]交換總結(jié):a[k]~a[n-1]中找最小值,與a[k]交換(k的范圍:0~n-2)【例】用選擇法對n個數(shù)據(jù)進行排序。N-S流程圖表示:輸入數(shù)組aindex=kfori=k+1ton-1a[i]<a[index]index=ia[index]<==>a[k]YNfork=0ton-2輸出數(shù)組a【例】用選擇法對n個數(shù)據(jù)進行排序。

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]);運行情況:5↙35281↙12358【例】用冒泡法對n個數(shù)據(jù)進行排序。設(shè)n=6第一趟比較經(jīng)過第一趟(共5次比較與交換)后,最大數(shù)9“沉底”?!纠坑妹芭莘▽個數(shù)據(jù)進行排序。第二趟比較如果有n個數(shù),則要進行n-1趟比較。在第1趟比較中要進行n-1次兩兩比較,在第j趟比較中要進行n-j次兩兩比較?!纠坑妹芭莘▽個數(shù)據(jù)進行排序。冒泡法排序過程:第一趟冒泡排序比較第一個數(shù)與第二個數(shù),若為逆序a[0]>a[1],則交換;然后依次兩兩比較,結(jié)果最大的數(shù)被安置在最后一個元素位置上;第二趟冒泡排序?qū)η皀-1個數(shù)進行,結(jié)果使次大的數(shù)被安置在第n-1個元素位置;重復上述過程,共經(jīng)過n-1趟冒泡排序后,排序結(jié)束。【例】用冒泡法對n個數(shù)據(jù)進行排序??偨Y(jié):對于6個數(shù),共進行5趟比較過程。第1趟排序(a[0]-a[5]):進行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次兩兩比較【例】用冒泡法對n個數(shù)據(jù)進行排序。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趟比較【例】用冒泡法對n個數(shù)據(jù)進行排序。

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ù)組名[常量表達式][常量表達式];行數(shù)列數(shù)6.2.1二維數(shù)組的定義錯誤的數(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; /*下標越界*/數(shù)組名[行下標][列下標]行下標的取值范圍:[0,行長度-1]列下標的取值范圍:[0,列長度-1]說明:我們可以把二維數(shù)組看作是一種特殊的一維數(shù)組:它的元素又是一個一維數(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種方法對二維數(shù)組初始化:分行給二維數(shù)組賦初值。例如:

inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};1234567891011126.2.3二維數(shù)組的初始化將所有數(shù)據(jù)寫在一個花括號內(nèi),按數(shù)組排列的順序?qū)Ω髟刭x初值。例如:inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};1234567891011126.2.3二維數(shù)組的初始化只對部分元素賦初值。例如: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ù)組的初始化如果對全部元素都賦初值,則定義數(shù)組時,對第一維的長度可以不指定。例如:inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};等價于: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++

) //行標

for(j=0;j<2;j++

) //列標

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++) //列標

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

) //行標

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);行下標和列下標分別做為循環(huán)變量;外層對行進行循環(huán),內(nèi)層對列進行循環(huán)6.2.5

二維數(shù)組程序舉例【例6.12】將二維數(shù)組a行列元素互換,存到另一個數(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】有一個3×4的矩陣,要求編程序求出其中值最大的那個元素的值,以及其所在的行號和列號。分析:row:記錄值最大的那個元素的行下標colum:記錄值最大的那個元素的列下標max:最大的那個元素,即a[row][colum]【例6.13】有一個3×4的矩陣,要求編程序求出其中值最大的那個元素的值,以及其所在的行號和列號。N-S流程圖表示算法如下:【例6.13】有一個3×4的矩陣,要求編程序求出其中值最大的那個元素的值,以及其所在的行號和列號。

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】有一個3×4的矩陣,要求編程序求出其中值最大的那個元素的值,以及其所在的行號和列號。

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個學生,已知每個學生有5門課的成績,要求輸出平均成績最高的學生的成績,以及該學生的序號。分析:采用5*6的二維數(shù)組:科目學生語文數(shù)學物理化學英語平均成績張三7882937465李四9182727667李敏10090857298王超6789906578王瑩7788994589【例6.14】有5個學生,已知每個學生有5門課的成績,要求輸出平均成績最高的學生的成績,以及該學生的序號。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}};科目學生語文數(shù)學物理化學英語平均成績張三7882937465李四9182727667李敏10090857298王超6789906578王瑩7788994589

for(i=0;i<5;i++) //求學生的平均成績

{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;}科目學生語文數(shù)學物理化學英語平均成績張三7882937465李四9182727667李敏10090857298王超6789906578王瑩77889945896.3字符數(shù)組6.3.1字符數(shù)組的定義6.3.2字符數(shù)組的初始化6.3.3字符串和字符串結(jié)束標志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ù)組名[常量表達式];例如:

charc[10];//包含10個字符的數(shù)組6.3.2字符數(shù)組的初始化用字符常量賦初值可逐個字符賦給數(shù)組中各元素。例如:charc[10]={'I','','a','m','','h','a','p','p','y'};說明:如果在定義字符數(shù)組時不進行初始化,數(shù)組元素的值為隨機數(shù)。如果初值個數(shù)>數(shù)組長度,則語法錯誤;如果初值個數(shù)<數(shù)組長度,則只將這些字符賦給數(shù)組中前面那些元素,其余元素自動定為空字符例如:charc[10]={'c','','p','r','o','g','r','a','m'};說明:如果提供的初值個數(shù)與預定的數(shù)組長度相同,在定義時可以省略數(shù)組長度,系統(tǒng)會自動根據(jù)初值個數(shù)確定數(shù)組長度。例如:charc[]={'I','','a','m','','h','a','p','p','y',};6.3.2字符數(shù)組的初始化用字符串常量賦初值例如:charc[]={"Iamhappy"};charc[]="Iamhappy";等價于charc[]={'I','','a','m','','h','a','p','p','y','\0'};說明:字符串常量包含一個字符串結(jié)束符'\0'6.3.3字符串和字符串結(jié)束標志字符串常量的存儲和運算用一維字符數(shù)組實現(xiàn)。字符串特殊的一維字符數(shù)組。c語言規(guī)定:一個字符串以字符'\0'作為字符串結(jié)束標志。例如:charc[]="Happy";Happy\0說明:字符數(shù)組并不要求最后一個字符為'\0'在程序中往往依靠檢測‘\0’的位置來判定字符串是否結(jié)束?!纠?.15】計算字符串的有效長度,并輸出該字符串。字符串的有效長度:有效字符的個數(shù)。即:數(shù)組中第一個'\0'前面的字符個數(shù)。Happy\0???s[0]s[1]s[2]s[3]s[4]s[5]s[6]s[7]s[8]……【例6.15】計算字符串的有效長度,并輸出該字符串。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]); //計算有效長度//for(i=0;i<len;i++)6.3.4字符數(shù)組的輸入/輸出字符數(shù)組的輸入/輸出有兩種方法:單個字符輸入/輸出使用格式控制符“%c”字符串的輸入/輸出格式控制符“%s”1、單個字符輸入/輸出【例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ù)中的輸出項是字符數(shù)組名,而不是數(shù)組元素名。把第一個“\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

說明:輸入時,遇空格鍵或回車鍵時結(jié)束輸入。系統(tǒng)自動在字符串末尾添加'\0'結(jié)束符。beijing\0【例6.18】輸入一個以問號結(jié)束的字符串(少于80個字符),統(tǒng)計其中數(shù)字字符的個數(shù)。分析:數(shù)組長度取上限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);運行結(jié)果:It's512?count=3【例6.18】輸入一個以問號結(jié)束的字符串(少于80個字符),統(tǒng)計其中數(shù)字字符的個數(shù)。說明:如果輸入的字符串中有空格,只將空格以前的部分讀入數(shù)組。

chara[15];

scanf("%s",a);

printf("%s\n",a);輸入:Howareyou?

how說明:如果利用一個scanf函數(shù)輸入多個字符串,則以空格分隔。chara[5],b[5],c[5];scanf("%s%s%s",a,b,c);輸入:Howareyou?

說明:使用字符數(shù)組名,而不是數(shù)組元素名。輸入串長度<數(shù)組長度不要加地址運算符“&”。

如:scanf("%s",a);6.3.5字符串處理函數(shù)puts函數(shù)gets函數(shù)字符串連接函數(shù)strcat()字符串拷貝函數(shù)strcpy()字符串比較函數(shù)strcmp()計算字符串長度的函數(shù)strlen()1.puts函數(shù)功能:輸出字符串輸出字符串后自動換行可以包含轉(zhuǎn)義字符一般形式:puts(字符數(shù)組)例如:charstr[]={"China\nBeijing"};puts(str);運行結(jié)果:ChinaBeijing2、gets函數(shù)功能:從鍵盤接收一個以回車結(jié)束的字符串放入字符數(shù)組,并自動加‘\0’輸入的字符串中可以包含空格。一般形式:gets(字符數(shù)組)例如:charstring[80];gets(string);puts(string);輸入:Howareyou?

Howareyou?說明:用puts和gets函數(shù)只能輸入/輸出一個字符串。不能寫成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復制到字符串str1中。說明:str1的長度應(yīng)大于str2的長度;拷貝時'\0'一同拷貝strcpy(str1,str2)4、字符串拷貝函數(shù)strcpy()例如:charstr1[]="student",str2[]="china";strcpy(str1,str2);str1student\0str1china\0t\0str2china\0說明:可以用strncpy函數(shù)將一個字符串中的前若干個字符復制到另一個字符串中。例如:charstr1[]="student",str2[]="china";strncpy(str1,str2,2);str1student\0str1chudent\0str2china\0說明:不能用賦值語句將一個字符串常量或字符數(shù)組直接給一個字符數(shù)組。例如:charstr1[20],str2[20];str1={“Hello!”}; //數(shù)組名代表地址str2=str1;【例6.19】分析下面程序的運行結(jié)果。#include<stdio.h>voidmain(){ charc1[10]="abcdefghi",c2[]="china";

strcpy(c1,c2); puts(c1);

printf("%c",c1[7]);}運行結(jié)果:chinah5、字符串比較函數(shù)strcmp()一般形式:作用:對兩個字符串從左向右逐個字符比較ASCII碼,直到遇到不同字符或遇到'\0'為止。

若str1

<str2,返回負整數(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)系運算符,必須用strcmp函數(shù)。如:if(strcmp(str1,str2)>0) if(str1>str2) 【例6.20】比較兩個字符串的大小。#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個字符串,要求找出其中最大者。

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、計算字符串長度的函數(shù)strlen()一般形式:作用:計算字符串長度(實際長度,不包括'\0'

)。strlen(str)【例6.22】寫出程序的運行結(jié)果。#include<string.h>#include<stdio.h>voidmain(){ charstr[20]={"hello\0abcd\0abc\0"};

printf("%d\n",strlen(str));}運行結(jié)果:56.3.6字符數(shù)組應(yīng)用舉例【例6.23】輸入一行字符,統(tǒng)計其中以空格分開的單詞的個數(shù)。分析:單詞的數(shù)目可以由空格出現(xiàn)的次數(shù)決定。連續(xù)的若

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論