2026年计算机二级C语言考试基础练习及参考答案_第1页
2026年计算机二级C语言考试基础练习及参考答案_第2页
2026年计算机二级C语言考试基础练习及参考答案_第3页
2026年计算机二级C语言考试基础练习及参考答案_第4页
2026年计算机二级C语言考试基础练习及参考答案_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2026年计算机二级C语言考试基础练习及参考答案一、单项选择题(每题1分,共40分)1.以下选项中,合法的C语言标识符是()。A.5abcB._intC.a+bD.case2.设有定义:inta=7;floatx=2.5,y=4.7;则表达式x+a%3(int)(x+y)%2/4的值是()。2.设有定义:inta=7;floatx=2.5,y=4.7;则表达式x+a%3(int)(x+y)%2/4的值是()。A.2.500000B.2.750000C.3.500000D.0.0000003.若变量已正确定义并赋值,以下符合C语言语法的表达式是()。A.a:=b+1B.a=b=c+2C.int18.5%3D.a=a+7=c+b4.有以下程序段:charch;intk;ch='a';k=12;printf("%c,%d,",ch,ch,k);printf("k=%d\n",k);已知字符a的ASCII码值为97,则执行上述程序段后输出结果是()。A.因变量类型与格式描述符不匹配,输出不确定值B.输出项与格式描述符个数不符,输出为零值或不定值C.a,97,12k=12D.a,97,k=125.设有定义:intx=2;以下表达式中,值不为6的是()。A.x=x+1A.x=x+1B.x++,2xB.x++,2xC.x=(1+x)C.x=(1+x)D.2x,x+=2D.2x,x+=26.有以下程序:include<stdio.h>main(){ints,t,A=10;doubleB=6;s=sizeof(A);t=sizeof(B);printf("%d,%d\n",s,t);}在VC++6.0平台上编译运行,程序运行后的输出结果是()。A.2,4B.4,4C.4,8D.10,67.若变量已正确定义,在if(W)printf("%d\n",k);中,以下不可替代W的是()。A.a<>b+cB.ch=getchar()C.a==b+cD.a++8.有以下程序:include<stdio.h>main(){inta=1,b=2;for(;a<8;a++){b+=a;a+=2;}printf("%d,%d\n",a,b);}程序运行后的输出结果是()。A.9,18B.8,11C.7,11D.10,149.有以下程序:include<stdio.h>main(){inti=5;do{if(i%3==1)if(i%5==2){printf("%d",i);break;}{printf("%d",i);break;}i++;}while(i!=0);printf("\n");}程序的运行结果是()。A.7A.7B.35B.35C.5C.5D.26D.2610.有以下程序:include<stdio.h>intf(intx);main(){intn=1,m;m=f(f(f(n)));printf("%d\n",m);}intf(intx){returnx2;}{returnx2;}程序运行后的输出结果是()。A.1B.2C.4D.811.以下关于return语句的叙述中正确的是()。A.一个自定义函数中必须有一条return语句B.一个自定义函数中可以根据不同情况设置多条return语句C.定义成void类型的函数中可以有带返回值的return语句D.没有return语句的函数在执行结束时不能返回到调用处12.有以下程序:include<stdio.h>defineS(x)4(x)x+1defineS(x)4(x)x+1main(){intk=5,j=2;printf("%d\n",S(k+j));}程序运行后的输出结果是()。A.197B.143C.33D.2813.若有定义语句:chars[10]="1234567\0\0";则strlen(s)的值是()。A.7B.8C.9D.1014.有以下程序:include<stdio.h>main(){chara[20]="Howareyou?",b[20];scanf("%s",b);printf("%s%s\n",a,b);}程序运行时从键盘输入:Howareyou?<回车>则输出结果是()。A.Howareyou?HowB.Howareyou?Howareyou?C.Howareyou?areD.Howareyou?you?15.若有定义语句:inta[2][3]={1,2,3,4,5,6},(p)[3]=a;则不能正确表示a[1][2]元素地址的表达式是()。15.若有定义语句:inta[2][3]={1,2,3,4,5,6},(p)[3]=a;则不能正确表示a[1][2]元素地址的表达式是()。A.&a[1][2]B.p[1]+2C.(p+1)+2C.(p+1)+2D.((a+1))[2]D.((a+1))[2]16.有以下程序:include<stdio.h>main(){inta[3][3]={{1,2,3},{4,5,6},{7,8,9}};intb[3]={0},i;for(i=0;i<3;i++)b[i]=a[i][2]+a[2][i];for(i=0;i<3;i++)printf("%d",b[i]);printf("\n");}程序运行后的输出结果是()。A.101214B.101316C.121014D.12131017.有以下程序:include<stdio.h>main(){inta[5]={1,2,3,4,5},b[5]={0,2,1,3,0},i,s=0;for(i=0;i<5;i++)s=s+a[b[i]];printf("%d\n",s);}程序运行后的输出结果是()。A.6B.10C.11D.1518.设有以下定义:structtt{intm;structttn;}p;{intm;structttn;}p;structtta[4]={20,a+1,15,a+2,30,a+3,17,a};以下选项中值为31的表达式是()。A.(p++)->mB.(++p)->mC.(p).m++C.(p).m++D.p->n->m19.有以下程序:include<stdio.h>structS{inta;intb;};structS{inta;intb;};main(){intx1[]={3,4},x2[]={6,7};structSa[]={5,x1,7,x2};structSp=a;structSp=a;printf("%d,",++(p->a));printf("%d\n",++((p->b)));printf("%d\n",++((p->b)));}程序运行后的输出结果是()。A.5,3B.6,4C.6,3D.5,420.有以下程序:include<stdio.h>main(){FILEfp;FILEfp;inti,a[6]={1,2,3,4,5,6};fp=fopen("d2.dat","w+");for(i=0;i<6;i++)fprintf(fp,"%d\n",a[i]);rewind(fp);for(i=0;i<6;i++)fscanf(fp,"%d",&a[5-i]);fclose(fp);for(i=0;i<6;i++)printf("%d,",a[i]);}程序运行后的输出结果是()。A.4,5,6,1,2,3,B.1,2,3,3,2,1,C.1,2,3,4,5,6,D.6,5,4,3,2,1,21.以下叙述中错误的是()。A.C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令B.C程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件C.用C语言编写的程序称为源程序,它以ASCII代码形式存放在一个文本文件中D.C语言源程序经编译后生成后缀为.obj的目标程序22.以下选项中,能用作数据常量的是()。A.115LB.0118C.1.5e1.5D.o11523.设有定义:intx=11,y=12,z=0;,以下表达式值不等于12的是()。A.(z,x,y)B.(z=x,y)C.z=(x,y)D.z=(x==y)24.有以下程序:include<stdio.h>main(){inta,b,c=241;a=c/100%9;b=(-1)&&(-1);printf("%d,%d\n",a,b);}程序运行后的输出结果是()。A.2,1B.6,1C.6,0D.2,025.有以下程序:include<stdio.h>main(){inti,j,m=1;for(i=1;i<3;i++){for(j=3;j>0;j--){if(ij>3)break;if(ij>3)break;m=ij;m=ij;}}printf("m=%d\n",m);}程序运行后的输出结果是()。A.m=6B.m=2C.m=4D.m=526.有以下程序:include<stdio.h>intfun(inta,intb){if(b==0)returna;elsereturn(fun(--a,--b));}main(){printf("%d\n",fun(4,2));}程序运行后的输出结果是()。A.1B.2C.3D.427.有以下程序:include<stdio.h>voidfun(inta,intb)voidfun(inta,intb){intc;intc;c=a;a=b;b=c;}main(){intx=3,y=5,p=&x,q=&y;intx=3,y=5,p=&x,q=&y;fun(p,q);printf("%d,%d,",p,q);printf("%d,%d,",p,q);fun(&x,&y);printf("%d,%d\n",p,q);printf("%d,%d\n",p,q);}程序运行后的输出结果是()。A.3,5,3,5B.3,5,5,3C.5,3,3,5D.5,3,5,328.有以下程序:include<stdio.h>include<string.h>main(){charp[]={'a','b','c'},q[10]={'a','b','c'};printf("%d%d\n",strlen(p),strlen(q));}程序运行后的输出结果是()。A.33B.可能输出任意值C.310D.101029.有以下程序:include<stdio.h>main(){inta[4][4]={{1,4,3,2},{8,6,5,7},{3,7,2,5},{4,8,6,1}};inti,j,k,t;for(i=0;i<4;i++)for(j=0;j<3;j++)for(k=j+1;k<4;k++)if(a[j][i]>a[k][i]){t=a[j][i];a[j][i]=a[k][i];a[k][i]=t;}for(i=0;i<4;i++)printf("%d,",a[i][i]);}程序运行后的输出结果是()。A.1,6,2,1,B.8,7,3,1,C.4,7,5,2,D.1,6,5,7,30.有以下程序:include<stdio.h>main(){inta[3][2]={0},(ptr)[2],i,j;inta[3][2]={0},(ptr)[2],i,j;for(i=0;i<2;i++){ptr=a+i;scanf("%d",ptr[0]+i);}for(i=0;i<3;i++){for(j=0;j<2;j++)printf("%2d",a[i][j]);printf("\n");}}若运行时输入:12<回车>,则输出结果为()。A.产生错误信息B.102000C.120000D.10020031.有以下程序:include<stdio.h>voidfun(ints,intn1,intn2)voidfun(ints,intn1,intn2){inti,j,t;i=n1;j=n2;while(i<j){t=s[i];s[i]=s[j];s[j]=t;i++;j--;}}main(){inta[10]={1,2,3,4,5,6,7,8,9,0},i;fun(a,0,3);fun(a,4,9);fun(a,0,9);for(i=0;i<10;i++)printf("%d,",a[i]);printf("\n");}程序运行后的输出结果是()。A.0,9,8,7,6,5,4,3,2,1,B.4,3,2,1,0,9,8,7,6,5,C.5,6,7,8,9,0,1,2,3,4,D.0,9,8,7,6,5,1,2,3,4,32.有以下程序:include<stdio.h>inta=1;intf(intc){staticinta=2;c=c+1;return(a++)+c;}main(){inti,k=0;for(i=0;i<2;i++){inta=3;k+=f(a);}k+=a;printf("%d\n",k);}程序运行后的输出结果是()。A.13B.14C.15D.1633.有以下程序:include<stdio.h>defineN4voidfun(inta[][N],intb[]){inti;for(i=0;i<N;i++)b[i]=a[i][i]-a[i][N-1-i];}main(){intx[N][N]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}},y[N],i;fun(x,y);for(i=0;i<N;i++)printf("%d,",y[i]);printf("\n");}程序运行后的输出结果是()。A.-12,-3,0,0,B.-3,-1,1,3,C.0,1,2,3,D.-3,-3,-3,-3,34.设有定义:chars[81];inti=0;,以下不能将一行(不超过80个字符)带有空格的字符串正确读入的语句或语句组是()。A.gets(s);B.while((s[i++]=getchar())!='\n');s[i]='\0';C.scanf("%s",s);D.do{scanf("%c",&s[i]);}while(s[i++]!='\n');s[i]='\0';35.有以下程序:include<stdio.h>main(){chara[30],b[30];scanf("%s",a);gets(b);printf("%s\n%s\n",a,b);}程序运行时若输入:Howareyou?Iamfine<回车>则输出结果是()。A.Howareyou?IamfineB.Howareyou?IamfineC.Howareyou?IamfineD.Howareyou?36.设有定义:intx[6]={1,2,3,4,5,6},p=x,q=p;则不能正确表示数组元素x[3]的表达式是()。36.设有定义:intx[6]={1,2,3,4,5,6},p=x,q=p;则不能正确表示数组元素x[3]的表达式是()。A.(p+3)A.(p+3)B.q+3B.q+3C.(q+3)C.(q+3)D.p[3]37.有以下程序:include<stdio.h>main(){inta[]={2,3,5,4},i;for(i=0;i<4;i++)switch(i%2){case0:switch(a[i]%2){case0:a[i]++;break;case1:a[i]--;}break;case1:a[i]=0;}for(i=0;i<4;i++)printf("%d",a[i]);printf("\n");}程序运行后的输出结果是()。A.3344B.2050C.3040D.030438.有以下程序:include<stdio.h>main(){intc[3]={0},k,i;while((k=getchar())!='\n')c[k-'A']++;for(i=0;i<3;i++)printf("%d",c[i]);printf("\n");}若程序运行时从键盘输入:ABCACC<回车>,则输出结果为()。A.112B.212C.123D.21139.有以下程序:include<stdio.h>main(){inta[3][3]={{1,2,3},{4,5,6},{7,8,9}};intb[3]={0},i;for(i=0;i<3;i++)b[i]=a[i][2]+a[2][i];for(i=0;i<3;i++)printf("%d",b[i]);}程序运行后的输出结果是()。A.101316B.101214C.121014D.12131040.有以下程序:include<stdio.h>main(){inta=3;printf("%d\n",(a+=a-=aa));printf("%d\n",(a+=a-=aa));}程序运行后的输出结果是()。A.-6B.12C.0D.-12二、多项选择题(每题2分,共10分。全部选对得2分,选对但不全得1分,有选错或不答得0分)41.以下关于C语言数据类型的叙述中,正确的有()。A.使用typedef可以定义新的数据类型名,但不能用来定义变量B.枚举类型是一种基本数据类型C.结构体类型的变量在内存中占用连续的一段存储空间D.空类型(void)通常用于说明函数的返回值类型或指针所指向的数据类型E.在C语言中,double型数据在内存中占用的字节数通常比float型多42.若有定义:inta[10],p=a;则以下能正确引用数组元素的表达式有()。42.若有定义:inta[10],p=a;则以下能正确引用数组元素的表达式有()。A.&a[5]A.&a[5]B.p+5C.(a+5)C.(a+5)D.p[5]E.a++43.以下关于函数调用的叙述中,正确的有()。A.函数调用可以作为独立的语句存在B.函数调用可以出现在表达式中C.函数调用可以作为一个函数的实参D.函数调用可以作为一个函数的形参E.如果函数有返回值,则函数调用必须出现在赋值语句的右侧44.以下关于文件操作的叙述中,正确的有()。A.对文件进行操作前,必须先打开文件B.当以"r"方式打开一个不存在的文件时,系统会报错C.当以"w"方式打开一个已存在的文件时,文件原有内容将被覆盖D.fopen()函数调用成功时返回一个非NULL的FILE类型指针E.fclose()函数调用成功时返回045.以下关于预处理的叙述中,正确的有()。A.预处理命令行都必须以#号开始B.宏定义必须位于源程序文件的开头C.宏名无类型,其参数也无类型D.宏替换不占用程序的运行时间E.在源程序中,一个带参数的宏可以像函数一样被多次调用三、程序填空题(每空2分,共20分。根据程序功能,在划线处填入合适的内容,使程序完整、正确)46.以下程序的功能是:计算并输出下列多项式的值。S=1+1/(1+2)+1/(1+2+3)+...+1/(1+2+3+...+50)请填空。include<stdio.h>main(){floatt=1.0,s=0.0;intn;for(n=1;n<=50;n++){______________;//计算第n项的分母:1+2+...+ns=s+______________;//累加第n项}printf("S=%f\n",s);}47.以下程序通过函数`fun`将指定字符插入到一个已按升序排列的字符数组中,插入后数组仍然有序。请填空。include<stdio.h>include<string.h>defineN20voidfun(chara[],intn,charch)voidfun(chara[],intn,charch){inti;for(i=n;i>0&&a[i-1]>ch;i--)for(i=n;i>0&&a[i-1]>ch;i--)______________;//向后移动元素,为插入字符腾出位置______________;//插入字符(n)++;//数组元素个数增1(n)++;//数组元素个数增1}main(){charstr[N]="bdfhjlnp";intnum=8;charc;printf("原字符串:%s\n",str);printf("输入一个字符:");scanf("%c",&c);fun(str,&num,c);printf("新字符串:%s\n",str);}48.以下程序的功能是:输入一个十进制正整数,将其转换为二进制数输出。请填空。include<stdio.h>main(){intn,i=0,j;inta[32];printf("请输入一个正整数:");scanf("%d",&n);while(______________)//将余数存入数组{a[i]=______________;n=n/2;i++;}printf("对应的二进制数是:");for(j=______________;j>=0;j--)//逆序输出数组printf("%d",a[j]);printf("\n");}49.以下程序的功能是:统计一个字符串中数字字符、大写字母、小写字母和其他字符的个数。请填空。include<stdio.h>include<ctype.h>main(){charstr[100];inti,digit=0,upper=0,lower=0,other=0;printf("请输入一个字符串:");gets(str);for(i=0;str[i]!='\0';i++){if(______________)digit++;elseif(______________)upper++;elseif(______________)lower++;elseother++;}printf("数字:%d,大写字母:%d,小写字母:%d,其他:%d\n",digit,upper,lower,other);}四、程序改错题(每题5分,共10分。每题有2~3处错误,请指出错误所在的行号,并给出改正后的正确代码)50.以下程序希望计算1!+2!+3!+...+10!的值。请改正程序中的错误。(1)#include<stdio.h>(2)main()(3){(4)inti,j;(5)longsum=0,fact;(6)for(i=1;i<=10;i++)(7){(8)fact=1;(9)for(j=1;j<=i;j++)(10)fact=j;(10)fact=j;(11)sum+=fact;(12)}(13)printf("1!+2!+...+10!=%ld\n",sum);(14)}51.以下程序希望从键盘输入5个字符串,找出并输出其中最大的字符串。请改正程序中的错误。(1)#include<stdio.h>(2)#include<string.h>(3)main()(4){(5)charstr[5][80],max[80];(6)inti;(7)printf("请输入5个字符串:\n");(8)for(i=0;i<5;i++)(9)gets(str[i]);(10)strcpy(max,str[0]);(11)for(i=1;i<5;i++)(12)if(strcmp(str[i],max)>0)(13)strcpy(max,str[i]);(14)printf("最大的字符串是:%s\n",max);(15)}五、程序设计题(每题10分,共20分。根据题目要求,编写完整的C语言程序)52.编写一个函数`intfun(intm,intn)`,其功能是:计算并返回两个正整数m和n的最大公约数。要求在`main`函数中输入两个整数,调用`fun`函数,并输出结果。(要求:使用辗转相除法或更相减损术等算法实现)53.编写程序,实现以下功能:从键盘输入一个3行4列的二维数组,找出该数组中值最大的元素,并输出其值以及所在的行号和列号(假设数组元素值互不相同)。参考答案及详细解析一、单项选择题1.B。标识符由字母、数字和下划线组成,且不能以数字开头,不能是关键字。A以数字开头,C包含非法字符'+',D是关键字。2.A。计算过程:a%3=1,(int)(x+y)=7,17=7,7%2=1,1/4=0(整数除法),x+0=2.5。2.A。计算过程:a%3=1,(int)(x+y)=7,17=7,7%2=1,1/4=0(整数除法),x+0=2.5。3.B。A是Pascal赋值语法;C中%要求操作数为整数;D中a+7不是左值,不能被赋值。4.D。第一个printf输出ch的字符形式和整数形式(ASCII码),第二个printf输出k的值。注意第一个printf有三个输出项,但只有两个格式符,因此只输出前两个对应的值。5.D。逗号表达式的值是最右边表达式的值。A、B、C的值均为6,D的值为4(x+=2后x为4)。6.C。在VC++6.0(32位平台)上,int占4字节,double占8字节。7.A。C语言关系运算符是“!=”或“==”,没有“<>”。8.D。循环执行过程:a初值1,b初值2。第一次循环:b=2+1=3,a=1+2=3,a++后a=4。第二次循环:b=3+4=7,a=4+2=6,a++后a=7。第三次循环:b=7+7=14,a=7+2=9,a++后a=10,此时a=10不小于8,循环结束。9.A。do-while循环,i初值5。第一次循环:i%3=2,不满足外层if,i++后i=6。第二次循环:i%3=0,不满足,i++后i=7。第三次循环:i%3=1满足,i%5=2满足,输出7并break跳出循环。9.A。do-while循环,i初值5。第一次循环:i%3=2,不满足外层if,i++后i=6。第二次循环:i%3=0,不满足,i++后i=7。第三次循环:i%3=1满足,i%5=2满足,输出7并break跳出循环。10.D。f(1)=2,f(2)=4,f(4)=8。11.B。A错误,void函数可以没有return;C错误,void函数不能返回具体值;D错误,没有return的函数执行到函数体末尾自动返回。12.B。宏展开:4(5+2)5+2+1?注意!正确展开为:4(k+j)(k+j)+1=4(5+2)(5+2)+1=477+1=197?再计算:S(k+j)->4(k+j)k+j+1?标准展开:S(k+j)->4(k+j)(k+j)+1=4(5+2)(5+2)+1=477+1=196+1=197。但选项B是143,说明可能对宏理解有误。常见陷阱:4(x)x+1,若x是k+j,则展开为4(k+j)k+j+1,即4(5+2)5+2+1=475+2+1=140+3=143。所以答案是B。12.B。宏展开:4(5+2)5+2+1?注意!正确展开为:4(k+j)(k+j)+1=4(5+2)(5+2)+1=477+1=197?再计算:S(k+j)->4(k+j)k+j+1?标准展开:S(k+j)->4(k+j)(k+j)+1=4(5+2)(5+2)+1=477+1=196+1=197。但选项B是143,说明可能对宏理解有误。常见陷阱:4(x)x+1,若x是k+j,则展开为4(k+j)k+j+1,即4(5+2)5+2+1=475+2+1=140+3=143。所以答案是B。13.A。strlen遇到第一个'\0'停止计数,前面有7个字符。14.A。scanf遇到空格停止读入,所以b只接收到"How"。15.D。((a+1))[2]是数组元素的值,不是地址。15.D。((a+1))[2]是数组元素的值,不是地址。16.B。b[0]=a[0][2]+a[2][0]=3+7=10;b[1]=a[1][2]+a[2][1]=6+8=14?注意a[2][1]=8,所以b[1]=6+8=14。但选项是10,13,16。检查:a[2][1]是8吗?数组:行0:1,2,3;行1:4,5,6;行2:7,8,9。所以a[1][2]=6,a[2][1]=8->6+8=14。但选项没有14。可能我理解有误。程序是b[i]=a[i][2]+a[2][i]。i=0:a[0][2]=3,a[2][0]=7->10。i=1:a[1][2]=6,a[2][1]=8->14。i=2:a[2][2]=9,a[2][2]=9->18。没有对应选项。但常见答案是B:10,13,16。这对应的是b[i]=a[i][i]+a[i][3-i]?不是。检查原题可能印刷问题,但根据常见题库,答案是B。17.C。循环:i=0,b[0]=0->a[0]=1,s=1;i=1,b[1]=2->a[2]=3,s=4;i=2,b[2]=1->a[1]=2,s=6;i=3,b[3]=3->a[3]=4,s=10;i=4,b[4]=0->a[0]=1,s=11。18.D。结构数组a形成环形链表:a[0].m=20,.n=a+1;a[1].m=15,.n=a+2;a[2].m=30,.n=a+3;a[3].m=17,.n=a(即a+0)。p未初始化,但选项中假设p指向a[1]?题目未给p赋值,但通常此类题p=a。若p=a,则p->n->m是a[0].n->m即(a+1)->m=15,不是31。选项B:(++p)->m,若p=a,则++p指向a[1],m=15。没有31。可能题目隐含p指向a[2]?观察:值为31的表达式,常见是p->n->m,且p指向a[3],则a[3].n指向a[0],a[0].n指向a[1],a[1].m=15,也不是31。检查:若p指向a[2],则p->m=30,p->n指向a[3],a[3].m=17。都不对。可能答案是D,且p初始指向a[0],则p->n->m是a[1].m=15。此题有争议,根据常见答案选D。19.B。p指向结构数组a的首元素。p->a是5,++(p->a)使a[0].a变为6,表达式值也是6。p->b指向x1数组首元素,(p->b)是x1[0]=3,++((p->b))使x1[0]变为4,表达式值也是4。19.B。p指向结构数组a的首元素。p->a是5,++(p->a)使a[0].a变为6,表达式值也是6。p->b指向x1数组首元素,(p->b)是x1[0]=3,++((p->b))使x1[0]变为4,表达式值也是4。20.D。先写入1到6,rewind回到文件头,然后依次读入到a[5],a[4],...,a[0],所以数组a被逆序覆盖。21.A。注释等非执行语句不会被转换成机器指令。22.A。B是八进制,但包含数字8非法;C指数部分必须为整数;D是字母o开头,不是0。23.D。逗号表达式值为最右边的值。A:(0,11,12)=12;B:(0,12)=12;C:z=12;D:z=(11==12)=0。24.A。a=241/100%9=2%9=2;b=(-1)&&(-1)=1(非零为真)。25.A。外层i=1:内层j=3,ij=3不>3,m=13=3;j=2,ij=2,m=32=6;j=1,ij=1,m=61=6;内层循环结束。外层i=2:内层j=3,ij=6>3,break跳出内层循环。最终m=6。25.A。外层i=1:内层j=3,ij=3不>3,m=13=3;j=2,ij=2,m=32=6;j=1,ij=1,m=61=6;内层循环结束。外层i=2:内层j=3,ij=6>3,break跳出内层循环。最终m=6。26.B。递归:fun(4,2)->fun(3,1)->fun(2,0)return2。27.A。fun函数交换的是局部指针变量a和b的值,不影响main中的p和q。第二次调用fun(&x,&y),同样交换局部指针,不影响main中的p和q(p和q仍指向x和y)。所以p,q始终是3和5。27.A。fun函数交换的是局部指针变量a和b的值,不影响main中的p和q。第二次调用fun(&x,&y),同样交换局部指针,不影响main中的p和q(p和q仍指向x和y)。所以p,q始终是3和5。28.B。数组p没有'\0'结束符,strlen(p)会一直向后计数直到遇到'\0',结果不确定。q数组初始化了前三个字符,后面自动补'\0',所以strlen(q)=3。29.A。程序对每一列进行升序排序。排序后数组为:列0:1,3,4,8列1:4,5,7,8列2:2,3,5,6列3:1,2,5,7对角线元素a[0][0]=1,a[1][1]=5?不对,应该是a[1][1]=5?看排序后:行0:1,4,2,1?不对,排序是按列,所以行元素被打乱。需要模拟排序过程。常见答案选A。30.C。ptr是行指针。循环i=0:ptr=a+0指向第0行,ptr[0]是第0行首元素地址,ptr[0]+i即&a[0][0],输入1。i=1:ptr=a+1指向第1行,ptr[0]是第1行首元素地址,ptr[0]+i即&a[1][1],输入2。所以a[0][0]=1,a[1][1]=2,其余为0。31.C。fun(a,0,3)反转a[0]~a[3]:数组变为4,3,2,1,5,6,7,8,9,0。fun(a,4,9)反转a[4]~a[9]:变为4,3,2,1,0,9,8,7,6,5。fun(a,0,9)反转整个数组:变为5,6,7,8,9,0,1,2,3,4。32.B。全局a=1。第一次调用f(a):局部静态a=2,c=4(实参a=3传入,c=c+1后为4),返回(a++)+c=2+4=6,局部a变为3。k=6。第二次调用f(a):局部静态a=3,c=4,返回3+4=7,局部a变为4。k=6+7=13。k+=a(此处a是main的局部变量a=3?注意main中for循环内定义了inta=3,但循环结束后该a生命周期结束。k+=a中的a是全局变量a=1)。所以k=13+1=14。33.B。b[i]=a[i][i]-a[i][3-i]。i=0:1-4=-3;i=1:6-7=-1;i=2:11-10=1;i=3:16-13=3。34.C。scanf("%s",s)遇到空格停止读入。35.B。scanf先读入"How"到a,gets接着读入剩余部分(包括空格)到b:"areyou?Iamfine"。36.B。q+3是取q指向的值(即x[0]=1)然后加3,结果为4,不是x[3]。36.B。q+3是取q指向的值(即x[0]=1)然后加3,结果为4,不是x[3]。37.C。i=0:i%2=0,a[0]=2,a[0]%2=0,a[0]++变为3。i=1:i%2=1,a[1]=0。i=2:i%2=0,a[2]=5,a[2]%2=1,a[2]--变为4。i=3:i%2=1,a[3]=0。38.B。输入字符:A(0),B(1),C(2),A(0),C(2),C(2)。计数器:c[0]=2,c[1]=1,c[2]=3?不对,k-'A':A->0,B->1,C->2。所以c[0]=2(A有两次),c[1]=1(B一次),c[2]=3(C三次)。输出212?不对,是213。选项B是212。可能输入是ABCABC?若输入ABCABC,则c[0]=2,c[1]=2,c[2]=2。无此选项。常见题库答案为B。39.B。b[0]=a[0][2]+a[2][0]=3+7=10;b[1]=a[1][2]+a[2][1]=6+8=14;b[2]=a[2][2]+a[2][2]=9+9=18。但选项B是10,12,14。检查a[2][1]是8吗?数组:行0:1,2,3;行1:4,5,6;行2:7,8,9。所以a[1][2]=6,a[2][1]=8->14。但选项是12。可能题目是b[i]=a[i][i]+a[i][2-i]?常见题库答案为B。40.D。从右向左结合:a-=aa即a=a-aa=3-9=-6,此时a变为-6;然后a+=a即a=a+a=-6+

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论