参考答案:B
f1(*a,b),*a地址传递,b值传递,将b值传给*a,则f1(&t1,t2)调用后输出t1、t2为BB。f2(a,b)值传递,传入的只是a,b的拷贝,不实现交换,则f2(t1,t2)调用后输出t1、t2为AB。f3(*a,*b)为地址传递,可以实现a,b值的交换,则f3(&t1,&t2)调用后输出t1、t2为BA。因此结果为BAABBB。故答案为B选项。
29、以下叙述正确的是
A) char c1, *c2, *c3[10]; 是合法的变量定义语句 B) 数组说明符的一对方括号中不能使用表达式 C) 数组元素下标可以是非整数
D) 若有定义 char array[4]; 则语句 printf(\是合法的 参考答案:A
C语言规定定义数组时,数组的长度必须是整型常量,数组说明符的一对方括号中表达式只要是常量即合法,因此选项B错误。C语言规定,数组元素下标必须是非负整数 ,因此选项C错误。选项D char array[4]数组的长度为4, array[\其中\常量字符串,与C语言规定数组的下标必须是非负整数不符,故答案为A选项。
30、有以下程序
#include
{ int a[3][3]={{1,3,5,}, {7,9,11,}, {13,15,17}}; int (*p)[3]=a, i,j,n=0; for(i=0;i<3;i++) for(j=0;j<2;j++) n+=*(*(p+i)+j); printf(\}
程序运行后的输出结果是 A) 54 B) 60 C) 36 D) 48
参考答案:D
for循环的作用是求数组各行前二列的数字之和。*(*(p+i)+j)?p[i][j] 1+3+7+9+13+15=48,因此答案为D选项。
31、设有定义:
char p[]={'1', '2', '3'},*q=p;
以下不能计算出一个char型数据所占字节数的表达式是 A) sizeof(*q) B) sizeof(char) C) sizeof(p)
D) sizeof(p[0]) 参考答案:C
变量p,q均是指针,因此sizeof(p)=4,而*p,*q,p[0]的类型都是char,因此长度为1,故A、D选项均正确。选项B,直接计算char的字节数也正确,故答案为C选项。
32、有以下程序
#include
i+=m+1; m=i+x+y; return m; }
main()
{ int j=1, m=1, k;
k=fun(j,m); printf(\ k=fun(j,m); printf(\ }
执行后的输出结果是 A) 5, 11 B) 5, 5 C) 11, 11 D) 11, 5
参考答案:A
static静态变量只在声明时初始化一次。因此m,n只是在第一个调用fun函数时初始化,第二次保持原来的只不变,不在进行初始化。因此第一次,可计算i=3,m=3+1+1=5,故打印为5,第二次i=4+5,m=9+1+1=11,故打印11。故答案为A选项。
33、有以下程序
#include
int f( int x[], int n ) { if ( n> 1)
return x[n-1]+ f(x, n-1)*10; else
return x[0]; }
main( )
{ int z[3] = {1,2,3}, y; y = f(z,3);
printf( \}
程序运行后的输出结果是 A) 321 B) 123 C) 1 D) 3
参考答案:B
f函数的作用是将int型数组构造成一个整型数。f函数采用递归的方式来实现,位数是递增的。有题设可知结果为123,因此输出结果为B选项。
34、有以下程序
#include
{ char ss[10]=\ strcat( ss, \ gets( ss );
printf(\}
执行时输入:ABC<回车>,则输出结果是 A) 123456ABC B) ABC9 C) ABC
D) ABC456789 参考答案:C
gets(ss)读入一串字符串,直到遇到回车,读入的数据从数组的起始位置覆盖。数组s里的内容是ABC\\056789\\0,因此打印出ABC。故答案为C选项。
35、有以下程序
#include
printf(\}
程序运行后的输出结果是 A) 3 B) 13 C) 1 D) 0
参考答案:A
C语言转义字符是一个字符。字符串0\\t\\n\\0C011,共有0,\\t, \\n三个字符。strlen()遇到\\0计数结束,因此计数为3,故答案为A选项。
36、有以下程序
#include
{ putchar(*str+1); str++;
}
return *str+1; }
main( ) {
printf(\}
程序运行后的输出结果是 A) ABCD0 B) BCDE0 C) BCDE1 D) ABCD1
参考答案:C
putchar()每次输出一个字符,根据*str+1,因此ABCD每个字符都加1, 最后'\\0'=0,因此最后输出1,故答案BCDE1。故答案为C选项。
37、有以下程序
#include
ch = getchar();
if (ch != 'C') my_put(); putchar(ch); }
main( ) {
my_put(); }
执行时输入:ABC<回车>,则输出结果是 A) ABC B) CBA C) AB D) ABCC
参考答案:B
my_put()递归,直到输入了C,开始返回。递归使用的是栈的思想,因此最后输入进去的最先返回,并打印。因此结果是CBA。答案为B选项。
38、有以下程序
#include
{ static int x[3]={1,2,3}; int k;
for( k=0; k<3; k++ ) x[k] += x[k]-n;
for( k=0; k<3; k++ ) printf(\
}
main()
{ fun(0); fun(1); } 程序运行后的输出结果是 A) 1,2,3,0,1,2, B) 2,4,6,1,3,5, C) 2,4,6,3,7,11, D) 2,4,6,4,8,12, 参考答案:C
第一次调用fun()函数,此时n=0,数组x是静态的,因此,只在第一次时初始化,有
x[k]+=x[k]-n,计算可知,x[]={2,4,6},第二次调用fun(), 此时n=1,x[]={2,4,6},经计算的x[]={3,7,11},故打印结果为2,4,6,3,7,11。答案为C选项。
39、有以下定义
struct person { char name[10]; int age; }; struct person class[10]={ \ \ \ \ }; 能输出字母M的语句是
A) printf(\B) printf(\C) printf(\D) printf(\ 参考答案:A
C语言规定数组的下标从0开始,结构体变量class初始化了前4项,第三项的name=\,class[2].name[0]=`M`,故答案为A选项。
40、若要通过位运算使整型变量a中的各位数字全部清零,以下选项正确的是 A) a=a^0; B) a=a|0; C) a=a&0; D) a=!a;
参考答案:C
异或运算^,位相同为0,不同为1,或运算|只用对应位有1,结果为1,否则为0,与运算&,对应位都为1,才为1,否则为0,=!不等于。只有与0按位与,才能保证任意数的所有位清零,可得答案为C选项。
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库全国计算机二级C选择题题库第36套(3)在线全文阅读。
相关推荐: