計(jì)算機(jī)計(jì)算機(jī)二級C語言程序設(shè)計(jì)第 6講數(shù)組_第1頁
計(jì)算機(jī)計(jì)算機(jī)二級C語言程序設(shè)計(jì)第 6講數(shù)組_第2頁
計(jì)算機(jī)計(jì)算機(jī)二級C語言程序設(shè)計(jì)第 6講數(shù)組_第3頁
計(jì)算機(jī)計(jì)算機(jī)二級C語言程序設(shè)計(jì)第 6講數(shù)組_第4頁
計(jì)算機(jī)計(jì)算機(jī)二級C語言程序設(shè)計(jì)第 6講數(shù)組_第5頁
已閱讀5頁,還剩67頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第6講數(shù)組

為了解決比較復(fù)雜的問題,本章介紹C語言提供的一種最簡單的構(gòu)

造類型一一數(shù)組。

6.11維數(shù)組的定義和引用

6.22維數(shù)組的定義和引用

6.3字符數(shù)率與字符串

「Return]

6.11維數(shù)組的定義和引用

6.1.11維數(shù)組的定義

6.1.21維數(shù)組亓素的引用

6,1.31維數(shù)組亓素的初始化

6.1.41維數(shù)組巾用舉例

「Return]

6.1.11維數(shù)組的定義

數(shù)組同變量一樣,也必須先定義、后使用。

1維數(shù)組是只有1個下標(biāo)的數(shù)組,定義形式如下:

數(shù)據(jù)類型數(shù)組名[常量表達(dá)式]L數(shù)組名2[常量表達(dá)式2]……];

inta[10],b[6];

(1)“數(shù)據(jù)類型”是指數(shù)組元素的數(shù)據(jù)類型。

(2)數(shù)組名,與變量名一樣,必須遵循標(biāo)識符命名規(guī)則。

(3)“常量表達(dá)式”必須用方括號括起來,指的是數(shù)組的元素個數(shù)(又稱數(shù)

組長度),它是一個整型值,其中可以包含常數(shù)和符號常量,但不能包含變量。

注意:C語言中不允許動態(tài)定義數(shù)組。

特別說明:在數(shù)組定義時,“常量表

達(dá)式”外的方括號;以及元素引用時,“下

標(biāo)表達(dá)式”外的方括號,都是C語言語法規(guī)

則所要求的,不是本書所約定的可選項(xiàng)的描

述符號!

(4)數(shù)組元素的下標(biāo),是元素相對于

數(shù)組起始地址的偏移量,所以從0開始順序

編號。

(5)數(shù)組名中存放的是一個地址常量,

它代表整個數(shù)組的首地址。同一數(shù)組中的所

有元素,按其下標(biāo)的順序占用一段連續(xù)的存

儲單元。

a[i]

1016

[Return]a[5]

1090

6.1.2數(shù)組元素的引用

引用數(shù)組中的任意一個元素的形式:

數(shù)組名[下標(biāo)表達(dá)式]

1.“下標(biāo)表達(dá)式”可以是任何非負(fù)整型數(shù)據(jù),取值范圍是0~(元素

個數(shù)T)o

特別強(qiáng)調(diào):在運(yùn)行C語言程序過程中,系統(tǒng)并不自動檢驗(yàn)數(shù)組元素的

下標(biāo)是否越界。因此在編寫程序時,保證數(shù)組下標(biāo)不越界是十分重要的。

2.1個數(shù)組元素,實(shí)質(zhì)上就是1個變量,它具有和相同類型單個變量

一樣的屬性,可以對它進(jìn)行賦值和參與各種運(yùn)算。

3.在C語言中,數(shù)組作為1個整體,不能參加數(shù)據(jù)運(yùn)算,只能對單

個的元素進(jìn)行處理。

示例:數(shù)組元素的輸入、輸出

[Return]

6.1.31維數(shù)組元素的初始化

初始化格式:

數(shù)據(jù)類型數(shù)組名[常量表達(dá)式]={初值表};

inta[10]={0,1,2,3,4,5,6,7,8,9);inta[10]-{0,1,2,3,4};

inta[]={0,1,2,3,4,5,6,7,8,9);

(1)如果對數(shù)組的全部元素賦以初值,定義時可以不指定數(shù)組長度

(系統(tǒng)根據(jù)初值個數(shù)自動確定)。如果被定義數(shù)組的長度,與初值個數(shù)不同,

則數(shù)組長度不能省略。

(2)“初值表”中的初值個數(shù),可以少于元素個數(shù),即允許只給部分

元素賦初值。

(3)根據(jù)存儲類型的不同,數(shù)組有靜態(tài)數(shù)組(static)和動態(tài)數(shù)組

(auto)之分;根據(jù)定義的位置不同,數(shù)組有內(nèi)部數(shù)組(在函數(shù)內(nèi)部定義的

數(shù)組)和外部數(shù)組(在函數(shù)外部定義的數(shù)組)之分。

