C語言數組試題 - 下載本文

第4章 數組

4.1內容概述

本章主要介紹了數值數組和字符數組的定義、初始化、元素引用和數組數據的輸入與輸出,字符數組實現字符串、字符串函數的實現與調用。指針數組與數組指針定義、元素引用。利用一維數組實現如挑數、排序、求和等實際應用問題。利用二維數組實現矩陣的應用問題。利用字符數組實現字符串的各種操作。本章知識結構如圖4.1所示。

定義

初始化

數值數組

元素引用

數組元素輸入和輸出

定義

初始化 數組 字符數組

元素引用

數組元素輸入和輸出

定義

指針數組 初始化

應用

圖4.1 第4章知識結構圖

考核要求:掌握一維數組、二維數組、字符數組和指針數組的定義和初始化;掌握數組元素存儲地址計算;掌握數組元素的下標法、指針法引用;掌握字符數組與字符串的區別與聯系;掌握有關字符串處理函數的使用方法;能利用一維數組、二維數組解決向量、矩陣等實際應用問題。

重點難點:本章的重點是一維數組、二維數組和字符數組的定義、初始化、元素引用,字符串處理函數的使用。本章的難點是字符串與字符數組的區別,指針數組和數組元素的指針法引用。

核心考點:數組的定義、初始化和數組元素的引用方法,一維數組、二維數組和字符數組的實際應用,字符串的處理方法。

4.2 典型題解析

【例4.1】以下對一維數組a的定義中正確的是( )。 A. char a(10); B. int a[0..100];

C. int a[5]; D. int k=10;int a[k]; 解析:一維數組定義的一般形式為:

類型標識符 數組名[常量表達式]

其中,常量表達式可以是任意類型,一般為算術表達式,其值表示數組元素的個數,即數組長度。

答案:C

【例4.2】以下對一維數組的定義中不正確的是( )。 A. double x[5]={2.0,4.0,6.0,8.0,10.0};

62

B. int y[5]={0,1,3,5,7,9};

C. char ch1[ ]={'1', '2', '3', '4', '5'}; D. char ch2[ ]={'\\x10', '\\xa', '\\x8'};

解析:可以對一維數組的全部元素或部分元素賦初值。在對全部數組元素初始化時,數組長度可以省略。若數組長度沒有省略,則初始化列表中值的個數不能超過數組的長度。

答案:B

【例4.3】以下對二維數組的定義中正確的是( )。

A.int a[4][]={1,2,3,4,5,6}; B. int a[][3];

C.int a[][3]= {1,2,3,4,5,6}; D. int a[][]={{1,2,3},{4,5,6}};

解析:定義二維數組時,若按一維格式初始化,則第一維的長度可以省略,此時,系統可根據初始化列表中值的個數及第二維的長度計算出省略的第一維長度,但無論如何,第二維的長度不能省略。沒有初始化時,每一維的長度都不能省略。

答案:C

【例4.4】假定一個int型變量占用兩個字節,若有定義:int x[10]={0,2,4}; 則數組x在內存中所占字節數是( )。

A. 3 B. 6 C. 10 D. 20

解析:一維數組在內存中所占的字節數為:數組長度×sizeof(元素類型)。 答案:D

【例4.5】以下程序的輸出結果是( )。 main()

{ int a[4][4]={{1,3,5},{2,4,6},{3,5,7}};

printf(\}

A. 0650 B. 1470 C. 5430 D. 輸出值不定

解析:定義的數組a為4行4列,且前三行三列元素已初始化,根據C語法規定,未初始化的元素值為0。

答案:A

【例4.6】以下程序的輸出結果是( )。 main()

{ int m[][3]={1,4,7,2,5,8,3,6,9};int i,j,k=2; for(i=0;i<3;i++){ printf(\}

A. 4 5 6 B. 2 5 8 C. 3 6 9 D. 7 8 9

解析:根據初始化列表中值的個數和第二維的長度,可求得第一維長度為3。第一行的元素值依次為1,4,7;第二行元素值依次為2,5,8;第三行元素值依次為3,6,9。循環執行三次,依次輸出行標為2的三個元素,即第三行的3個元素。

答案:C

【例4.7】以下程序的輸出結果是( )。 main()

{ int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=0; for(i=0;i<3;i++) for(j=i;j<=i;j++) t=t+b[i][b[j][j]]; printf(\

63

}

A. 3 B. 4 C. 1 D. 9

解析:程序中,引用的b數組元素的行下標為循環變量i,列下標為數組元素b[j][j]。外層循環共進行3次,對于每次外循環,內層循環只執行一次(即j=i),所以變量t 的值為元素b[0][b[0][0]]、b[1][b[1][1]]、b[2][b[2][2]]的和。由于數組元素b[0][0]、b[1][1]、b[2][2]的值分別為0、1、2,所以t的值為:0+0+1+2=3。

答案:A

【例4.8】若有定義:int a[2][4];,則引用數組元素正確的是( )。 A. a[0][3] B. a[0][4] C. a[2][2] D. a[2][2+1]

解析:引用二維數組元素時,行下標范圍為0~行數-1,列下標范圍為0~列數-1。 答案:A

【例4.9】若有定義:int aa[8];,則不能代表數組元素aa[1]地址的是( ) 。 A. &aa[0]+1 B. &aa[1] C. &aa[0]++ D. aa+1

解析: &aa[1]、&aa[0]+1和aa+1都是數組元素aa[1]的地址。由于&aa[0]是地址值常量,不能進行自加、自減運算,所以選項C不能代表aa[1]地址。

答案:C

【例4.10】下列程序執行后的輸出結果是( ) 。 main()

{ int a[3][3], *p,i;p=&a[0][0]; for(i=0;i<9;i++) p[i]=i+1; printf(\}

A. 3 B. 6 C. 9 D. 隨機數

解析:二維數組的物理存儲結構為一維,即按行序順序存儲在連續存儲空間中。

本題中,p為指向數組元素的指針變量,初始時,p指向a[0][0]。通過指針p實現對對二維數組元素按行依次賦值。a[1][2]即p[5],其值6。

答案:B

【例4.11】下列程序的輸出結果是( )。 main()

{ char a[10]={9,8,7,6,5,4,3,2,1,0},*p=a+5; printf(\}

A. 運行出錯 B. a[4]的地址 C. 5 D. 3

解析:初始時,p指向a[5]。由于單目運算符的結合方向為右結合,所以,*--p等價于*(--p),即先執行--p,p指向a[4],再輸出a[4]的值(5)。

答案:C

【例4.12】若有如下定義,則b的值是( )。

int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b=p[5];

A. 5 B. 6 C. 8 D. 9

解析:p指向a[3],即p=a+3;b=p[5],即b=*(p+5)。因此,b=*(a+8)=a[8]=9。 答案:D

【例4.13】若二維數組y有m列,則排在y[i][j]前的元素個數為( ) A.j*m+i B.i*m+j C.i*m+j-1 D.i*m+j+1 解析:C語言中的二維數組按行存儲。行標為i的元素前共有i行元素,元素個數為i*m,

64

每行列標為j的元素前共有j個元素。因此,y[i][j]前的元素個數為i*m+j。

答案:B

【例4.14】若有定義:char a[10],*b=a;,則不能給數組a輸入字符串”This is a book”的語句是( )。

A. gets(a) B. scanf(\

解析: gets為字符串輸入函數,調用該函數時需給出字符串的存儲地址,以回車作為字符串輸入的結束,并將回車符轉換成為’\\0’。而scanf函數則以回車、空格或跳格作為串輸入結束,因此scanf不能輸入有空格的字符串。

答案:B

【例4.15】以下程序執行后的輸出結果是( )。

A. 2 B. 3 C. 4 D. 5 #include \main( )

{ char *p[10]={ \ printf(\} 解析:定義了一個含有10個元素的字符指針數組p,并對前5個元素初始化,其中p[4]指向字符串\,其串長為2。

答案:A 【例4.16】若定義一個名為s且初值為\的字符數組,則下列定義錯誤的是( )。 A.char s[]={’1','2','3','\\0 '}; B.char s[]={\

C.char s[]={\.char s[4]={'1','2','3'}; 解析:字符數組中所存字符中有’\\0’時,字符數組才能作為字符串使用。選項A是用字符常量對字符數組初始化,且最后一個元素的值為字符串結束標記(’\\0’),所以數組s中存放的就是字符串\;選項D是用字符常量對部分元素初始化,根據 C語言的規定,系統為第四個元素賦初值為空值,即'\\0',所以數組s中存放的也是字符串\123\。選項B是直接使用字符串\對字符數組初始化;選項C也是使用字符串初始化,但是字符串不是\,而是\\n\,數組長度為5。

答案:C

【例4.17】下列程序的功能是輸入N個實數,然后依次輸出前l個實數和、前2個實數和、?、前N個實數和。填寫程序中缺少的語句。

#define N 10 main()

{ float f[N],x=0.0;int i; for(i=0;i

{ ① ;

printf(\ } }

解析:分析程序可知,第一個循環實現數據的輸入,第二個循環實現求和并輸出,程序中缺少的是計算前i個實數和并存入變量x的語句。由于每次循環的x值都是在前一次循環的基礎上作累加,即前i個實數和(x)等于前i-1個實數和(x)加上第i個實數f[i-1],

65

因此,①處應填寫:x=x+f[i-1];。

答案:x=x+f[i-l]; 或 x+=f[i-l]; 【例4.18】下面程序的功能是檢查一個N×N矩陣是否對稱(即判斷是否所有的a[i][j]等于a[j][i])。請填空。 #define N 4

main()

{ int a[N][N]={1,2,3,4,2,2,5,6,3,5,3,7,4,6,7,4}; int i,j,found=0; for(j=0;j

for( ① ;i

if(found) printf(\ else printf(\}

解析:設置判斷標志found,初始值為0。對于主對角線以上每個元素,分別與對稱元素比較,若不相等,則將found置為1并結束比較。循環結束后,根據found的值確定是否對稱。

答案:① i=j+1 ② found=1

【例4.19】編寫程序,從一整型數組a的第一個元素開始,每三個元素求和并將和值存入到另一數組中(最后一組可以不足3個元素),最后輸出所求的所有和值且每行輸出5個值。

解析:用于存儲和值的數組設為b,所有元素都初始化為0。從數組a的第一個元素開始,進行累加操作b[j]+=a[i],累加過程中,數組a的下標每自加3次,數組b的下標自加1次。重復此操作,直到數組a的所有元素累加完為止。輸出時,每輸出5個元素輸出一次換行符\。

#define N 20 #define M N/3+1 main()

{ int a[N],i,j,b[M]={0};

for(i=0;i

if((i+1)%3==0) j++; }

if(N%3==0) j--; for(i=0;i<=j;i++) { printf(\

if((i+1)%5==0) printf(\ } }

【例4.20】已知數組b中存放N個人的年齡,編寫程序,統計各年齡段的人數并存入數

66





湖北30选5玩法兑奖 金融股票配资合法吗 天津11选5 亚博网络娱乐平台 1992年上证指数 浙江快乐12走势图 河北快3走势开奖结果一定牛 双色球中奖查询 贵州快三开奖结果全部 11选5万能8码4注包中 最快开奖结果现场直播 上海外盘期货配资 体彩大乐透app官网下载软件 上海快3近50期 股票开户怎么办理流程 山西快乐10分开奖走势 内蒙古快三购买平台