|
(26)有以下程序: #include<stdio.h> main(){ char c[6]; int I=0: for(;i<6;c[-]=getchar(),i++); for(I=0;i<6;i++)putchar(c[i]); primf("\n"); } 如果从键盘上输入: ab<回车> c<回车> def<回车> 则输出结果为_________. A)a B)a C)ab D)abcdef b b c c c d d d e f 答案:C 评析:1.getchar():此函数的作用是从终端(或系统隐含指定的输入设备)输入一个字符。 2.putchar():此函数的作用是向终端输出一个字符,也可以输出控制字符。 本题在输入字符时,ab和c后面的回车符分别赋给了c[2]和e[4],所以,正确答案为c。 (27)在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是_______。 A)地址传递 B)单向值传递 C)由实参传递给形参,再由形参传递给实参 D)传递方式由用户指定 答案:B 评析:c语言规定,实参变量对形参变量的数据传递是"单向值传递",只由实参传给形参。在内存中,实参单元与形参单元是不同的单元。调用结束后,实参单元仍保留并维持原值。 (28)下面程序 #include<stdio.h> #include<string.h> main() { char*p1="abc",*p2="ABC",str[50]="xyz"; strcpy(str+2,strcat(p1,p2)); printf("%s\n",str); } 的输出是_________。 A)xyzabcABC B)zabcABC C)yzabcABC D)xyabcABC 答案:D 评析:strcat(pl,p2)将字符串abcABC放到了*pl所指向的存储单元中;strcpy在本题将abcABC复制到str+2所指向的存储单元中,即覆盖原str数组中的字符z及其后的所有字符,故str的值为"xyabcABC"。 (29)下面程序 int aa[3][3]:{{2},{4},{6}}; main() { int i,*p:&aa[0][0]; for(I=0;i<2;i++){ if(i==0)aa[I][i+l]=*p+1; else++p; printf("%d'.,。p); } } 的输出是__________。 A)23 B)26 C)33 D)36 答案:A 评析:观察题目,可以发现,*p=&aa[01[o]语句实际是将数组aa的首地址赋给了指针变量p,将i的值带入for循环中,i=0时,aa[0][1]=3,+p=2;*p输出的是指针所指向的数组值,此时p所指向的是aa[O][O],输出2,而i=l时执行了++p操作使指针向后移动指向了aa[O儿1],所以在输出*p时应为3。 (30)以下程序的输出结果是_________。 #include<stdio.h> #include<s~ing.h> fun(char*w,int n) { char t,*s1,*s2; s1=w;s2=w+n-l: while(s1<s2) { t=*s1++: *sl=*s2--; *s2=t; } } main() { char*p; p="1234567"; fun(p,strlen(p)); puts(p); } A)1234567 B)7654321 C)1711717 D)717717l 答案:C 评析:在子函数fun中,sl为字符串w的起始地址,s2为字符串的结束地址(字符'\O'除外),当执行循环结束循环,w="1711717"。 (31)下面程序 main() { int x=100,a=10,b=20,okl=5,ok2=0; if(a<b) if(b!=15) if(10k1) x=l; else i"oL2)x。10; X=-1; Printf(%d\n",x); } 的输出是________。 A)-1 B)0 c)1 D)不确定的值 答案:A 评析:第一个判断值为真,过渡到下一个判断,第二个判断为真,过渡到第三个判断……如此循环,在打印输出语句的前一行,程序给变量x赋了值,为.1,所以,无论前期如何变化,最后的x值依然为-1。 (32)下面程序 main() { int x=32: printf("%d\n",x=x<<1); } 的输出是________。 A)100 B)160 C)120 D)64 答案:D 评析:<<是c语言中规定的左移运算符,例如,a=a<<2,这个语句即是将a的二进制数左移两位,左移一位相当于该数乘于2,左移两位相当于该数乘以2的2次方。所以,x<<1=32.2=64。 (33)设有以下定义和语句,输出的结果是(用small模式编译,指针变量占2个字节)_________。 struct date { long *cat; struct date *next; double dog; }too; printf("%d",sizeof(too)); A)20 B)16 C)14 D)12 答案:D 评析:sizeof函数计算已知类型所占的字节数。结构体变量所占内存长度是各成员占的内存长度之和。指针变量占2个字节,所以cat和*next各占2个字节;double型占8个字节,故too共占12个字节。 (34)以下程序的输出结果是_________。 #include<stdio.h> #define FUDGE(y) 2.84+y #define PR(a)printf ("%d",(int)(a)) #define PRINT l(a) PR(a);putchar('\n') main() { intx=2; PRINTl(FUDGE(5)*x); } A)ll B)12 C)13 D)15 答案:B 评析:在程序中如果有带实参的宏,则按#define命令行中指定的字符串从左到右进行置换,如果串中包含宏中的形参,则将程序语句中相应的实参代替形参。将实参带入已经定义的宏中,可以得出答案灯"12"。 (35)以下程序段给数组所有的元素输入数据,请选择正确答案填入: #include<stdio.h> main() { int a[10],i=O; while(i<l0)scanf("%d",________); : : } A)a+(i++) B)&a[i+l] C)a+i D)&a[++I] 答案:A 评析:a就是数组a的首地址,而a+x是数组中第x个元素的地址,。所以在四个选项中,选项B和c只能输入一个数据,选项D不能给a[O]输入数据,只有A可以完成给数组所有的元素输入数据的任务。 (36)以下对枚举类型名的定义中正确的是________。 A)enum a={one,two,three}; B)enum a{one=9,two=-1,three}; C)enum a={"one","two","three"}; D)enum a{"one","two","three"}; 答案:B 评析:声明枚举类型用enum开头。例如:enum weekday(sun,mon,tue,wed,thu,fri,sat); 说明:1、在c编译中,对枚举元素按常量处理,同时可以改变他们的值。2、枚举值可以用来做判断比较。3、一个整数不能直接赋给一个枚举变量。 (37)字符(char)型数据在微机内存中的存储形式是________. A)反码 B)补码 C)EBCDIC码 D)ASCII码 答案:D 评析:将一个字符常量放到一个字符变量中,实际上并不是把该字符本身放到内存单元中去,而是将该字符的ASCII码值放到存储单元中。 (38)下面程序的输出是________。 typedef union { long x[2]; int y[4]; char z[8]; }MYTYPE; MYTYPE them; main() { printf("%d\n",sizeof(them));} A)32 B)16 C)8 D)24 答案:C 评析:sizeof(x)是一个标准c函数,它的返回值是x型的数据结构占用的内存字节数。题目中定义了一个共用体,共用体变量在内存中所占的长度等于最长的成员的长度。 (39)有以下程序,程序运行后的输出结果是_________。 Int f(intb[][4]) { int I,J,s=O; for(j=00<4;j++) { I=j; if(I>2)i=3-j; s+=b[i][j]; } return s: } main() { int a[4][4]={{1,2,3,4},{O,2,4,6},{3,6,9,12},{3,2,1,0}}; printf("%d\n",f(a)); } A)22 B)ll C)18 D)16 答案:D 评析:本题通过函数调用对数组a[0][0]、a[1][l]、a[2112]、a[0][3]进行求和,然后用return语句返回s的值。 (40)不能把字符串:Hello!赋给数组b的语句是_________。 A)charb[10]={'H','e','1','l','0','!'}; B)char b[10]={'h','e','1','l''O','!'}; C)charb[10];strcpy(b,"Hello!"); D)char b[10]="Hello!"; 答案:B 评析:在c语言中,大写字母和小写字母被认为是两个不同的字符,因此,"hello!"和"Hello!"是两个不同的字符串。 (41)下面程序的输出是_________。 main() { int x=3,y=6,a=0; while(x++!=(y-=1)) { a+=1; if(y<x)break; } primf("x=%d,y=%d,a=%d\n",x,y,a); } A)x=4,y=4,a=1 B)X=5,y=5,a=1 C)x=5,y=4,a=3 D)x=5,y=4,a=l 答案:D 评析:注意的是x++中x值的引用时,这里应当是先引用,后自加,具体执行过程如下: 第一次while循环:条件为真,执行a=a+l=l;此时,x的值已为4,判断y<x不成立,继续执行循环; 第二次while循环:条件为假,此时x的值已为5,退出while循环,执行printf。 (42)若有程序: fun(int a,int b) { static int c=O: c+:a+b: return C; } | |
| 文章评论 | |||