「Return]

6.1.31維數(shù)組元素的賦值

-與數(shù)組元素的初始化不同,在給數(shù)組元素賦值時,必須逐一賦值。

例如:對于下述的數(shù)組初始化:

?inti[3]={1,2,3);

等價(jià)inti[3];

i[3]={1,2,3);

inti[3]

i[0]=1

i[1]=2思考:如何從鍵盤給數(shù)組賦值,如何輸出?

i⑵二3

循環(huán)

求數(shù)組元素的最大值

a[0]a[l]a[2]a[3]a[4]

1229964517

ki卜kk

max=a[0]=12max=a[1]=29nlax-a[2]-96

示例1(max.c):求數(shù)組元素的最大值

#include<stdio.h>

main()

inti,a[10],max;

for(i=0;i<10;i++)

scanf(〃%d〃,&a[i]);

max=a[0];

for(i=l;i<10;i++)

(

if(a[i]>max)max=a[i];

)

printf(z,%d,z,max);

逆置數(shù)組元素中的值a[n]

a[0]a[l]a[2]a[3]a[4]

1229964517

AA

a[0]all]a|2]a|3]a[4]

1745962912

*

1n/2n-l-i

示例2(jiaohuan.c):交換數(shù)組元素,使第一個和最后一個交換,第二個和

倒數(shù)第二個交換,依次類推。如數(shù)組為1,2,3,4,5,6,7,8,9,10,交換后為

10,9,8,7,6,5,4,3,2,1(或者稱為:逆置數(shù)組元素中的值)

#include<stdio.h>

main()

(

inti,a[10],t;

for(i=0;i<10;i++)

scanf(〃%d〃,&a[i]);

for(i=0;i<10/2;i++)

(

t=a[i];a[i]=a[10-l-i];a[10-l-i]=t;

)

for(i=0;i<10;i++)

printf(z/%d〃,a[i]);

把數(shù)組aa中的偶數(shù)元素按原來的先后順序放在原數(shù)組后面

示例3(exp3.c):請補(bǔ)充函數(shù)fun,該函數(shù)的功能是:把數(shù)組aa中的偶數(shù)元素按

原來的先后順序放在原數(shù)組后面。例如,輸入“33,67,42,58,25,76,85,

16,41,56”,輸出結(jié)果“33,67,25,85,41,42,58,76,16,56”。

ttinclude<stdio.h>

#defineN10

voidfun(intaa[])

{intI,j=0,k=0;

intbb[N];

for(1=0;KN;I++)

(

if(aa[I]%2—0)bb[k++]=aa[I];

else

aa[j++]=aa[I];

)

for(1=0;Kk;I++,j++)aa[j]=bb[I];

)

voidmain()

{inti,aa[N]={33,67,42,58,25,76,85,16,41,56};

fun(aa);

for(i=0;i<N;i++)printf(,,%4d,z,aa[i]);

實(shí)參形參

元瓢i始整翼起始

地址

aa[O]

1000

aa[l]

1002

aa[2]

1004

aa[3]

1006

aa[i

10081008

aa[5]aa[5]

1mn

2007年4月

1、以下程序中函數(shù)f的功能是:當(dāng)flag為1時,進(jìn)行由小到大排序;當(dāng)flag

為0時,進(jìn)行由大到小排序。

voidf(intb[],intn,intflag)

{inti,j,t;

for(i=0;i<n-l;i++)

for(j=i+l;j<n;j++)

if(flag?b[i]>b[j]:b[i]<b[j]){t=b[i];b[i]=b[j];

b[j]=t;}

)

main()

{inta[10]={5,4,3,2,1,6,7,8,9,10},i;

f(&a[2],5,0);f(a,5,1);

for(i=0;i<10;i++)printf(“%d,",a[i]);

)

程序運(yùn)行后的輸出結(jié)果是(B)

A)1,2,3,4,5,6,7,8,9,10,

B)3,4,5,6,7,2,1,8,9,10,

C)5,4,3,2,1,6,7,8,9,10,

D)10,9,8,7,6,5,4,3,2,1,

2007年4月

2、有以下程序

voidf(intb[])

{inti;

for(i=2;i<6;i++)b[i]*=2;

)

main()

{inta[10]-{l,2,3,4,5,6,7,8,9,10},i;

f(a);

for(i=0;i<10;i++)printf(“%d,”,a[i]);

)

程序運(yùn)行后的輸出結(jié)果是(B)

A)1,2,3,4,5,6,7,8,9,10,

B)1,2,6,8,10,12,7,8,9,10

C)1,2,3,4,10,12,14,16,9,10,

D)1,2,6,8,10,12,14,16,9,10,

2007年4月

3、以下程序的功能是:求出數(shù)組x中各相鄰兩個元素的和依次存放到a數(shù)組

中,然后輸出。請?zhí)羁铡?/p>

