|
(28)有如下程序 main() { int x=3; do { printf("%d",x--);} while(!x); } 该程序的执行结果是________。 A)321 B)3 C)不输出任何内容 D)陷入死循环 答案:B 评析:本题x赋初值为3,当执行printf("%d",x--);时,由于X--的作用是先运算x,再将x的值减l,所以,printf输出的x值为3,等输出后,x的值减1变为2,继续执行,判断条件!x为假,循环只被执行一次。 (29)设有声明语句:char a='\72';则变量a__________ A)包含1个字符 B)包含2个字符 C)包含3个字符 D)声明不合法 答案:A 评析:转义字符常量'\xx'可以把'\'后面的数字转换为对应的ASCII字符。 (30)有以下程序段: main() { int a=5,*b,**c c==&b;b=&a; } 程序在执行了c=&b;b=&a;语句后,表达式ttc的值是__________。 A)变量a的地址 B)变量b中的地址 C)变量a中的值 D)变量b的地址 答案:C 评析:指针变量是用来存放地址的。&:取地址运算符。+:指针运算符。**c为指针变量*c所指向的存储单元,*c为指针指针变量c所指向的存储单元,而c=&b表示c为变量b的地址,b=&a表示b为变量a的地址。表达式一c的值就是变量a中的值。 (31)有如下函数调用语句 func(recl,rec2+rec3,(rec4,rec5)); 该函数调用语句中,含有的实参个数是________。 A)3 B)4 C)5 D)有语法错误 答案:A 评析:(rec4,rec5)是逗号表达式,它的值是rec5的值。所以该函数调用语句含有的实参个数是3。 (32)有如下程序 main() { char s[115]={.tabc","de","fgh"}; printf("%e",s[2][6]); } 其输出为__________。 A)不确定 B)编译错误 C)g D)输出null字符 答案:A 评析:由于s[2116]表示字符串已超出了数组s的表示范围,在c中不会对数组越界进行检查,当数组越界时,会得到一个不确定的值。 (33)有如下程序 int rune(ira a,int b) { remm(a+b);} main() { int x=2,y=5,z=8,r; r=func(func(x,y),z); primf("%d\n",r); } 该程序的输出结果是________。 A)12 B)13 C)14 D)15 答案:D 评析:调用函数func(x,y),返回x+y,即7;再调用函数func(7,z),返回7+z,即15。 (34)有如下程序段 int *p,a=10,b=l; p=&a; a=*p+b; 执行该程序段后,a的值为_________。 A)12 B)11 C)10 D)编译出错 答案:B 评析:执行p=&a;后,p指向整数a,*p即p的目标变量,也就是a;所以a=*p+b等价于a=a+b,可知a的值最终为11。 (35)有以下程序: int*f(int*x,int*y) { if(*x<*y)return x; else returny; } main() { int a=7,b=8,*p,*q,*r; p=&a;q=&b; r=f(p,q); printf("%d,%d,%d\n",*p,*q,*r); } 程序运行后输出结果是_________。 A)7,8,8 B)7,8,7 C)8,7,7 D)8,7,8 答案:B 评析:f函数的功能是返回地址为x,y的两个数中值较的数的地址,本题输出结果是7,8,7。 (36)有如下程序 long fib(im n) { if(n>2) return(fib(n-1)+fib(n-2)); else return(2); ) main() { printf(%ld\n",fib(3));} 该程序的输出结果是_________。 A)2 B)4 C)6 D)8 答案:B 评析:函数舶内部有两个递归调用,当n=3时,fib(n-1)返回2,fib(n-2)也返回2,所以fib(n-I)+fib(n-21的值为4。 (37)下面程序的输出结果是_________。 main() { char str[10],c='a'; inti=0: for(;i<5;i++) str[I]=c++; printf("%s",str); } A)abcde B)a C)不确定 D)bcdef 答案:C 评析:字符串少一个结束标志,所以输出的结果不确定。 (38)在c语言中,函数中变量的隐含存储类别是__________。 A)auto B)static C)extern D)无存储类别 答案:A 评析:函数中变量的存储类别包括auto,static,extern,其中auto为隐含存储类别,static为静态存储类别,register是寄存器存储类别。A 评析:函数中变量的存储类别包括auto,static,extern,其中auto为隐含存储类别,static为静态存储类别,register是寄存器存储类别。 (39)有如下程序 #define n 2 #define m N+I #define NUM 2*m+l main() { int i; for(i=1;i<=NUM;i++)printtf("%d\n",i); } 该程序中的for循环执行的次数是_________。 A)5 B)6 C)7 D)8 答案:B 评析:在c语言中,宏定义在编译时将被直接替换,所以NUM最后会被替换成2*N+l+l,即2*2+1+1,值为6。因此,for循环执行的次数为6。 (40)假设在turboc2.0采用small模式编译如下程序 main() { char a[4]:{'a','b'}; char%="abc.t: printf("%d,%d",sizeof(a),sizeof(b)); } 其输出结果为_________。 A)4,2 B)4,4 C)4,3 D)2,2 答案:A 评析:用small模式编译,指针变量占2个字节。sizeof(array):数组名array代表数组本身,sizeof函数测出的是整个数组的大小。a数组的大小为4,b指针变量的大小为2。 (41)有以下函数 char *fun(char *p) { retum p; } 该函数的返回值是_________。 A)无确切的值 B)形参p中存放的地址值 C)一个临时存储单元的地址 D)形参p自身的地址值 答案:B 评析:p本身就是一个字符型指针变量,返回p也就是返回变量p中存放的地址值。 (42)有如下程序段: #include<stdio.h> #define Max(a,b)a>b?a:b main() { int a=5,b=6,c=4,d; d=c+Max(a,b); printf("%d",d); } 其输出结果为__________。 A)10 B)5 C)6 D)编译错误 答案:B 评析:在c语言中,宏定义是直接替换的,所以在c+a>b?a:b这个条件表达式中,c+a>b为真,所以用a的值作为整个表达式的值,而a的值为5,所以整个表达式的值为5。 (43)有如下程序段 int a=14,b=l 5,x; char c='A': x=(a&&b) &&(c<'B'); 执行该程序段后,x的值为________。 A)true B)false C)0 D)l 答案:D 评析:a&&b的值为true,c<'B'的值也为true,所以(a&&b)&&(c<'B')的值为true。但x是int型变量,所以(披&b)&&(c<'B')的值最后要从bool型转换为int型赋给x。这样x的值应为l。 (44)下述关于C语言文件的操作的结论中,正确的是________。 A)对文件操作必须先关闭文件 B)对文件操作必须先打开文件 C)对文件操作顺序无要求 D)对文件操作前必须先测文件是否存在,然后再打开文件。 答案:B 评析:在c中对文件操作必须先打开文件,待文件操作完毕后要关闭文件。对文件以读的方式进行打开操作时,同时会执行文件的检查文件是否存在,不存在将会返回空的文件指针,如果对文件以写的方式打开时,文件不存在,将会自动创建文件,.因此在C中打开文件前不必对其检查文件是否存在,故答案为B。 (45)下列关键字中,不属于C语言变量存储类别的是________。 A)register B)auto C)extem D)public 答案:D 评析:变量的存储类别具体包含四种:自动的(auto),静态的(statiC),寄存器的(register),外部的(extern)。 (46)有如下说明 im a[10]={l,2,3,4,5,6,7,8,9,10},*p=a; 则数值为9的表达式是________。 A)木p+9 B)半(p+8) C)牛p+=9 D)p+8 答案:B 评析:p是指针,p+8是地址值,D是错的;*p是p的目标变量,即a[0],值为1,所以+p+9的值是lO,而*p+=9值是重新给a[O]赋了值(1+9);所以A和C也是错的。p+8是地址值,指向a[8],那么*(p+8)。的值就是a[81的值,即9。 (47)若有以下定义:int t[3][2];能正确表示t数组元素地址的表达式是________。 A)&t[3][2] B]t[3] C]t[1] D]*t[2] 答案:C 评析:A和B两个表达式都已越界了;*t[2]是目标变量,即一个整数,而不是地址值。 (48)下面程序运行后的输出结果是________。 struct abc { int a,b,c; } main() { struct abc s[2]={{1,2,3},{4,5,6}}; int t=-s[0].a+s[1].b; printf("%d\n",t); } A)5 B)6 C)7 D)8 答案:B 评析:在main函数中定义了一个struct abc类型的数组,同时分别利用{1,2,3}及{4,5,6}对数组中两个元素进行初始化。在该结构体,依次对其中的a,b,c三个变量进行初始化。故s[O].a=l,s[1].b=5,所以本题输出为6。 (49)有如下程序 main() { in | |
| 文章评论 | |||