【C語言數組知識點08】題型解析(持續更新中)

1. 引用數組元素時, 其數組下標的數據類型允許是 整型常量或整型表達式


2. 一維數組的定義方式爲: 類型說明符 數組名 [整型常量表達式]    


3. 以下能對二維數組a 進行正確初始化的語句是:

   A) int a[2][]={{1,0,1},{5,2,3}};

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

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

   D) int a[][3]={{1,0,1},{},{1,1}};

答案:B;A選項列標不可省略;C選項超出了範圍;D選項賦初值不可有{}


4. 以下不能對二維數組a 進行正確初始化的語句是

A) int a[2][3]={0};

B) int a[][3]={{1,2},{0}};

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

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

答案:C;超出了範圍


5. 若有說明:int a[3][4]; 則全局數組a 中各元素         

A) 可在程序的運行階段得到初值0

B) 可在程序的編譯階段得到初值0

C) 不能得到確定的初值

D) 可在程序的編譯或運行階段得到初值0
 答案:B


6. 下面程序如果只有一個錯誤, 那麼是(每行程序前面的數字表示行號)         

1 main()
2 { 
3     float a[3]={3*0}; 
4     int i; 
5     for(i=0;i<3;i++) scanf(“%d”,&a[i]); 
6         for(i=1;i<3;i++) a[0]=a[0]+a[i]; 
7     printf(“%d\n”,a[0]); 
8 }

答案:第3行;


7. 若二維數組a 有m 列,則計算任一元素a[i][j]在數組中位置的公 式爲 (假設a[0][0]位於數組的第一個位置上。)

A)i*m+j        

B)j*m+i        

C)i*m+j-1        

D)i*m+j+1

答案:D


8.  以下對一維數組的定義中不正確的是(    )

A. double x[5]={2.0,4.0,6.0,8.0,10.0};   

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


9. 以下對二維數組的定義中正確的是(    )。

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


10. 若有定義: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


11. 若有如下定義,則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


12. 若二維數組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,每行列標爲j的元素前共有j個元素。因此,y[i][j]前的元素個數爲i*m+j。

答案:B


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

A. gets(a)      B. scanf("%s",a)     C. gets(&a[0]);    D. gets(b) ;

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

答案:B


14. 有以下程序, 執行後輸出結果是(     )

main() 

{ int x[8]={8,7,6,5,0},*s; 

  s=x+3; 

  printf("%d ",s[2]);

A. 隨機值           B. 0           C. 5            D. 6

答案:B


15. 下列描述中不正確的是 (     )。
 

A. 字符型數組中可以存放字符串              

B. 可以對字符型串進行整體輸入、輸出

C. 可以對整型數組進行整體輸入、輸出         

D. 不能在賦值語句中通過賦值運算符"="對字符型數組進行整體賦值

答案:C;C語言規定只能逐個引用數組元素而不合下次引用整個數組。字符數組的輸入、輸出可以將整個字符串一次輸入或輸出。所以,選項C的說法是不正確的。


16. 以下語句或語句組中,能正確進行字符串賦值的是(     )。

A. char *sp; *sp="right!";    B. char s[10]; s="right!";

C. char s[10]; *s="right!";    D. char *sp="right!";

答案:D;A char *sp;*sp="right!";不對sp是一個字符指針,然後再*sp就是一個字符的意思,它不可以賦值一個字符串;B char s[10];s="right!";s是一個數組名,數組名不可以賦值.;C char s[10];*s="right!";s是一個數組的首地址,它指向第一個元素.所以*s就是s[0]它也是一個字符,不可以賦值爲字符串.其實賦值中,就是字符串賦值比較難;主要注意下字符串的初始化的兩種形式char *sp="right!";另外char sp[]="right!";也可以.其他的如果不是初始化,純賦值,主要是觀察左右類型是否一致.不能左邊是一個字符或者一個指針,而右邊是一個字符串常量.

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章