main()

{intx[10],a[9],I;

for(i=0;i<10;i++)

scanf(“%d”,&x[i]);

for(____;i<10;i++)i=]

a[i-l]=x[i]+________;「.[

xLi-U

for(i=0;i<9;i++)

printf(“%d",a[i]);

printf(“\n”);

2007年9月

1、以下程序中函數(shù)f的功能是在數(shù)組x的n個數(shù)(假定n個數(shù)互不相同)中找出最大最

小數(shù),將其中最小的數(shù)與第一個數(shù)對換,把最大的數(shù)與最后一個數(shù)對換.請?zhí)羁?

#include<stdio.h>

voidf(intx[],intn)

{intpO,pl,i,j,t,m;

i=j=x[0];p0=pl=0;

for(m=0;m<n;m++)

{if(x[m]>i){i=x[m];p0=m;}

elseif(x[m]<j){j=x[m];pl=m;}

}

t=x[pO];x[p0]=x[n-l];x[nT]=t;

t=x[pl];x[pl]=;=t;x[0]

X[0]

main()

{inta[10],u;

for(u=0;u<10;u++)scanf(〃%d〃,&a[u]);

f(a,10);

for(u=0;u<10;u++)printf(〃%d〃,a[u]);

2007年9月

2、以下程序統(tǒng)計(jì)從終端輸入的字符中大寫字母的個數(shù),num[0]中統(tǒng)計(jì)字母A

的個數(shù),num[l]中統(tǒng)計(jì)字母B的個數(shù),其它依次類推.用#號結(jié)束輸入,請?zhí)?/p>

工?

#include<stdio.h>

#include<ctype.h>

main()

{intnum[26]={0},i;charc;

while(()!='#')

if(isupper(c))num[c-,A']+=

for(i=0;i<26;i++)

c=getchar()

printf(〃%c:%d\n〃,i+'A',num[i]);

1

2007年9月

3、執(zhí)行以下程序的輸出結(jié)果是

#include<stdio.h>

main()

{inti,n[4]={l}

for(i=l;i<=3;i++)

{n[i]=n[i-l]*2+l;

printf(“%d",n[i]);

3715

2008年4月

1、執(zhí)行以下程序的輸出結(jié)果是:

#include<stdio.h>

main()

{ints[12]={l,2,3,4,4,3,2,1,1,1,2,3},c[5]={0},i;

for(i=0;i<12;i++)c[s[i]]++;

for(i=l;i<5;i++)printf(“%d”,c[i]);

printf(“\n”);

)

4332

2008年9月

1、若有定義語句:intm□二{5,4,3,2,1},i=4;,則下面對m數(shù)組元素的引用

錯誤的是

A)m[--i]B)m[2*2]C)m[m[0]]D)m[m[i]]

2009年3月

1、有以下程序,程序執(zhí)行后,輸出結(jié)果是[7777654321

#include<stdio.h>

voidfun(int*a)

{a[0]=a[l];}

main()

{inta[10]={10,9,8,7,6,5,4,3,2,1},i;

for(i=2;i>=0;i--)fun(&a[i]);

for(i=0;i<10;i++)printf(〃%d〃,a[i]);

printf(〃\n〃);

2009年9月

1、有以下程序

^include<stdio.h>

main()

{inta[]={2,3,5,4},i;

for(i=0;i<4;i++)

switch(i%2)

{case0:

switch(a[i]%2)

{case0:a[i]++;break;

case1:a[i]一;

}break;

case1:a[i]=0;

)

for(i=0;i<4;i++)printf(z,%d〃,a[i]);

printf(〃\n〃);

}

程序運(yùn)行后的輸出結(jié)果是

A)3344B)2050C)3040D)0

304

題盤

計(jì)算:10-3、40-2.69-3、70-3(答案不好)、95-2

滿足條件的數(shù)組元素存入數(shù)組:4-1、35-2、49-2、52-1(類似4-1)、71-2、77-1.

91-3

100-3

滿足條件的數(shù)據(jù)存入數(shù)組:14-2、69-2.827、83-3(素?cái)?shù))、93-3(素?cái)?shù))

改變數(shù)組元素位置:6-1、11-1、16-1(數(shù)組元素逆置)、38-3(指定元素平移到最后)

、42-3(刪除數(shù)組中相同的數(shù),只剩一個)、49-1、61-2(算法不對)、66-2、79-

1、

80-1(類似79-1)

排序:28-2(選擇法)、46-2(選擇法)

其它:73-1(素?cái)?shù)新方法)、84-2(進(jìn)制轉(zhuǎn)換)

6.22維數(shù)組的定義和引用

6.2.12維數(shù)組的定義

6.2.22維數(shù)組亓素的引用

6.2.32維數(shù)組亓素的初始化

6.2.42維數(shù)犯應(yīng)用舉例

[Return]

6.2.12維數(shù)組的定義

