![計(jì)算機(jī)計(jì)算機(jī)二級C語言程序設(shè)計(jì)第 6講數(shù)組_第1頁](http://file4.renrendoc.com/view10/M01/21/04/wKhkGWWv8qWAMVBwAACmO22dPLM267.jpg)
![計(jì)算機(jī)計(jì)算機(jī)二級C語言程序設(shè)計(jì)第 6講數(shù)組_第2頁](http://file4.renrendoc.com/view10/M01/21/04/wKhkGWWv8qWAMVBwAACmO22dPLM2672.jpg)
![計(jì)算機(jī)計(jì)算機(jī)二級C語言程序設(shè)計(jì)第 6講數(shù)組_第3頁](http://file4.renrendoc.com/view10/M01/21/04/wKhkGWWv8qWAMVBwAACmO22dPLM2673.jpg)
![計(jì)算機(jī)計(jì)算機(jī)二級C語言程序設(shè)計(jì)第 6講數(shù)組_第4頁](http://file4.renrendoc.com/view10/M01/21/04/wKhkGWWv8qWAMVBwAACmO22dPLM2674.jpg)
![計(jì)算機(jī)計(jì)算機(jī)二級C語言程序設(shè)計(jì)第 6講數(shù)組_第5頁](http://file4.renrendoc.com/view10/M01/21/04/wKhkGWWv8qWAMVBwAACmO22dPLM2675.jpg)
版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 利用主題班會增強(qiáng)班級凝聚力計(jì)劃
- 酒店員工薪酬管理總結(jié)
- 紡織行業(yè)生產(chǎn)作業(yè)安全總結(jié)
- 七年級生物下冊 1.1人類的起源和發(fā)展 人教新課標(biāo)版課件
- 2025年全球及中國智慧康養(yǎng)平臺行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025-2030全球魚塘凈水器行業(yè)調(diào)研及趨勢分析報(bào)告
- 2025-2030全球插畫設(shè)計(jì)行業(yè)調(diào)研及趨勢分析報(bào)告
- 2025-2030全球繩狀海藻酸鹽敷料行業(yè)調(diào)研及趨勢分析報(bào)告
- 2025年全球及中國后裝載機(jī)卡車行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025年全球及中國翻新SSD和HDD行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025-2030年中國反滲透膜行業(yè)市場發(fā)展趨勢展望與投資策略分析報(bào)告
- 山東省濰坊市2024-2025學(xué)年高三上學(xué)期1月期末 英語試題
- 春節(jié)節(jié)后收心會
- 你好法語第七課課件
- 圖形創(chuàng)意(高職藝術(shù)設(shè)計(jì)類)PPT完整全套教學(xué)課件
- 環(huán)境空氣顆粒物(PM10、PM2.5)自動監(jiān)測手工比對核查技術(shù)規(guī)范
- 水上水下作業(yè)應(yīng)急預(yù)案
- Jane-Eyre簡愛英文課件
- (小學(xué))人教版一年級下冊數(shù)學(xué)《認(rèn)識鐘表》課件
- API520-安全閥計(jì)算PART1(中文版)
- 商務(wù)提成辦法
評論
0/150
提交評論