第4章陣列
4.1 典型試題剖析
4.1.1 選擇題
【例1】以下能正確定義一維陣列的選項是答案:b
a)int numb) #define n 100 int num[n];
c)int num[0..100d) int n=100; int num[n];
【例2】以下不能正確定義二維陣列的選項是_______。答案:c
a) int a[2][2]=,;
c) int a[2][2]=, 2,3d) int a[2]=,};
考點:本例考查二維陣列的初始化。分析:
此型別為常考題型。可以用以下方法對二維陣列初始化:1.
分行給二維陣列賦初值。如static int a[3][4]=,,}。2.
可以將所有資料寫在乙個花括弧內,按陣列排列的順序對各元素賦初值。如static int a[3][4]=。3.
可以對部分元素賦初值。static int a[3][4]=,,},a答案中賦值正確。4.
如果對全部元素都賦初值(即提供全部初始資料),則定義陣列時對第一維的長度可以不指定,但第二維的長度不能省略,b、d答案中賦值正確。
【例3】以下程式的輸出結果是_______。答案:a
main()
,,};
printf("%d%d%d%d\n",a[0][3],a[1][2],a[2][1],a[3][0]);
}a) 0650 b) 1470 c) 5430 d) 輸出值不定
【例4】有以下程式,執行後輸出結果是答案:d
main()
, i=0,k=0;
while(i<7 && p[i]%2)
printf("%d\n", k); }
考點:本例考查一維陣列的運算。分析:
注意while的條件,要求p[i]%2為真,那麼偶數都排除,只剩下11,13,15,17。i=0,p[0]%2=11%2為真滿足條件,執行k=k+p[i]=0+p[0]=11,i=i+1=1;i=1且p[1]%2=13%2為真滿足條件,執行k=k+ p[i]=11+p[1]=11+13=24,i=i+1=2;i=2不滿足條件,迴圈不能執行,所以,最終迴圈僅執行2次,且k=24。
【例5】有以下程式,執行後輸出結果是_______。答案:c
main()
;int i,j,k=2;
for(i=0;i<3;i++)
}考點:本例考查二維陣列在for迴圈中的運算。
分析:首先本題考查二維陣列的定義,int m[3]=;是乙個3乘以3的矩陣。再注意for的條件,要求i<3,則迴圈進行三次應該輸出三個數字。
列印的值為m[k][i],k=2,i的值由0~2,所以應該列印m[2][0],m[2][1],m[2][2]。
【例6】有以下程式,程式執行後的輸出結果是_______。答案:b
main()
,,,};
int i,s=0;
for(i=0;i<4;i++) s+=aa[i][1];
printf("%d\n",s); }
a) 11b) 19c) 13d) 20
考點:本例同樣考查二維陣列在for迴圈中的運算。分析:首先本題考查二維陣列的定義:
int aa[4][4]=,,,};是乙個4乘4的矩陣。再注意for的條件,要求i<4,迴圈進行四次,s=aa[0][1] + aa[1][1] + aa[2][1] + aa[3][1]=2+6+9+2=19 。
【例7】下面程式的輸出結果是_______。答案:b
main()
考點:本例考查一維陣列在for迴圈中的運算。分析:
首先for在本題中雖然出現的次數很多,但是之間不是巢狀關係,而是按順序執行。本題要列印k的值,那麼我們要找與k有關的線索。k+=p[i] *2,而p[i ]=a[i *(i+1)],再a[i ]=i,所以,我們要從a[i ]開始分析。
a[i ]=i,for (i=0;i<10;i++)迴圈執行10次,給陣列賦值。再p[i ]=a[i *(i+1)],for (i=0;i<3;i++)又給p[i ]賦值,注意p[i ]只有三個元素。最後k是累加k=k+p[0]*2+p[1]*2+p[2]*2=k+a[0*(0+1)]*2+ a[1*(1+1)] *2+ a[2*(2+1)] *2= k+a[0]*2+a[2]*2+a[6]*2=0*2+2*2+6*2=5+16=21。
【例8】以下程式的輸出結果是_______。答案:a
main()
,, },i,j,s=0;
for(i=1;i<3;i++)
for(j=0;j<=i;j++) s+=a[i][j];
printf("%d\n",s); }
a) 18 b) 19 c) 20 d) 21
考點:本例考查二維陣列在for迴圈巢狀中的運算。分析:
本題要列印出s的值,首先由題意得s+=a[i][j],那麼肯定與陣列有關,再來分析與哪些陣列有關。由for(i=1;i<3;i++)得知i的值只為1,2,再由for(j=0;j<=i;j++)得知j的值只為0,1,2,所以s=a[1][0]+ a[1][1]+ a[2][0]+ a[2][1]+ a[2][2]=3+4+5+6=18。本題看上去有點複雜,實際上是考查迴圈的知識,另外用到陣列的初始化。
【例9】 以下程式執行後,輸出結果是_______。答案:b
main()
while(y>1);
for(j=i-1;j>=0;j--)
printf("%d",a[j]);
printf("\n"); }
a) 0000 b) 0010 c) 0110 d) 0100
4.1.2 填空題
【例1】以下程式的輸出結果是答案:10010
main()
while(y>=1);
for(j=i-1;j>=0;j--) /*逆序輸出*/
printf("%d",a[j]);
printf("\n"); }
考點:本例考查陣列與do-while迴圈。分析:
程式中的do-while迴圈採用除2取餘的方法將十進位制數y轉化成等值的二進位制數,並將係數順序存放在陣列a中,然後通過for迴圈將陣列a逆序輸出。顯然當y=18時,其等值的二進位制數是10010。
【例2】以下程式執行後的輸出結果是答案:1 3 7 15
main()
;for(i=1;i<=4;i++)
;for(i=0;i<3;i++)
for(j=i+1;j<3;j++) a[j][i]=0;
for(i=0;i<3;i++)
{ for(j=0;j<3;j++) printf("%d ",a[i][j]);
printf("\n
考點:本例考查二維陣列在for巢狀中的運算。分析:
for迴圈巢狀改變陣列某些值,下乙個迴圈巢狀列印修改後的陣列。陣列值這樣改變:當i=0,j迴圈兩次,分別是j=1和j=2;當i=1,j迴圈一次j=2,所以a[1][0]=0,a[2][0]=0,a[2][1]=0。
第4章串 陣列和廣義表練習題答案
填空題1.不包含任何字元 長度為0 的串稱為空串。2.由乙個或多個空格 僅由空格符 組成的串稱為空白串。3.設s a document 則strlen s 20的字元定位的位置為 3 4.子串的定位運算稱為串的模式匹配 被匹配的主串稱為目標串,子串稱為模式。5.設目標t abccdcdccbaa 模...
第5章陣列與廣義表
一 教學目的 掌握陣列的定義及順序表示與實現 掌握矩陣的壓縮儲存 廣義表的定義及儲存結構。二 教學重點 1 陣列的定義及其儲存 2 特殊矩陣的壓縮儲存 3 稀疏矩陣邏輯結構和儲存結構 4 廣義表的邏輯結構和儲存結構 5 陣列和廣義表的操作應用舉例 三 教學難點 1 矩陣的壓縮儲存 2 廣義表的儲存結...
第4章習題
第四章社會主義改造理論 一 單項選擇 1 中華人民共和國的成立,標誌中國進入b a 新民主主義社會 b 社會主義社會 c 共產主義社會 d 資本主義社會 2 新民主主義社會的經濟成分中,完全屬於社會主義性質的是 a a 國營經濟 b 合作社經濟 c 個體經濟 d 國家資本主義經濟 3 新民主主義社會...