[案例6.3]給一個2火3的2維數(shù)組各元素賦值,并輸出全部元素的值。

/*案例代碼文件名:AL6_3.C*/

/*功能:從鍵盤上給2文3數(shù)組賦值,并在屏幕上顯示出來。*/

#defineRow2

#defineCol3

ttinclude〃stdio.h〃

main()

{inti,j,array[Row][Col];/*定義1個2行3列的2維數(shù)組

array*/

for(i=0;i<Row;i++)/*外循環(huán):控制2維數(shù)組的行*/

for(j=0;j<Col;j++)/*內(nèi)循環(huán):控制2維數(shù)組的列*/

scanf(,,%d,/,&array[i][j])/*從鍵盤輸入的值*/

printf(〃\n〃);

/*輸出2維數(shù)組array*/

for(i=0;i<Row;i++)

{for(j=0;j<Col;j++)

printf(〃%d\t〃,array[i][j]);/*將a[i][j]的值顯示在

屏幕上*/

printf(〃\n〃);

2維數(shù)組的定義方式如下:

數(shù)據(jù)類型數(shù)組名[行常量表達(dá)式][列常量表達(dá)式]L數(shù)組名2[行

常量表達(dá)式2][列常量表達(dá)式2]……];

1.數(shù)組元素在內(nèi)存中的排列順序?yàn)椤鞍葱写娣拧?,即先順序存放第一?/p>

的元素,再存放第二行,以此類推。

2.設(shè)有一個m*n的數(shù)組x,則第i行第j列的元素在數(shù)組中的位置

為:i*n+j(注意:行號、列號均從0開始計(jì)數(shù))o

inta[3][4],b[3][3];

a[0][0]a[0][l]a[0][2]a[0][3]

a[2][0]a[2][l]a[2][2]a[2][3]

3.可以把2維數(shù)組看作是一種特殊的1維數(shù)組:它的元素又是一個1維

數(shù)組。

例如,對a[3][4],可以把a(bǔ)看作是一個1維數(shù)組,它有3個元素:a[0]、

a[l]、a[2],每個元素又是一個包含4個元素的1維數(shù)組,如圖所示。即把

a[0]、a[l],a[2]看作是3個1維數(shù)組的名字。

inta[3][4];

a[0]a[0][0]a[0][l]a[0][2]a[0][3]

a[l]a[l][0]a⑴⑵

a[2]a[2][0]a⑵⑴a[2][2]a[2][3]

「Return]

6.2.22維數(shù)組元素的引用

引用2維數(shù)組元素的形式為:

數(shù)組名[行下標(biāo)表達(dá)式][列下標(biāo)表達(dá)式]

1.“行下標(biāo)表達(dá)式”和“列下標(biāo)表達(dá)式“,都應(yīng)是整型表達(dá)式或符號

常量。

2.“行下標(biāo)表達(dá)式”和“列下標(biāo)表達(dá)式”的值,都應(yīng)在已定義數(shù)組大

小的范圍內(nèi)。假設(shè)有數(shù)組a[3][4],則可用的行下標(biāo)范圍為0?2,列下標(biāo)范圍

為0~3。

3.對基本數(shù)據(jù)類型的變量所能進(jìn)行的操作,也都適合于相同數(shù)據(jù)類型

的2維數(shù)組元素。

「Return]

6.2.32維數(shù)組元素的初始化

1.按行賦初值

數(shù)據(jù)類型數(shù)組名[行常量表達(dá)式][列常量表達(dá)式]={{第0行初值表},{第1行

初值表},……,{最后1行初值表}};

inta[3][4]={{1}2,3,4},{5,6,7,8},{9,10,11,12}};int

a[3][4]={{1},{0,3},⑻};

inta[][4]={{1,2,3,4},{5}6,7,8},{9,10,11,12}};

賦值規(guī)則:將“第0行初值表”中的數(shù)據(jù),依次賦給第0行中各元素;將“第1行

初值表”中的數(shù)據(jù),依次賦給第1行各元素;以此類推。

2.按2維數(shù)組在內(nèi)存中的排列順序給各元素賦初值

數(shù)據(jù)類型數(shù)組名[行常量表達(dá)式][列常量表達(dá)式]={初值表};

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);

賦值規(guī)則:按2維數(shù)組在內(nèi)存中的排列順序,將初值表中的數(shù)據(jù),依次賦給各元

素。

如果對全部元素都賦初值,則“行數(shù)”可以省略。注意:只能省略行數(shù)。

「Return]

例1求二維數(shù)組中最大元素及其下標(biāo)(程序)

main廠-----定義二維數(shù)組a并初始化

{inta[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}},

i,j;

./*max(最大值),row(行下標(biāo))和colun(列下標(biāo))*/

mtmax,row,cloum;

max=a[0][0];/*假定a[0][0]為最大值

row=0;colum=0;1*記下a[0][0]的行和列下標(biāo)

________________*Z________

for(i=0;i<3;i++)/*記下新的最大值和下標(biāo)*/

