第四部分 数 组 ·13·
if(flag) printf(\else printf(\}
19. 以下程序的功能是:将字符数组a中下标值为偶数的元素从小到大排列,其它元素不变。
请填空。
#include
{
char a[]=\
int i, j, k; k=strlen(a);
for(i=0; i<=k-2; i+=2)
for(j=i+2; j<=k; 【1】) if( 【2】 )
{ t=a[i]; a[i]=a[j]; a[j]=t; } puts(a); printf(\ }
20. 输入5个字符串,将其中最小的打印出来。
main() {
char str[10],temp[10]; int i; 【1】;
for(i=0;i<4;i++) {gets(str);
if (strcmp(temp,str)>0) 【2】; }
printf(\}
21. 以下程序用来对从键盘上输入的两个字符串进行比较,然后输出两个字符串中第一个不
相同字符的ASCII码之差。例如:输入的两个字符串分别为abcdef和abceef,则输出为-1。请填空。
#include
char str1[100],str2[100],c; int i,s;
printf(\ printf(\ i=0;
while((strl[i]==str2[i]&&(str1[i]!= 【1】)) i++; s= 【2】 ;
printf(\ }
第四部分 数 组 ·14·
22. 设有下列程序:
#include
int i;
char str[10], temp[10]; gets(temp);
for (i=0; i<4; i++) { gets(str);
if (strcmp(temp,str)<0) strcpy(temp,str); }
printf(\
}
上述程序运行后,如果从键盘上输入(在此
则程序的输出结果是 ________。
23. 以下程序功能是:统计从终端输入的字符中每个大写字母的个数。用#号作为输入结束标
志,请填空。
#include
#include
int num[26],i; char c;
for(i=0; i<26; i++) num[i]=0;
while( 【1】 != '#') /*统计从终端输入的大写字母个数*/ if( isupper(c)) num[c-65]+=1;
for(i=0; i<26; i++) /*输出大写字母和该字母的个数*/ if(num[i]) printf(\【2】 , num[i]); }
24. 下面程序段完成功能是:输出两个字符串中对应字符相等的字符。请填空。
char x[ ]= \char y[ ]= \int i=0;
while (x[i]!= 【1】 &&y[i]!= 【2】 )
{ if (x[i]==y[i]) printf(\【3】); else i++; }
25. 下面程序完成功能是:计算一个字符串中子串出现的次数。 #include
第四部分 数 组 ·15·
{
int i ,j, k,count;
char str1[20],str2[20]; printf(\gets(str1);
printf(\gets(str2); 【1】;
for(i=0;str1[i];i++)
for(j=i,k=0;str1[j]==str2[k];j++,k++)
if ( 【2】 ) count++;
printf(\}
26. 下面程序完成以下功能:从键盘输入一行字符,统计其中有多少个单词,单词之间用空
格分隔。
#include
char s[81];
int i , c, num=0,word=0;
【1】;
for(i=0;(c=s[i])!=’\\0’;i++)
if(c==32) 【2】;
else if (word==0) {word=1; 【3】;}
printf(\}
27. 下面程序完成功能是:判定用户输入的正整数是否为“回文数”,所谓“回文数”是指正
读反读都相同的数。请填空。 #include
int buffer[10], i,k,flag; long number ,n;
printf(\scanf(\k=0;
n=number; do
{ 【1】 ; k=k+1; n=n/10;
}while (n!=0);
flag=1;
for( i=0;i<=(k-1)/2;i++)
第四部分 数 组 ·16·
if ( 【2】 ) flag=0; if(flag)
printf(\
else printf(\
}
4.3 答案及部分解析
一.选择题答案
1. C 2. D 3. C 4. C 5. C 6. D 7. D 8. A 9. A 10. C 11. D 12. B 13. A 14. B 15. D 16. B 17. C 18. B 19. D 20. C 21. A 22. C 23. D 24. A 25. A 26. B 27. A 28. C 29. C 30. A 31. B 32. D 33. C 34. C 35. C 36. D 37. C 38. D 39. C 40. A 41. C 42. A 43. C 44. A 45. A 46. B 47. D 48. A
11. 解析:程序中的for语句为n[0]和n[1]重新赋了值,但要输出的应该是n[2](n[k])值。 13. 解析:第一个for语句中当k=0时 a1[0]
a[1]=2,j值为1;当k=2时,a1[1]
14. 解析:第一个for循环是为了将0,1,2,3,4,5,6,7,8,9分别赋给a[0]-a[9];
第二个for循环再将a[0],a[2],a[6]的值赋给p[0],p[1],p[2];第三个for循环将3个数组下标变量值*2后累加,结果为16,再和k初值5相加,最终结果为21。
27. 解析:本题考点是关于给数组赋初值时,初值的个数少于数组中元素个数。a数组实际
存储状态是a[0][2]=0,a[1][2]=0,a[2][2]=0.
35. 解析:字符串的最后一个字符应该是结束符’\\0’。
36. 解析:在程序执行语句部分,不允许把字符串赋予一个数组。
40. 解析:函数strcat()是字符串连接。gets()中输入数据时以回车符作为结束符。在纳
入内存时,输入字符串末尾的回车符自动变换成代码‘\\0’,从而使它成为C字符串。它在stdio.h中被定义,输出ss时,遇到“0”停止输出。
47. 解析:本题中strcpy(arr,”you”)函数的功能是将”you” 3个字符分别赋给
arr[0][0]、 arr[0][1] 和a[0][2];strcpy(arr[1],”me”) 函数的功能是将 “me” 分别赋给arr[1][0]和a[1][1]。
二.填空题答案 1. 答案:0 2. 答案:越界
3. 答案:初始化 静态 外部 4. 答案:5 4 3 2 1 5. 答案:【1】&a[i] 【2】i%4==0 【3】printf(\6. 答案:【1】a[i] 【2】i++或++i 【3】b[j] 【4】j++或++j
第四部分 数 组 ·17·
7. 答案:【1】a 【2】a 【3】sum/n 【4】x[i] 8. 答案:【1】2 【2】2 【3】i>=0 解析: 采用辗转相除法进行进制之间的相互转换,将结果存储在一维数组b中,最后显 示其值即可。 9. 答案:【1】&a[i] 【2】i 12. 答案: c[i][j]=a[i][j]+b[i][j] 解析: 使用两个二维数组a和b存放两个3*4阶矩阵的元素值,然后用两重for循环进 行相加求值产生二维数组c,最后显示c的各元素值。 13. 答案:0 1 2 0 1 2 0 1 2 14. 答案:-850,2,0 15. 答案:a=1234 b=5 A或a=1234b=5 16. 答案:Hello 17. 答案:EnglishGood 18. 答案: 【1】 int i,flag 【2】 str[i]=getchar( ) 【3】 str1[i]!=str[i] 19. 答案:【1】 j+=2 【2】 a[i]>a[j] 解析: 外层for循环控制i步长为2,内层for循环控制j步长为2.当i=0时,j=2,a[0]>a[2], 交换c和a;j=4,a[0]a[6], 交换a和c字符;j=8,a[2]a[6], 交换c和g字符;j=8,a[4]a[8], 交换e和g字符;输出”alancuegg”。 20. 答案:【1】 gets(temp) 【2】 strcpy(temp,str) 21. 答案:【1】 '\\0'或0 【2】 strl[i]-str2[i] 22. 答案:QuickC 23. 答案: 【1】 (c=getchar()) 注意,外层括号不得遗漏 【2】 +65 或 +'A' 24. 答案:【1】 '\\0' 【2】 '\\0' 【3】 x[i++] 25. 答案:【1】 count=0 【2】!str2[k+1] 26. 答案:【1】 gets(s) 【2】 word=0 【3】 num++ 27. 答案:【1】 buffer[k]=n 【2】 buffer[i]!=buffer[k-1-i]

