|
(26)以下程序的输出结果是________。 main() { int k=4,m=1,p; p=func(k,m);printf("%d,",p); p=func(k,m);printf("%d\n",p); } func(int a,int b) { static int m:O,i=2; i+=m+l;m=i+a+b; return(m); } A)8,17 B)8,16 C)8,20 D)8.8 答案:A 评析:k和m的值带入函数func中,第一次调用完func()后,其中m和i的值要保留,并在第二次调用时使用,这是因为两者都是局部静态变量。所以最后的结果是8和17。 (27)以下程序调用findmax函数求数组中值最大的元素在数组中的下标,请选择填空: #include<stdio.h> findmax(int*s,int t,int*k) { int p; for(p=0,*k=p;p<t;p++) if(s[p]>s[*k])___________; } main() { int a[10],i,k; for(i=0;i<10;i++)scanf("%d",&a[I]); findmax(a,lO,&k); printf("%d,%d\n",k,a[k]); } A)k=p B)*k=p-s C)k=p-s D)*k=p 答案:D 评析:k是一个指针,它的值是一个地址,要通过它为主函数的变量改变数据,必须使用*p,这样就可以把一个下标数赋给p指针指向的那个内存单元,所以横线处应填入*k=p。 (28)在执行以下程序时,为了使输出结果为t=4,给a和b输入的值应该满足的条件是_________。 main() { int s,t,a,b; scanf("%d%d",&a,&b); s=l;t=I; if(a>O)s=s+1; if(a>b)t=s+t; else if(a==b)t=5; else t=20s: printf("t=%d\n",t); } A)a>b B)a<b<0 C)0<a<b D)0>a>b 答案:C 评析:要使输出结果为t=4,必须要执行else t=2*s;和if(a>b)t=s+t;语句。如果执行if(a>b)t=s+t;语句,则条件为a>b,要求s=3,在该语句前面的语句中没有条件可以满足s=3;如果执行else t=2*s;语句,则条件为a<b,要求s=2,需要执行if(a>O)s=s+l;语句,所以应满足条件0<a<b。 (29)以下函数调用语句中含有_________个实参。 func((expl,exp2),(exp3,exp4,exp5)); A)l B)2 C)4 D)5 答案:B 评析:实参可以是常量、变量或表达式,(expl,exp2)是逗号表达式,它的值是exp2的值;(exp3,exp4,exp5)是逗号表达式,它的值是exp5的值。所以该函数调用语句含有的实参个数是2,即:(expl,exp2)和(exp3,exp4,exp5)。 (30)执行以下程序后,输出的结果是__________。 main() { int y=10; do{y--;}while(--y); printf("%d\n",y--); } A)一l B)l C)8 D)0 答案:D 评析:do-while语句的特点是先执行循环体,然后判断循环条件是否成立,当循环条件的值为0时循环结束。当y=O时循环结束,printf("%d\n",y--);语句是先输出y再自减,所以输出结果为0。 (31)在C语言中,要求运算数必须是整型的运算符是__________。 A)% B)/ C)< D)! 答案:A 评析:题目的四个选项中,(B)(c)(D)都不要求运算数必须为整数,参与模运算(%)的运算数必须是整型数据。 (32)c语言提供的合法的数据类型关键字是__________。 A)DoubIe B)noat C)integer D)Char 答案:B 评析:选项A和D中第一个字母大写,不正确; 选项c是PASCAL中的整型关键字,不是c语言中的关键字。 (33)设有以下定义: int a[3][3]={1,2,3,4,5,6,7,8,9}; int(*ptr)[3]=a,*p=a[0]; 则下列能够正确表示数组元素a[1][2]的表达式是___________。 A)*((*ptr+1)[2]) B)*(*(p+5)) C)(*ptr+1)+2 D)*(*(a+1)+2) 答案:D 评析:+(p+5)所指向的数组元素是a[1][2],所以B不对;ptr所指向的是一个含有三个元素的一维数组,所以A和C是错误的。 (34)若有以下说明: int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; 则值为6的表达式是__________。 A)*p+6 B)*(p+6) C)*p+=5 D)p+5 答案:C 评析:选项A,*p+6,其值等于1+6=7;选项B,*(p+6),其值等于a[6]=7;选项c,*p+=5,其值等于*p=*p+5=l+5=6;选项D,p+5是个地址值。 (35)下列程序的输出结果是__________。 fun() { static int x=5: if(x++>5)printtf("%dft,x); else printf("%d.',)汁+); } mainO { fun();fun(); } A)67 B)69 C)68 D)78 答案:C 评析:模块的代码开始运行后,使用static语句声明的变量会一直保持其值,直至该模块复位或重新启动。在第1次调用fun函数时,x的初值为5,if语句的条件不成立,执行else printf("%d"x++);语句,输出6,执行后x的值变为7,由于x是静态局部变量,在函数调用结束后,它并不释放,仍保留x=7。在第2次调用fun函数时,if语句的条件成立,执行print掣%∽x);语句,输出8。 (36)下面程序的输出是__________。 main() { int m=Oxa,n=2; m+=n: printf(""%x\n"",m); } A)C B)c C)99 D)2 答案:A 评析:格式控制符x表示数据按十六进制形式输出(不输出前导符0x)。本题在执行语句m十一n:后,m的值变为字母c,又因为在输出a-f时,如果格式控制符用x,则以大写字母输出;如果用x,则以小写字母输出,故本题答案为A。 (37)以下程序的输出结果是_________。 #include<string.h> main() {char*a="abcdefghi";int k; fun(a);puts(a); } fun(char *s) { intx,y;char c; for(x=O,y=strlen(s)-l;x<y;x++,y--) { C=S[y];s[y]=s[x];s[x]=c;} } A)ihgfedcba B)abcde电hi C)abcdedcba D)ihgfefghi 答案:A 评析:观察子函数fun()可知,它是实现一个数组首末元素位置互相依次交换。联系主函数,可以看出,是对字符串中的元素依次进行首末位置的对调。 (38)设有如下函数定义,则输出结果为_________。 Char*fun(char*str) { char*p=str; while(*p) {if(*p>'d')continue; p++; } return p; } main() { printF%s\n",fun("welcome!")); } A)welcome B)come! C)w D)程序进入死循环 答案:D 评析:continue语句的作用是用于结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定。由于'w'>'d'执行continue语句,结束本次循环(即跳过p++;语句),还是继续比较'w'>'d',程序进入死循环。 (39)以下程序的输出结果是_________。 main() { union{char i[2]; int k: }r; r.i[0]=2;r.i[1]=0; printf("%d\n",r.k); } A)2 B)l C)0 D)不确定 答案:A 评析:根据共用体的定义可知:共用体r的成员k和成员i[2]是共用同一段内存空间,所以,当程序给r.i[0]赋值后,实际上,共用体成员k的值也确定了,为2。所以打印输出的结果应当为2。 (40)设p1和p2是指向同一个int型一维数组的指针变量,k为int型变量,则下列不能正确执行的语句是_________。 A)l(=*pl+*p2; B)p2=k; C)pl=p2; D)k=*pl*(*p2); 答案:B 评析:指针变量中只存放地址(指针),不要将一个整型量(或任何其他非地址类型的数据)赋给一个指针变量,所以B是不正确的。 (41)以下程序的输出结果是__________。 #define f(x) X*X main() { int a=6,b=2,c; c=f(a)/f(b); printf("%d\n",c); } A)9 B)6 C)36 D)18 答案:C 评析:观察程序段可知,对带参数的宏的展开只是将语句中的宏名后面括号内的实参字符串代替#define命令行中的形参。本题中c=f(a)/f(b)用#define f(x)X*X代替得c=f(6)/f(2),即c=6*6/2*2,结果为36。 (42)若有以下定义: char s[20]="programming",*ps=s; 则不能代表字符。的表达式是__________。 A)ps+2 B)s[2] C)ps[2] D)ps+=2,*ps 答案:A 评析:ps+2就是s[21的地址,即存放字符。的地址、所以A是错误的。 (43)以下程序的输出结果是_________。 main() { int i; for(i=1;i<6;i++) { if(i%2){printf("∥);continue;} printf("引'); } printf("\n"); } A)#*#*# B)##### C)***** D)*#*#* 答案:A 评析:i从1到5循环5次,i为1时,满足条件,打印输出"#":i为2时,条件为假,打印输出"*"。也就是说,当i为奇数时,条件为真,程序打印输出"#",否则,输出"*"。 (44)有如下程序 main() { int n=9: while(n>6) { n--; printf("%d|.,n); } } 该程序的输出结果是__________。 A)987 B)876 C)8765 D)9876 答案:B 评析:符合n>6的n只有7,8,9;所 | |
| 文章评论 | |||