for(j=0;j<4;j++)

if(max<a[i][j])

maxa[i][j]row=i

colum二j;

printf(,,max=%d,row=%d,colum=%d\n〃,max,i,row,colum);

矩陣a[N][N]

?矩陣元素

?周邊元素:i=01|i=N-l||j=01|j=N-l

?主對角線:i=j

?反對角線:i=NT-j

?左下半三角:j〈二i

?右上半三角:j〉二i

?矩陣轉(zhuǎn)置:右上半三角與左下半三角行列互換

2007年4月

1、有以下程序

main()

{inta[4][4]={{1,4,3,2,},{8,6,5,7,},{3,7,2,5,},{4,8,6,1,}},i,j,k,t;

for(i=0;i<4;i++)

for(j=0;j<3;j++)

for(k=j+1;k<4;k++)

if(a[j][i]>a[k][i]){t=a[j][i];a[j][i]=a[k][i];a[k]

按列排序*/

for(i=0;i<4;i++)printf(“%d,",a[i][i]);

程序運(yùn)行后的輸出結(jié)果是(A)

A)1,6,5,7,B)8,7,3,1,

C)4,7,5,2,D)l,6,2,1,

2007年4月

2、有以下程序

main()

{inta[4][4]={{1}4,3,2,},{8,6,5,7,},{3,7,2,5,},{4,8,6,1,}},i,k,t;

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

for(k=i+l;k<4;k++)

if(a[i][i]<a[k][k]){t=a[i][i];a[i][i]=a[k][k];a[k][k]=t;}

for(i=0;i<4;i++)printf("%d,”,a[0][i]);

}

程序運(yùn)行后的輸出結(jié)果是(B)

A)6,2,1,1,B)6,4,3,2,

C)l,1,2,6,D)2,3,4,6,

2007年9月

1、若有定義語句:inta[3][6];,按在內(nèi)存中的存放順序,a數(shù)組的第10個元素

是:

A)a[0][4]B)a[l][3]0a[0][3]D)a[l][4]

2008年4月

1、以下錯誤的定義語句是:

A)intx[][3]={{0},{1},{1,2,3});

B)intx[4][3]={{1,2,3},{1,2,3},{1}2,3},{1}2,3}};

C)intX[4][]={{1,2,3},{1,2,3],{1,2,3},{1,2,3});

D)intx[][3]={1,2,3,4);

2、若有定義語句:inta[2][3];,以下選項(xiàng)中對a數(shù)組元素正確引用的是:

A)a[2][!1]B)a[2][3]C)a[0][3]D)a[l>2][!1]

2008年9月

12.以下程序按下面指定的數(shù)據(jù)給x數(shù)組的下三角置數(shù),并按如下形式輸出,

清填空

4

37

269

15810

#include<stdio.h>

main()

