7.4 综合自测
一、选择题
1.有以下程序:
#include <stdio.h>
#include <string.h>
main()
{ char a[ ] ={'a','b','c','d','e','f','g','h','\0'};
int i,j;
i=sizeof(a);j=strlen(a);
printf("% d,% d\n",i,j);
}
程序运行后的输出结果是( )。
A.9,9 B.8,9 C.1,8 D.9,8
2.以下程序中函数reverse()的功能是将a所指数组中的内容进行逆置存放。
#include <stdio.h>
void reverse(int a[ ],int n)
{ int i,t;
for(i=0;i<n/2;i++)
{t=a[i];a[i] =a[n-1-i];a[n-1-i] =t;}
}
main()
{ int b[10] ={1,2,3,4,5,6,7,8,9,10};int i,s=0;
reverse(b,8);
for(i=6;i<10;i++)s+ =b[i];
printf("% d\n",s);
}
则程序运行后的输出结果是( )。
A.22 B.10 C.34 D.30
3.有以下程序:
main(int argc,char*argv[])
{ int n,i=0;
while(argv[1][i]!= '\0')
{n=fun();i++;}
printf("% d\n",n*argc);
}
int fun()
{ static int s=0;
s+ =1;
return s;
}
假设程序经编译、连接后生成可执行文件exam.exe,若输入以下命令行
exam 123<回车>
则运行结果为( )。
A.6 B.8 C.3 D.4
4.以下程序的输出结果是( )。
#include <stdio.h>
#include <string.h>
main()
{ char str[12] ={'s','t','r','i','n','g'};
printf("% d\n",strlen(str));}
A.6 B.7 C.11 D.12
5.若有说明:inta[3][4];,则对数组a元素非法引用的是( )。
A.a[0][2*1] B.a[1][3] C.a[4-2][0] D.a[0][4]
6.若有说明:inta[][4] ={0,0};,则以下选项中,不正确的是( )。
A.数组a的每个元素都可得到初值
B.二维数组a的第一维大小为1
C.因为二维数组a中初值的个数不能被第二维大小的值整除,则第一维的大小等于所得商数再加1,故数组a的行数为1
D.只有元素a[0][0]和a[0][1]可得到初值0,其余元素均得不到初值0
7.以下程序中有错误的一行是( )。
(1)main()
(2){
(3)int a[3] ={1};
(4)int i;
(5)scanf("% d",&a);
(6)for(i=1;i<3;i++)a[0] =a[0] +a[i];
(7)printf("% f\n",a[0]);
(8)}
A.3 B.6 C.7 D.5
8.若有说明:inta[][3] ={1,2,3,4,5,6,7};,则a数组第一维的大小是( )。
A.2 B.3 C.4 D.无确定值
9.若有数组定义:chararray[ ] ="China";,则数组 array所占的空间为( )。
A.4个字节 B.5个字节 C.6个字节 D.7个字节
10.以下程序的输出结果是( )。
#include <stdio.h>
#include <string.h>
main()
{ char arr[2][4];
strcpy(arr,"you");strcpy(arr[1],"me");
arr[0][3] = '&';
printf("% s\n",arr);
}
A.you&me B.you C.me D.err
11.有以下程序:
#include <stdio.h>
main()
{ int n[5] ={0,0,0},i,k=2;
for(i=0;i<k;i++)n[i] =n[i] +1;
printf("% d\n",n[k]);
}
该程序的输出结果是( )。
A.不定值 B.2 C.1 D.0
12.以下程序的输出结果是( )。
#include <stdio.h>
main()
{ int a[3][3] ={{1,2},{3,4},{5,6}},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.14 B.19 C.20 D.21
13.当执行以下程序时,如果输入ABC,则输出结果是( )。
#include <stdio.h>
#include <string.h>
main()
{ char ss[10] ="1,2,3,4,5";
gets(ss);strcat(ss,"6789");printf("% s\n",ss);
}
A.ABC6789 B.ABC67 C.12345ABC6 D.ABC456789
14.以下程序的输出结果是( )。
#include <stdio.h>
f(int b[],int m,int n)
{ int i,s=0;
for(i=m;i<n;i=i+2)s=s+b[i];
return s;
}
main()
{ int x,a[] ={1,2,3,4,5,6,7,8,9};
x=f(a,3,7);
printf("% d\n",x);
}
A.10 B.18 C.8 D.15
15.以下程序中函数sort()的功能是对数组a中的数据进行由大到小的排序。
#include <stdio.h>
void sort(int a[],int n)
{ int i,j,t;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(a[i] <a[j]){t=a[i];a[i] =a[j];a[j] =t;}}
main()
{ int aa[10] ={1,2,3,4,5,6,7,8,9,10},i;
sort(&aa[3],5);
for(i=0;i<10;i++)printf("% d,",aa[i]);
printf("\n");
}
程序运行后的输出结果是( )。
A.1,2,3,4,5,6,7,8,9,10, B.10,9,8,7,6,5,4,3,2,1,
C.1,2,3,8,7,6,5,4,9,10, D.1,2,10,9,8,7,6,5,4,3,
16.对两个数组a和b进行以下初始化:
char a[] ="ABCDEF";
char b[] ={'A','B','C','D','E','F'};
则以下叙述正确的是( )。
A.数组a与数组b完全相同 B.数组a与数组b长度相同
C.数组a与数组b中都存放字符串 D.数组a比数组b长度长
17.有以下程序段:
char a[3],b[] ="China";
a=b;
printf("% s",a);
则( )。
A.运行后将输出China B.运行后将输出Ch C.运行后将输出Chi D.编译出错
18.判断字符串s1是否大于字符串s2,应当使用( )。
A.if(s1>s2) B.if(strcmp(s1,s2))
C.if(strcmp(s2,s1) >0) D.if(strcmp(s1,s2) >0)
19.以下程序的输出结果是( )。
#include <stdio.h>
main()
{ char ch[7] ={"12ab56"};
int i,s=0;
for(i=0;ch[i] > = '0'&&ch[i] < = '9';i+ =2)
s=10*s+ch[i] - '0';
printf("% d\n",s);
}
A.1 B.1256 C.12ab56 D.1
20.当运行以下程序时,从键盘输入:AhaMA[空格] Aha<回车>,则程序的输出结果是( )。
#include <stdio.h>
main()
{ char s[80],c= 'a';
int i=0;
scanf("% s",s);
while(s[i]!= '\0')
{ if(s[i] ==c) s[i] =s[i] -32;
else if(s[i] ==c-32) s[i] =s[i] +32;
i++;
}
puts(s);
}
A.ahAMa B.AbAMa C.AhAMa[空格]ahA D.ahAMa[空格]ahA
二、操作题
1.下列给定程序中,函数fun()的功能是:将形参a所指数组中的前半部分元素中的值与后半部分元素中的值对换。形参n中存放数组中数据的个数,若n为奇数,则中间的元素不动。
例如,若a所指数组中的数据为1、2、3、4、5、6、7、8、9,则调换后为6、7、8、9、5、1、2、3、4。
请在标号处填入正确的内容,使程序得出正确的结果。
注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构。
#include <stdio.h>
#define N 9
void fun(int a[ ],int n)
{ int i,t,p;
p=(n% 2==0)?n/2:n/2+【1】;
for(i=0;i<n/2;i++)
{ t=a[i];
a[i] =a[p+【2】];
【3】 =t;
}
}
main()
试题程序
{ int b[N] ={1,2,3,4,5,6,7,8,9},i;
printf("\nThe original data:\n");
for(i=0;i<N;i++)
printf("% 4d",b[i]);
printf("\n");
fun(b,N);
printf("\nThe data after moving:\n");
for(i=0;i<N;i++)
printf("% 4d",b[i]);
printf("\n");
}
2.下列给定程序中,函数fun()的功能是:把形参s所指字符串中下标为奇数的字符右移到下一个奇数位置,最右边被移出字符串的字符绕回放到第一个奇数位置,下标为偶数的字符不动(注:字符串的长度大于等于2)。
例如,形参s所指字符串为abcdefgh,执行结果为ahcbedgf。
请在标号处填入正确的内容,使程序得出正确的结果。
注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构。
试题程序
#include <stdio.h>
void fun(char *s)
{ int i,n,k;
char c;
n=0;
for(i=0;s[i]!= '\0';i++)
n++;
if(n% 2==0)k=n-【1】;
else k=n-2;
c=【2】;
for(i=k-2;i> =1;i=i-2)
{ s[i+2] =s[i];
s[i] =【3】;
}
}
main()
{ char s[80] ="abcdefgh";
printf("\nThe original string is:% s\n",s);
fun(s);
printf("\nThe result is:% s\n",s);
}