{intx[4][4]={0},n=0,i,j;

for(j=0;j<4;j++)i-

for(i=3;i>=j;L12J){n++;x[i][j]=[131;}n

for(i=0;i<4;i++)

{for(j=0;j〈=i;j++)printf(〃%5d〃,x[i][j]);

printf(〃\n〃);

題盤

主對角線及反向?qū)蔷€元素:43-1、82-2.51-2、25-1

左下半三角及右上半三角元素:58-3、59-3(類似58-3)、78-3

最大最小值:「3、91-1

周邊元素:21-1(外圍元素順時針旋轉(zhuǎn))、79-3、80-3(類似79-3)

矩陣轉(zhuǎn)置及矩陣加法:82-3、33-3

列循環(huán)右移:48-1、18-K90-1

其它:60—3、85-1(判斷幻方)

6.3字符數(shù)組與字符串

6.3.1字符數(shù)組的逐個字符操作

6.3.2字符數(shù)組的整體操作

6.3.3常用的字符串處理?函數(shù)

「Return]

6.3.1字符數(shù)組的逐個字符操作

[案例6.5]從鍵盤輸入一個字符串,并將字符串在屏幕上輸出。

/*案例代碼文件名:AL6_5.C*/

#include<stdio.h>

main()

{inti;

charstr[10];

for(i=0;i<10;i++)

str[i]=getchar();

printf(〃\n〃);

for(i=0;i<10;i++)

printf(〃%c〃,str[i]);/*逐次輸出字符數(shù)組的各個元素*/

printf(〃\n〃);

6.3.1字符數(shù)組的逐個字符操作

1.字符數(shù)組的定義

1維字符數(shù)組,用于存儲和處理1個字符串,其定義格式與1維數(shù)值數(shù)組一樣。

2維字符數(shù)組,用于同時存儲和處理多個字符串,其定義格式與2維數(shù)值數(shù)組

一樣。

charc[5];

c[O]='h';c[l]='e';c\2\-r;c[3]=,T;c[4]='o';

2.字符婁本組的初始他?_r-------

字符數(shù)組H題始化工也通也為每個數(shù)阻元素指定初值字符來實(shí)現(xiàn)。

charc[5]={'h','e','1',T',';

charc[5]={'h','e','1'};

charc[]={'h','e','1','1',';

3.字符數(shù)組的引用

字符數(shù)組的逐個字符引用,與引用數(shù)唐數(shù)批先素要似。\。、0

(1)字符數(shù)組的輸入

除了可以通過初始化使字符數(shù)組各元素得到初值外,也可以使用

getchar()或scanf()函數(shù)輸入字符。

例如:

charstr[10];

for(i=0;i<10;i++)

{scanf(〃%c〃,&str[i]);

(2)字符數(shù)組的輸出

字符數(shù)組的輸出,可以用putchar()或printf()函數(shù)。

例如:

charstr[10]=,/clanguage”;

for(i=0;i<10;i++)printf(〃%c〃,str[i]);

printf(〃\n〃);

注意:逐個字符輸入、輸出時,要指出元素的下標(biāo),而且使用“%c”

格式符。另外,從鍵盤上輸入字符時,無需輸入字符的定界符—單引號;

輸出時,系統(tǒng)也不輸出字符的定界符。

[Return]

6.3.2字符數(shù)組的整體操作

1.字符串及其結(jié)束標(biāo)志

所謂字符串,是指若干有效字符的序列。C語言中的字符串,可以包括字母、

數(shù)字、專用字符、轉(zhuǎn)義字符等。

c語言規(guī)定:以'0'作為字符串結(jié)束標(biāo)志('\0’代表ASC■碼為0的字符,

表示一個“空操作”,只起一個標(biāo)志作用)。因此可以對字符數(shù)組采用另一種方式

進(jìn)行操作了—字符數(shù)組的整體操作。

注意:由于系統(tǒng)在存儲字符串常量時,會在串尾自動加上1個結(jié)束標(biāo)志‘\0’,

所以無需人為地再加1個。

另外,由于結(jié)束標(biāo)志也要在字符數(shù)組中占用一個元素的存儲空間,因此在說明

字符數(shù)組長度時,至少為字符串所需長度加1。

2.字符數(shù)組的整體初始化

字符串設(shè)置了結(jié)束標(biāo)志以后,對字符數(shù)組的初始化,就可以用字符串常量

來初始化字符數(shù)組。

charc[]={〃iamhappy"};sizeof(c)=11

strlen(c)=10

charc[20]二{〃iamhappy"};sizeof(c)=20

strlen(c)=10

3.字符數(shù)組的整體引用

(1)字符串的輸入

除了可以通過初始化使字符數(shù)組各元素得到初值外,也可以使用scanf()函

數(shù)輸入字符串。

(2)字符串的輸出

printfO函數(shù),不僅可以逐個輸出字符數(shù)組元素,還可以整體輸出存放在

字符數(shù)組中的字符串。

main()

{chara[30],i;scanf(〃%s〃,a);printf(,,%s\n/,,a);)

「Return]

6.3.3常用的字符串處理函數(shù)

字符串標(biāo)準(zhǔn)函數(shù)的原型在頭文件string,h中。

1.輸入字符串--gets。函數(shù)

(1)調(diào)用方式:gets(字符數(shù)組)

(2)函數(shù)功能:從標(biāo)準(zhǔn)輸入設(shè)備(stdin)——鍵盤上,讀取1個字符串(可

以包含空格),并揩其存儲到字符數(shù)組中去。

(3)使用說明

1)gets。讀取的字符串,其長度沒有限制,編程者要保證字符數(shù)組有足夠

大的空間,存放輸入的字符串。

2)該函數(shù)輸入的字符串中允許包含空格,而scanf()函數(shù)不允許。

2.輸出字符串一一puts。函數(shù)

(1)調(diào)用方式:puts(字符數(shù)組)

(2)函數(shù)功能:把字符數(shù)組中所存放的字符串,輸出到標(biāo)準(zhǔn)輸出設(shè)備中

去,并用'\n,取代字符串的結(jié)束標(biāo)志,\0'。所以用puts。函數(shù)輸出字符串時,

不要求另加換行符。

(3)使用說明

1)字符串中允許包含轉(zhuǎn)義字符,輸出時產(chǎn)生一個控制操作。

2)該函數(shù)一次只能輸出一個字符串,而printf()函數(shù)也能用來輸出字符串,

且一次能輸出多個。

3.字符串比較——strcmpO函數(shù)

(1)調(diào)用方式:strcmp(字符串1,字符串2)

其中“字符串”可以是串常量,也可以是1維字符數(shù)組。

(2)函數(shù)功能:比較兩個字符串的大小。

如果:字符串1二字符串2,函數(shù)返回值等于0;

字符串字符串2,函數(shù)返回值負(fù)整數(shù);

字符串1》字符串2,函數(shù)返回值正整數(shù)。

(3)使用說明

1)如果一個字符串是另一個字符串從頭開始的子串,則母串為大。

2)不能使用關(guān)系運(yùn)算符“==”來比較兩個字符串,只能用strcmp。函

數(shù)來處理。

4.拷貝字符串——strcpy()函數(shù)

(1)調(diào)用方式:strcpy(字符數(shù)組,字符串)

其中“字符串”可以是串常量,也可以是字符數(shù)組。

(2)函數(shù)功能:將“字符串”完整地復(fù)制到“字符數(shù)組”中,字符數(shù)組

中原有內(nèi)容被覆蓋。

(3)使用說明

1)字符數(shù)組必須定義得足夠大,以便容納復(fù)制過來的字符串。復(fù)制時,

連同結(jié)束標(biāo)志'\0'一起復(fù)制。

2)不能用賦值運(yùn)算符“=”將一個字符串直接賦值給一個字符數(shù)組,只

能用strcpy()函數(shù)來處理。

5.連接字符串——strcat()函數(shù)

(1)調(diào)用方式:strcat(字符數(shù)組,字符串)

(2)函數(shù)功能:把“字符串”連接到“字符數(shù)組”中的字符串尾端,并

存儲于“字符數(shù)組”中?!白址麛?shù)組”中原來的結(jié)束標(biāo)志,被“字符串”的第

一個字符覆蓋,而“字符串”在操作中未被修改。

(3)使用說明

1)由于沒有邊界檢查,編程者要注意保證“字符數(shù)組”定義得足夠大,

以便容納連接后的目標(biāo)字符串;否則,會因長度不夠而產(chǎn)生問題。

2)連接前兩個字符串都有結(jié)束標(biāo)志'\0',連接后“字符數(shù)組”中存儲

的字符串的結(jié)束標(biāo)志'\0'被舍棄,只在目標(biāo)串的最后保留一個‘\0'。

6.求字符串長度--strlen()函數(shù)(len是length的縮寫)

(1)調(diào)用方式:strlen(字符串)

(2)函數(shù)功能:求字符串(常量或字符數(shù)組)的實(shí)際長度(不包含

結(jié)束標(biāo)志)。

7.將字符串中大寫字母轉(zhuǎn)換成小寫——strlwr()函數(shù)

(1)調(diào)用方式:strlwr(字符串)

(2)函數(shù)功能:將字符串中的大寫字母轉(zhuǎn)換成小寫,其它字符(包

括小寫字母和非字母字符)不轉(zhuǎn)換。

8.將字符串中小寫字母轉(zhuǎn)換成大寫——strupr()函數(shù)

(1)調(diào)用方式:strupr(字符串)

(2)函數(shù)功能:將字符串中小寫字母轉(zhuǎn)換成大寫,其它字符(包括

大寫字母和非字母字符)不轉(zhuǎn)換。

舉例:strmax.c

FReturn]

2007年4月

1、有以下程序

#include<string.h>

main()

{charp[20]={匕','b'c'd'},q[]二“abc”,

r[]二"abcde”;

strcpy(p+strlen(q),r);strcat(p,q);

printf(“%d%d\n”,sizeof(p),strlen(p));

程序運(yùn)行后的輸出結(jié)果是()

A)209B)99

C)2011D)ll11

2007年4月

2、有以下程序

#include<string.h>

main()

{charp[20]={b'c'd'},q[]二“abc”,

r[]二"abcde”

strcat(p,r);strcpy(p+strlen(q),q);

printf(aoM\n",strlen(p));

程序運(yùn)行后的輸出結(jié)果是()

A)9B)6OilD)7

2007年4月

3、有以下程序

#include<string.h>

voidf(charp[][10],intn)/*字符串從小到大排序*/

{chart[10];inti,j;

for(i=0;i<n-l;i++)

for(j=i+l;j<n;j++)

if(strcmp(p[i],p[j])>0){strcpy(t,p[i]);strcpy(p[i],p[j]);

strcpy(p[j],t);}

)

main()

{charp[5][10]={“abc“,”aabdfg“,“abbd“,"dcdbe“,“cd“};

f(p,5);

printf(“%d\n",strlen(p[0]));

)

程序運(yùn)行后的輸出結(jié)果是()

A)2B)4C)6D)3

aabdfg

4、以下程序的輸出結(jié)果是

#include<string.h>

main()

{chara口二{‘\1','\2'\3'\4','\0'};

printf(“%d%d\n”,sizeof(a),strlen(a));

54

2007年9月

1、以下關(guān)于字符串的敘述中正確的是:

A)C語言中有字符串類型的常量和變量

B)兩個字符串中的字符個數(shù)相同時才能進(jìn)行字符串大小的比較

O可以用關(guān)系運(yùn)算符對字符串的大〃'進(jìn)行比較

D)空串一定比空格打頭的字符串小

2、有以下程序段

intj;floaty;charname[50];

scanf(〃%2d%f%s〃,&j,&y,name);

當(dāng)執(zhí)行上述程序段,從鍵盤上輸入555667777abe后,y的值為

A)55566.0B)566.0C)7777.0D)566777.0

2007年9月

3、當(dāng)用戶要求輸入的字符串中含有空格時,應(yīng)使用的輸入函數(shù)是

A)scanf()B)getchar()C)gets()D)getc()

4、有以下程序

#include<stdio.h>

#include<string.h>

voidfun(chars[][10],intn)

{chart;inti,j;

for(i=0;i<n-l;i++)

for(j=i+l;j<n;j++)

/*比較字符串的首字符大小,并交換字符串的首字符*/

if(s[i][0])>s[j][0]{t-s[i][0];s[i][O]=s[j][0];s[j][0]=t;}

)

main()

{charss[5][10]二{“bcc”,”bbcc“,“xy“,”aaaacc""aabcc”)

fun(ss,5);printf(“%s,%s\n”,ss[0],ss[4]);

程序運(yùn)行結(jié)果是

A)xy,aaaaccB)aaaacc,xyC)xcc,aabccD)acc,xabcc

2008年4月

1、有定義語句:chars[10];,若要從終端給s輸入5個字符,錯誤的輸入語句是:

A)gets(&s[0]);B)scanf(“%s”,s+1);

C)gets(s);D)scanf(a%sff,s[1]);

2008年9月

1、若有定義語句:chars[10]=〃1234567\0\0〃;,則strlen(s)的值是

A)7B)8C)9D)10

2009年3月

1、設(shè)有定義:chars[81];inti=0以下不能將一行(不超過80個字符)帶有空格

的字符串正確讀入的語句或語句組是

A)gets(s);

B)while((s[i++]=getchar())!='\n');s[i]='\0’;

C)scanf(〃%s〃,s);

D)do{scanf(〃%c〃,&s[i]);}while(s[i++]!='\n');s[i]='\0';

2009年9月

1、有以下程序

#include<stdio.h>

main()

{chars[]={〃012xy〃};inti,n=0;

for(i=0;s[i]!=0;i++)

if(s[i]a'&&s[i]<二'z')n++;

printf(〃%d\n〃,n);

}

程序運(yùn)行后的輸出結(jié)果是

A)0B)2C)3D)5

2009年9月

2、有以下程序

#include<stdio.h>

ttinclude<string.h>

main()

{chara[10]=〃abcd〃;

printf(,z%d,%d\n〃,strlen(a),sizeof(a));

)

程序運(yùn)行后的輸出結(jié)果是A)7,4B)4,1008,8D)10,10

3、下面是有關(guān)C語言字符數(shù)組的描述,其中錯誤的是

A)不可以用賦值語句給字符數(shù)組名賦字符串

B)可以用輸入語句把字符串整體輸入給字符數(shù)組

0字符數(shù)組中的內(nèi)容不一定是字符串

D)字符數(shù)組只能存放字符串

注:字符數(shù)組的內(nèi)容,既可以是

字符,也可以是字符串

2009年9月

4、有以下程序

#include<stdio.h>

main()

{chara[20]=,,Howareyou?”,b[20];

scanf(〃%s〃,b);printf(",%s%s\n〃,a,b);

)

程序運(yùn)行時從鍵盤輸入:Howareyou?〈回車〉

則輸出結(jié)果為【Howareyou?How

字符串逆置

voidfun(charts)

for(n=0;s[n]!='\0';n++);

inti,n;/

chart;/

n=strlen(s)/f

for(i=0;i<n;i++)

(for(i=0;i<n/2;i++)

t=s[i];

s[i]=s[n-l];t=s[i];

s[n-l]=t;s[i]=s[n-l-i];

s[n-l-i]=t;

n一

字符串連接

voidfun(charvoidfun(charpl[],charp2[])

pl[],charp2[])(

(inti,j;

inti=0,j=0;for(i=0;pl[i]!='O';i++);/*求出的i為pl

while(pl[i]!='\0')字符串的總長度,包括結(jié)束標(biāo)記位*/

(for(j=0;p2[j]!='\0';j++)

i++;pl[i++]=p2[j];/*)捋p2字符串連在pl字

)符串后面*/

while(p2[j]!=,\0')Pl[i]='\0';/*在字符串最后加上結(jié)束標(biāo)記符

(

pl[i++]=p2[j];

j++;

pl[i]='\0';

刪除字符串中的指定字符

刪除指定字符

voidfun(char*s,charch)

(

inti,j;

j二0;刪除指定字符及以后的所有字符

forwhile(str[i]!='\0')

(i=0;s[i]!='\0';i++)(

(if(str[i]~ch)

if(s[i]!=ch)break;

溫馨提示

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

最新文檔

評論

0/150

提交評論