第二部分 参考答案
1.【答案】B 本题考点:没有遇到break时继续向下执行,遇到break就结束switch语句。
【解析】
当i=1,则switch(1)执行case 1:然后case 2:s=3,继续default s=3+5=8。
当i=2, switch(2)执行case 2:s=8+3=11, 继续default s=11+5=16。
当i=3, switch(3)执行case 3:s=16+2=18,继续csse1:case2:s=18+3=21继续defaults=21+5=26。当i=4,则switch(4)执行default s=26+5=31。
当i=5循环结束。
最终s=31。
2.【答案】B本题考点:小写转大写减32,大写转小写加32。
【解析】每次循环执行输出b[k]- 'a'+'A。相当减32,即将所有字符小写转大写。
3.【答案】B,
【解析】本题考点:没有遇到break时继续向下执行,遇到break就结束switch语句。
第1次循环:当a=123456,b=a%10,则b=6,a=a/10=12345。switch(6)执行default:输出6,然后b自加为7,继续执行case1:case2:输出7,然后b自加为8。break结束switch语句。
第2次循环:当a=12345,b=a%10,则b=5,a=a/10=1234。switch(5)执行default:输出5,然后b自加为6,继续执行case1:case2:输出6,然后b自加为7。break结束switch语句。
第3次循环:当a=1234,b=a%10,则b=4,a=a/10=123。switch(4)执行case4:输出4,b自加为5。结束switch语句。
第4次循环:当a=123,b=a%10,则b=3,a=a/10=12。switch(3) 执行case3:输出3,b自加为4。break结束switch语句。
第5次循环:当a=12,b=a%10,则b=2,a=a/10=1。switch(2) 执行case2:输出2,b自加为3。break结束switch语句。
第6次循环:当a=1,b=a%10,则b=1,a=a/10=0。switch(1) 执行case1:case2:输出1,b自加为2。break结束switch语句。
第7次循环:当a=0,while(a)为假循环结束。
固答案为B选项:67564321
4.【答案】C
【解析】当i为奇数if(i%2==0)为假,执行else输出b+i,当i为偶数,if(i%2==0)为真执行输出a+i,所以本题当i为1、3、5时分别输出’A’+1, ’A’+3, ’A’+5,当i为2、4时输出’0’+2、’0’+4。故本题答案为C选项B2D4F
5.【答案】A
【解析】a++后a变为’6’。a-'5’+255==1+255=256,b=a-'5’=1。即A选项。
6.【答案】A
【解析】A选项i++的加号在后,每次循环都是减去i加1之前的值。即减去0+1+2+…+10。B选项++i的加号在前,每次循环都是减去i加1之后的值。即减去1+2+…+11。C选项i<>10语法错误。D选项由于当i=10时i<10为假,循环结束,最终减去的是1+2+…+9。答案为A选项。
7.【答案】B
【解析】假设a为任意值代入运算即可。假设a=5,则!5等于0为真。A选项a为真;B选项!0为1,那么5等于1为假;C选项5>0||5<0为真;D选项5不等于0为真。所以B选项与( !a== 0 ) 的逻辑值不等价。
8.【答案】A
【解析】考点:if只管一个语句或一个复合语句。y
9.【答案】A
【解析】考点:逻辑运算短路现象,即:逻辑与左边为假则右边不再执行,逻辑或左边为真则右边不再执行。进入if后++a等于1为真,右边都不执行,所以b和c的值不变。所以答案为A 。
10.【答案】A
【解析】
第1次,当c1='0',c2='9',c1
第2次,当c1='1',c2='8',c1
第3次,当c1='2,c2='7',c1
第4次,当c1='3,c2='6',c1
第5次,当c1='4,c2='5',c1
第6次,当c1='5,c2='4',c1
11.【答案】C
【解析】A选项:语法错误,C语言不存在OR。B选项:’A’>=c的值只能为1或0,那么1或0一定小于’Z’,固B选项为假。C选项:c为大写字母,那么定大于等于’A’并且小于等于’Z’。D选项:同A语法错误。所以选择C选项。
12.【答案】C
【解析】A选项s从1开始加到10。B选项从1开始加到10。C选项当第一次循环时,i加到2之后,if(i<=10)为真执行break,结束循环,s只加了1。D选项虽然循环体为空语句,但s也是从1加到10。所以选择C选项。
13.【答案】A
【解析】考点:continue用法,跳过循环体continue之后的语句直接进行下一次循环条件的判定。
从键盘输入:13后data值为13。
第1次、当i=0,i<5为真,(i < data && i % 2)为假,(i > data&& i % 3 == 0)也为假,不执行continue。然后执行输出i的值为0。然后i++。
第2次、当i=1,i<5为真,(i < data && i % 2)为真。执行continue,跳过输出。直接执行i++。
第3次、当i=2,i<5为真,(i < data && i % 2)为假,(i > data&& i % 3 == 0)也为假,不执行continue。然后执行输出i的值为2。然后i++。
第4次、当i=3,i<5为真,(i < data && i % 2)为真。执行continue,跳过输出。直接执行i++。
第5次、当i=4,i<5为真,(i < data && i % 2)为假,(i > data&& i % 3 == 0)也为假,不执行continue。然后执行输出i的值为4。然后i++。
第6次、当i=5,i<5为假,循环结束。
所以选择A选项。
14.【答案】D
【解析】考点:逻辑运算短路现象,即:逻辑与左边为假则右边不再执行,逻辑或左边为真则右边不再执行。进入if后a--等于1为真,右边都不执行,所以b和c的值不变。所以答案为D 。
15.【答案】C
【解析】考点:同上,逻辑运算短路现象。
A选项++a等于1为真,不短路,要执行++b。B选项a++等于0为假,不短路,要执行b++。C选项a++等于0为假,短路,不执行b++。D选项a++等于0为假,不短路,要执行++b。所以C选项没有使a和b都加1。
16.【答案】C
【解析】
第1次、当a=7,b=0。执行循环体,{b+= a;a-=1;}b变为7,a变为6。然后再执行while(a--),a变为5。
第2次、当a=5,b=7。执行循环体,{b+= a;a-=1;}b变为12,a变为4。然后再执行while(a--),a变为3。
第3次、当a=3,b=12。执行循环体,{b+= a;a-=1;}b变为15,a变为2。然后再执行while(a--),a变为1。
第4次、当a=1,b=15。执行循环体,{b+= a;a-=1;}b变为16,a变为0。然后再执行while(a--)为假循环结束,且a变为-1。
最后输出b和a的值分别为16和-1,即C选项。
17.【答案】A
【解析】考点:continue和break用法,continue跳过循环体continue之后的语句直接进行下一次循环条。break结束循环。
第1次、当a=1,b=1;while(1)为真,x读入-1,小于0,if(x<0)为真执行b*=x,b变为-1。然后continue,执行一次循环。
第2次、当a=1,b=-1; while(1)为真,x读入-2,小于0,if(x<0)为真执行b*=x,b变为2。然后continue,执行一次循环。
第3次、当a=1,b=2; while(1)为真,x读入0,两个if都为假,则直接执行输出a和b的值。
第4次、当a=1,b=2; while(1)为真,x读入1,if(x>0)为真,执行break,结束循环。
所以答案为A。
18.【答案】D
【解析】考点:continue用法,跳过循环体continue之后的语句直接进行下一次循环条件的判定。
从键盘输入:3即data值为3。
当i为0、1、2时都执行continue,直接进入下次循环判定,即i++.
当i=3时,执行输出i。并且在%d后面有一个减号要原样输出。所以是3-。
当i=4时,执行输出i。4-。
当i=5时,i<5为假,循环结束。
所以正确选项为D。
19.【答案】C
【解析】++a等于11,b++等于11;同时a变为11,b变为12。所以if(++a==b++)为真,执行输出T。然后再执行输出a和b的值。所以选择C选项。
20.【答案】C
判断循环体里面每一个语句的作用即可。pai+=t可以看出pai是和,t是每一项。s=-s可以看出s的值在1和-1二者来回变化。t的值为s/n,得到t一项为正,下一项则为负。然后分母n初始值为1并每次加2,即n为奇数。从这几条可以得到C选项符合上述描述。
21.【答案】C
【解析】本题考点:没有遇到break时继续向下执行,遇到break就结束switch语句。
第1次循环:当a=123456,b=a%10,则b=6,a=a/10=12345。switch(6)执行default:输出6,然后b自加为7,继续执行case1: break结束switch语句。
第2次循环:当a=12345,b=a%10,则b=5,a=a/10=1234。switch(5)执行case5:输出5, switch语句结束。
第3次循环:当a=1234,b=a%10,则b=4,a=a/10=123。switch(4)执行case4:输出4,b自加为5。继续执行case5:输出5, switch语句结束。
第4次循环:当a=123,b=a%10,则b=3,a=a/10=12。switch(3) 执行case3:输出3,b自加为4。执行case4:输出4,b自加为5。执行case5:输出5,switch语句结束。
第5次循环:当a=12,b=a%10,则b=2,a=a/10=1。switch(2) 执行case2:输出2, break结束switch语句。
第6次循环:当a=1,b=a%10,则b=1,a=a/10=0。switch(1) 执行case1: break结束switch语句。
第7次循环:当a=0,while(a)为假循环结束。
所以答案为B选项:65453452
22.【答案】A
【解析】do-while和while的异同点。
不论是do-while或while只有while语句中的表达式为假(非0)即要结束循环,A选项正确,C选项错。do-while是先执行循环体再判断while真假,while是选项判断真假再根据情况来是否执行循环体,B选项错。所有循环不是一定要用break结束,D选项错。
23.【答案】C
【解析】若while里面语句条件为s>1000,那么第一次循环时候s=1大于1000即为假值,不会再进行循环,这样得不到题目要求的结果。所以应该改成s<=1000,这样一旦当s的值第一次大于1000的时候循环才会结束。
24.【答案】B
【解析】当i为奇数时,i%2等于1。当i为偶数时,i%2等于0。所以当i=0输出字符9,当i=1输出字符8,当i=2输出字符9,当i=3输出字符8,当i=4输出字符9。当i=5循环结束。所以选择B。
25.【答案】B
第1次、当m=128,n=256,k=100,while(n/k>m/k)即while(2>1)为真,执行循环体,n%=k,n变56,m%=k,m变为28,k/=10,k变为10。
第2次、当m=28,n=56,k=10, while(n/k>m/k)即while(5>2)为真,执行循环体,n%=k,n变6,m%=k,m变为8,k/=10,k变为1。
第3次、当m=8,n=6,k=1, while(n/k>m/k)即while(6>8)为假,循环结束。
然后执行输出n的值为6。所以选择B。
26.【答案】B
【解析】if ( c>='a' && c<='z' ) 表示当c为小写字母的时候为真。c=c-'a’+’A’,减97然后加65,即小写变大写减32。所以本题从键盘读入字符的时候每次循环都要把小写变大写然后再执行输出++c。即变为大写然后加1输出。当遇到#时,#不等于#为假结束循环,不会输出#号。所以选择B选项。
27.【答案】B
【解析】考察分隔符(空格、回国,Tab)也是字符。c%是控制字符输入与输出的格式,当输入分隔符也会被读取,在输入用%c和getchar的时候不能用分隔符。所以选择B。
28.【答案】A
【解析】’\72’是转义字符,转义字符本质上是1个字符。
29.【答案】B
【解析】三个if的嵌套,其实就是只有三个if都为真时才会执行输出。本题在1---100的范围内找x符合加1是2的倍数,加2是3的倍数,加3是7的倍数。这样的数字一共有两个即25和67。本题输出的是上述两个值加3。
30.【答案】A
【解析】条件表达式:?前面为真执行:前面的表达式,?前面为假执行:后面表达式;并且运算方向为从右到左。本题可以加个括号: w < x ? w : (z < y ? z : x)先判断z
31.【答案】B
【解析】
若两个if都为真,那每次都是把比较小赋值给a,则a是最小值。
若两个if都为假,那么a就是三个里面最小的。
若第一个if为真,那么把较小的给a, 第二个if为假,则也是最小值。
若第一个if为假,说明a小,然后第二个if为真,说明c比a还要小,把c赋值给a,即a也是最小值。
所以选择B选项。
32.【答案】B
【解析】逻辑运算短路现象,即:逻辑与左边为假则右边不再执行,逻辑或左边为真则右边不再执行。
A选项a的值为0,那么a++等于0 ,为假,逻辑或,不短路要执行++b,b的值加1。
B选项a的值为0,那么a++等于0 ,为假,逻辑与运算则不再执行b++,b不变。
C选项a的值为0,那么++a等于1 ,为真,逻辑与,不短路要执行b++,b的值加1。
D选项a的值为0,那么+a(正a)等于0,为假,逻辑或,不短路要执行++b,b的值加1。
所以选择B。
33.【答案】A
【解析】比较两个字符串的大小要用字符串比较函数:strcmp()。B选项strcpy是字符串复制函数。CD两个选项的方式不能操作字符串,字符串操作要用函数。所以选择A。
34.【答案】B
【解析】考查else和if配对的问题,else总与其之前最近且未曾配对的if进行配对。本题配对情况如下图:第一个if是单独的语句。红色的if –else是属于第一个else的语句。
割…………
if (s<30)为真,m变为9。
if (s<40)为真,m变为8,不再执行下面的else。
所以选择B选项。
35.【答案】B
【解析】break在循环的应用,只要执行break,则停止break所在循环。tx
当i=0时,if(i<=5)为真,执行break,循环结束。i的值不会变,还是0。选择B选项。
36.【答案】D
【解析】考点:continue用法,跳过循环体continue之后的语句直接进行下一次循环条件的判定。break用法是结束循环。
第1次、当i=1,a=7,i<=3为真,if(a>13)为假,不执行break。if(a%2)为真,执行a+=3,a变为10,然后执行continue,即执行i++。i变为2。
第2次、当i=2,a=10,i<=3为真,if(a>13)为假,不执行break。if(a%2)为假,执行a+=4,a=14,然后执行i++,i变为3。
第3次、当i=3,a=14,i<=3为真,if(a>13)为真,执行break,结束循环。
所以i为3,a为14。选择D选项。
37.【答案】C
【解析】循环嵌套,外层循环一次,内层循环一轮。
第一次、当i=3时,内层第1个for循环j从1到3,执行3次输出*号。内层第2个循环j等于1,3-i等于0,是j<0为假,不执行输出。
第二次、当i=2时,内层第1个for循环j从1到2,执行2次输出*号。内层第2个循环j等于1,3-i等于1,j从1到1为真,,执行1次输出#号。
第三次、当i=3时,内层第1个for循环j从1到1,执行1次输出*号。内层第2个循环j等于1,3-i等于2,j从1到2为真,执行2次输出#号。
所以三次循环分别输出*** **# *##。选择C选项。
38.【答案】C
【解析】本题考点:没有遇到break时继续向下执行,遇到break就结束switch语句。
第一次、给c读入’2’,switch('2’-’2’),即switch(0),执行case 0: 继续case1:输出c+4即字符6。继续case2:输出c+4即字符6。然后break结束switch语句。
第二次、给c读入’4’,switch('4’-’2’),即switch(2),执行case2:输出c+4即字符8。然后break结束switch语句。
第三次、给c读入’7’,switch('7’-’2’),即switch(5),执行default:输出c+2即字符9。
第四次、给c读入’3’,switch('3’-’2’),即switch(1),执行case1:输出c+4即字符7。继续case2:输出c+4即字符7。然后break结束switch语句。
所以输出668977。选择C选项。
39.【答案】D
【解析】fun函数里面if (ch>='A' && ch<='Z') ch = ch - 'A' +'a';功能是把大写字母变小写。所以每次调用fun函数都把大写变小写字母。非大写字母不做处理。所以选择D选项。
40.【答案】D
【解析】
第1次、当i=1,k=0,i<6为真,switch(1%3),执行case1:k变为1。然后break跳出switch,再执行i+=1,i变为2。
第2次、当i=2,k=0,i<6为真,switch(2%3),执行case12:k变为2。然后continue继续下一次循环的判定。
第3次、i还是2,就继续执行case2:然后再continue继续下一次循环的判定。
i的值小永远为2,一直路过i+=1不执行进行下一次循环。就构成死循环。所以选择D选项。
41.【答案】A
【解析】第一次当i=0,i<3为真,执行switch(1%3),执行case0:a变为1。然后break结束switch语句。再执行if(i%3==0)为真,执行break结束循环。最终只有a的值增加1,其他变量没变。所以选择A选项。
42.【答案】A
【解析】表达式只要是任意合法的表达式即可。所以A选项正确。
43.【答案】A
【解析】BCD三个选项是三个转义字符,因为转变了含义,所以输出后并不是原来字符。A选项并不属于转义字符,输出仍是帮字母。
44.【答案】D
【解析】题干中i定义为整形变量,那么两个整数运算得到结果是整数。所当i等于2、2、3、4、5、6、7、8、9……的时候,1/i结果都只是0。这样如果是D选项并不能求出式子结果。应该把D选项改成sun+=1.0/i;
45.【答案】B
【解析】putchar是输出字符并且不带引号,本题是输出’9’-i。
当i=0,’9’-0是’9’。
当i=1,’9’-0是’8’。
当i=2,’9’-0是’7’。
当i=3,’9’-0是’6’。
当i=4,’9’-0是’5’。
当i=5,i<5为假循环结束。
46.【答案】B
【解析】考查逻辑运算。小写字母即大于等于’a’并且小于等于’z’。
A选项,只是数学中的表达方式,先算’a’<=c,不管c是什么字符,’a’<=c的值不是1就是0。那再算1<=’z’或0<=’z’都为真。
B选项,&&表示逻辑与,即并且的意思。
C选项,是或者,要排除。
D选项,在C语言中并没有AND用法。
47.【答案】A
【解析】闰年要年份是4的整数倍,并且年份为整百的要是400的整数倍。
A选项,第一个if表示400整数倍返回1。else if若year是1900那么if不执行,也就是说最后面一对if…else都不执行,这样程序并没有判断出1900是否为闰年。所以选择A选项。
48.【答案】A
【解析】考查else语句。第一个if(x>10)为真,执行输出1。后面的else if都不执行。
49.【答案】C
【解析】十六进制转义字符的x要小写。并且不带前导0。所以选择C选项。
50.【答案】D
【解析】
第一次:当i=1,a=6。第一个if为真,执行break,结束循环。a和i的值没有变。然后输出i和a的值。
51.【答案】A
【解析】
第1次:当i=0;data=5;if为真,执行continue,即直接执行i++;i变为1。
第2次:当i=1;data=5;if为真,执行continue,即直接执行i++;i变为2。
第3次:当i=2;data=5;if为真,执行continue,即直接执行i++;i变为3。
第4次:当i=3;data=5;if为真,执行continue,即直接执行i++;i变为4。
第5次:当i=4;data=5;if为真,执行continue,即直接执行i++;i变为5。
第6次:当i=5;data=5;if为真,执行continue,即直接执行i++;i变为6。
第7次:当i=6;data=5;if为假,不行执行continue,执行printf(“%d”,i);输出6。然后i++;i变7。
第8次:当i=7;data=5;if为假,不行执行continue,执行printf(“%d”,i);输出7。然后i++;i变8。
第9次:当i=8;data=5;i<8为假循环结束。
52.【答案】C
【解析】’c’的ASCII为99。
第1次:当i=0;c=’0’;if为假,不执行continue,执行输出prinft(“%d”,i),即输出0,然后i++,变为1。
后面几次循环同样不会执行continue,即执行输出对应i的值。
当i=5时循环结束。
所以本题输出的是0,1,2,3,4,选择。
53.【答案】A
【解析】
第1次:a=-2,b=2。++a为-1,--b为1。所以++a&&--b为真,执行输出-1,1,。
第2次:a=-1,b=1。++a为0,短路现象,++a&&--b为假,循环结束。
所以选择A。
54.【答案】A
【解析】printf输出字符串是输出对应地址指向的字符串。“12345678”+4指向的字符串是”5678”。B+8指向的字符串是”year”。所以选择A。
55.【答案】D
【解析】
第1次:当i=2,data=10;data%i=0;if为假,执行else ,continue ,即直接执行i++;i变为3。
第2次:当i=3,data=10;data%i=1;if为真,执行printf(),输出3-。然后i++,i变为4。
第3次:当i=4,data=10;data%i=2; if为真,执行printf(),输出4-。然后i++,i变为5。
第4次:当i=5,data=10;data%i=0;if为假,执行else ,continue ,即直接执行i++;i变为6。
第5次:当i=6,i<6为假循环结束。
本题输出值为3-4-。
56.【答案】D
【解析】第1个if假,执行嵌套外层的else,即第2个else,然后执行内嵌的第二组if—else,即第3个if,z
57.【答案】B
【解析】
A选项,a/b=1,为真。!(1)非真,即为假。
B选项,b/a=0,为假。!(0)非假,即为真。
C选项,!b为假,!a也为假,所以!b||!a。为假。
D选项,!a为假,短路现象,&&右边不执行,整体为假。
58.【答案】D
data为10,i的值循环时从0到9。所以循环体里面if每次都为假。即每次执行else,输出i的值。即从0到9全部输出。
59.【答案】D
【解析】本题考查转义字符。十六进制转义字符x要小写并不带前导0,A、C两个选项错。八进制转义字符里是八进制数,八进制数最大的数字是7,B选项错。
60.【答案】A
【解析】
第1次:ch=’M’,ch--,ch变为’L’,然后输出。
第2次:ch=’L’,ch--,ch变为’K’,然后输出。
第3次:ch=’K’,while(ch!=’K’)为假,循环结束。
61.【答案】B
【解析】条件表达式,运算法则是真前假后。k=x
A选项表达x
B选项&&即为且的意思。
C选项表达当x
D选项表达当x
62.【答案】A
【解析】A选项total初值为1,这样实际求和为1+1+2+3+4+5。
63.【答案】B
【解析】
第1次:ch=’1’,while()为真,执行输出ch-'0’,即1,然后ch++,ch变为’2’。
第2次:ch=’2’,while()为真,执行输出ch-'0’,即2,然后ch++,ch变为’3’。
第3次:ch=’3’,while()为真,执行输出ch-'0’,即3,然后ch++,ch变为’4’。
…………
第8次:ch=’8’,while()为真,执行输出ch-'0’,即8,然后ch++,ch变为’9’。
第9次:ch=’9’,while()为假循环结束。
64.【答案】B
【解析】if()、while()括号里面表达式可以是任意合法的数值及表达式。包含常量、变量。
65.【答案】A
【解析】
第1次:data=3,i=0;进入循环,if为假,不执行break,直接执行输出i,即0。然后i++,i变为1。
第2次:data=3,i=1;进入循环,if为假,不执行break,直接执行输出i,即1。然后i++,i变为2。
第3次:data=3,i=2进入循环,if为假,不执行break,直接执行输出i,即2。然后i++,i变为3。
第4次:data=3,i=3;进入循环,if为假,不执行break,直接执行输出i,即3。然后i++,i变为4。
第5次:data=3,i=4;进入循环,if为真,执行break,结束循环。
本题只要i>data为假就不执行break.一旦为真执break,结束循环。
66.【答案】C
【解析】三个if并列关系,相互不影响。
第1个if,’\0’为空值,即等于0, if为真,输出1。
第2个if,”0”是字符串与0不相等,if为假,不执行输出。
第3个if,”A”是字符串与字符’0’不相等,if为假,不执行输出。
本题只有第1个输出了字符1。
67.【答案】D
【解析】考查字符的算术运算。A选项值为9-48=-39。B选项65+32=97,是a的ASCII码值。C选项97-32=65,是A的ASCII码。D选项9+’0’=9+48=57为9的ASCII值。
68.【答案】A
【解析】%d表示整数形式。’A’和’Y’的ASCII码为65和89。
69.【答案】C
【解析】
第1次:i=0,进入循环,i%3==0,if为假,执行else ,输出字符’A’+0,即A。然后i++,i变为1。
第2次:i=1,进入循环,i%3==1,if为真,执行输出字符’3’+1,即4。然后i++,i变为2。
第3次:i=2,进入循环,i%3==2,if为真,执行输出字符’3’+2,即5。然后i++,i变为3。
第4次:i=3,进入循环,i%3==0,if为假,执行else ,输出字符’A’+3,即D。然后i++,i变为4。
第5次:i=4,进入循环,i%3==1,if为真,执行输出字符’3’+4,即7。然后i++,i变为5。
第6次:i=5,进入循环,i%3==2,if为真,执行输出字符’3’+5,即8。然后i++,i变为6。
第6次:i=6,i<6为假,结束循环。输出A45D78。
70.【答案】D
【解析】
第1次:i=0,进入循环,输出’Z’-0,即Z。然后i++;i变为1。
第2次:i=1,进入循环,输出’Z’-1,即Y。然后i++;i变为2。
…………
第5次:i=4,进入循环,输出’Z’-0,即V。然后i++;i变为5。
第6次:i=5,i<5为假结束循环。
本题每次循环输出的字符都减1。
71.【答案】D
【解析】scanf()给data赋值’B’,即data=66。
第1次:当i=2, data=66。data%i=0,if为假,不执行continue,执行输出i的值为2。然后i++,i变为3。
第2次:当i=3, data=66。data%i=0,if为假,不执行continue,执行输出i的值为3。然后i++,i变为4。
第3次:当i=4, data=66。data%i=2,if为真,执行continue,即直接执行for里面i++,i变为5。
第4次:当i=5, data=66。data%i=1,if为真,执行continue,即直接执行for里面i++,i变为6。
第5次:当i=6, data=66。data%i=0,if为假,不执行continue,执行输出i的值为6。然后i++,i变为7。
第6次:当i=7, data=66。data%i=3,if为真,执行continue,即直接执行for里面i++,i变为8。
第7次:当i=8, data=66。data%i=2,if为真,执行continue,即直接执行for里面i++,i变为9。
第8次:当i=9 data=66。data%i=3,if为真,执行continue,即直接执行for里面i++,i变为10。
第9次:当i=10,i<10为假,结束循环。
本题即只有当data%i为0时执行输出。
72.【答案】A
【解析】加号在后,先用后加,a++的值为0, &&左边为0即短路现象,b++不执行。if(a++&&b++)为假,执行else输出F。然后a=b++,因为加号在后所以b++为1,即a=1。然后b加个1变为2。最后一行输出a、b的值分别是1和2。所以答案是A选项。
73.【答案】C
【解析】题目表达含义是当k为大于0的偶数时,四个选项哪个为真。用代入法。假设k=2。
A选项:逻辑或(||),k>0为真,短路现象,右边不需要运算,这样不论k是奇数还是偶数只要k大于0为真,排除A。
B选项:赋值号左边只能是变量。k%2=0语法错误。
C选项:k%2!=1,k对2求余为0,1不等于0为假。
D选项:用的逻辑或(||),与A相同。
74.【答案】C
【解析】
第1次:do进入循环,scanf给x赋值-1。x=-1。x>0为假,t=0.switch(0),执行case 0:break,结束switch。然后执行z+=x,z=-1;
第2次: while(-1)为真,进入循环,scanf给x赋值1。x=1。x>0为真,t=1,switch(1),执行case 1:y+=x;y=1;然后执行continue,即直接进行下一次循环。;
第3次: while(1)为真,进入循环,scanf给x赋值-2。x=-2。x>0为假,t=0,switch(0),执行case 0:break,结束switch。然后执行z+=x,z=-1+(-2)=-3;
第4次: while(-2)为真,进入循环,scanf给x赋值2。x=2。x>0为真,t=1,switch(1),执行case 1:y+=x;y=1+2=3;然后执行continue,即直接进行下一次循环。;
第5次: while(2)为真,进入循环,scanf给x赋值0。x=0。x>0为假,t=0,switch(0),执行case 0:break,结束switch。然后执行z+=x,z=-3+0;
第6次: while(0)为假,循环结束。
最后输出y和的值分别为3和-3。
75.【答案】C
【解析】if(b[k]
76.【答案】A
【解析】
第1次:i=0,sum=1。do进入循环sum+=i++。加号在后,先用后加。sum=1+0=1。然后i变为1。
第2次:i=1,sum=1。while(i<6)为真,进入循环sum+=i++。加号在后,先用后加。sum=1+1=2。然后i变为2。
……
……
第6次:i=5,sum=11。while(i<6)为真,进入循环sum+=i++。加号在后,先用后加。sum=11+5=16。然后i变为6。
第7次:i=6,sum=16。while(i<6)为假,结束循环。
77.【答案】A
【解析】先执行k=2,然后再执行k==0为假,循环结束。不执行循环体,即执行0次。
78.【答案】C
【解析】
C选项0
79.【答案】B
【解析】
第1次:a=1,减号在后,a—值为1,即为真,由于执行了a--,a变为0。然后执行循环体b--,b变为0;
第2次:a=0,减号在后,a—值为0,即为假,循环结束。由于执行了a--,a变为-1。
输出a、b的值为-1和0。
80.【答案】A
【解析】m1函数功能是返回较小值。m2函数功能是返回较大值。fun函数功能是返回两数之和。先执行m1(x,y)返回2,再执行m2(y,z)返回3。然后再执行fun(2,3)返回5。
81.【答案】C
【解析】
第1次:当a=0,b=0;进入循环。if(a%2==0)为真,执行continue,即直接执行a++。a变为1。
第2次:当a=1,b=0;进入循环。if(a%2==0)为假,不执行continue,执行b+=a,b变为1;然后执行break,循环结束。
最后执行输出b的值为1。
82.【答案】A
第1次:a=123456,while(a)为真,执行循环体。b=a%10=6,a=a/10=12345。switch(6),执行default ,输出b++。加号在后,先用后加,所以输出6。然后b变为7。继续执行case 1:continue,直接进入下一次循环。
第2次:a=12345,while(a)为真,执行循环体。b=a%10=5,a=a/10=1234。switch(5),执行default ,输出b++。加号在后,先用后加,所以输出5。然后b变为6。继续执行case 1:continue,直接进入下一次循环。
第3次:a=1234,while(a)为真,执行循环体。b=a%10=4,a=a/10=123。switch(4),执行case 4:,输出b++。加号在后,先用后加,所以输出4。然后b变为5。然后执行continue,直接进入下一次循环。
第4次:a=123,while(a)为真,执行循环体。b=a%10=3,a=a/10=12。switch(3),执行case 3:,输出b++。加号在后,先用后加,所以输出3。然后b变为4。继续执行case 4:,输出b++。加号在后,先用后加,所以输出4。然后执行continue,直接进入下一次循环。
第5次:a=12,while(a)为真,执行循环体。b=a%10=2,a=a/10=1。switch(2),执行case 2:,输出b++。加号在后,先用后加,所以输出2。然后b变为3。然后执行continue,直接进入下一次循环。
第6次:a=1,while(a)为真,执行循环体。b=a%10=1,a=a/10=0。switch(1),执行case continue,直接进入下一次循环。
第7次:a=0,while(a)为假,循环结束。
最终结果为:654342
83.【答案】A
【解析】
当i为偶数if为假,执行输出b+i。当i为奇数if为真,执行else 输出a+i。
所以当i=0,输出’A’+0,即A。
当i=1,输出’3’+1,即4。
当i=2,输出’A’+2,即C。
当i=3,输出’3’+3,即6。
当i=4,输出’A’+4,即E。
当i=5,输出’3’+5,即8。
当i=6,循环结束。
84.【答案】A
【解析】
B选项:fac初值为0 ,每次相乘结果都是0。
C选项:do……while循环,每次循环先执行了k++。最后一次当k=5的时候进入循环,k变成6。最终结果是6!。
D选项:第一次循环给fac乘0,后面再乘结果还是0。
85.【答案】A
【解析】else总与其之前最近且未曾配对的if进行配对。
A选项第2个if和else是一对。本题结构是if() { if()…else…}。当math>=60的时候第2个if为假。不会执行任何语句。
86.【答案】C
【解析】
第1次:a=-1,b=2。a++==-1为真,b--==-2为真。同时a变为0,b变为1。执行循环体输出a、b值为0,1。
第2次:a=0,b=1。a++==0为假,短路现象b—不执行,a变为1。循环结束。
然后再输出a、b的值为1和1。
最终结果是0,1,1,1。
87.【答案】B
【解析】当i%3=0时if为假,执行输出b+i。当i%3不为0时if为真,执行else 输出a+i。
当i=0时输出b+i,即字符a
当i=1时输出a+i,即字符1
当i=2时输出a+i,即字符2
当i=3时输出b+i,即字符d
当i=4时i<4为假,循环结束。
88.【答案】A
【解析】
第1次:a=0,b=0。进入循环。if(a%2==0)为真,执行continue,即直接执行a++,a变为1。
第2次:a=1,b=0。进入循环。if(a%2==0)为假,不执行continue。执行b+=a,b=1。然后执行continue,即直接执行a++,a变为2。
第3次:a=2,b=1。进入循环。if(a%2==0)为真,执行continue,即直接执行a++,a变为3。
第4次:a=3,b=1。进入循环。if(a%2==0)为假,不执行continue。执行b+=a,b=4。然后执行continue,即直接执行a++,a变为4。
第5次:a=4,b=4。进入循环。if(a%2==0)为真,执行continue,即直接执行a++,a变为5。
第4次:a=5,b=4。进入循环。if(a%2==0)为假,不执行continue。执行b+=a,b=9。然后执行continue,即直接执行a++,a变为6。
第5次:a=6,b=9。进入循环。if(a%2==0)为真,执行continue,即直接执行a++,a变为7。
第6次:a=7,b=4。a<7为假,循环结束。
输出b的值为7。
89.【答案】C
【解析】
A选项:省略i++,i永远为0,即一直小于10,即永远为真。构成死循环。
B、D两个选项for里面第2个表达式缺省会引起死循环。
C 选项缺省第1个表达式不会引起死循环。
90.【答案】D
【解析】
第1次:ch=’A’,while为真,执行输出ch-'A’,即0。然后ch++,ch变为'B’。
第2次:ch=’B’,while为真,执行输出ch-'A’,即1。然后ch++,ch变为'C’。
第3次:ch=’C’,while为真,执行输出ch-'A’,即2。然后ch++,ch变为'D’。
第4次:ch=’D’,while为假,结束循环。
91.【答案】A
【解析】主要考查switch中没有break就要继续执行下面case。
s是首地址。
第1次:++s指向字符1,while()为真。*s-'0’=1, switch(1),执行case 1:输出*s+1即字符2。然后break。结束switch。随后下一次循环。
第2次:++s指向字符2,while()为真。*s-'0’=2, switch(2),执行case 2:输出*s+1即字符3。然后break。结束switch。随后下一次循环。
第3次:++s指向字符3,while()为真。*s-'0’=3, switch(3),执行case 3:输出*s+1即字符4。继续执行default :输出*s+1还是字符4。随后一下次循环。
第4次:++s指向字符4,while()为真。*s-'0’=4, switch(4),没有找到对应case,那执行default :输出*s+1还是字符5。
第5次:++s指向字符空值,while()为假,循环结束。
92.【答案】A
【解析】
第1次:每次循环都是把i赋值给a.然后i自加1。最后一次循环时i=10,然后a=10,随后i自加1变为11。
最后输出i和a的值为11和10。
93.【答案】D
【解析】
第1次:ch=’M’,while()为真,执行输出ch,即M字符。然后ch--,ch变为’L’。
第2次:ch=’L ’,while()为真,执行输出ch,即L字符。然后ch--,ch变为’K’。
第3次:ch=’K’,K!=K 为假,即while()为假循环结束。
94.【答案】C
【解析】
第1次:i=0,c接受A字符。输出(’A’-'A’+5)%26+’a’即’a’+5=f。
第2次:i=1,c接受P字符。输出('P’+5-'A’+)%26+’a’即’a’+16=u。
第3次:i=2,c接受E字符。输出('E’+5-'A’)%26+’a’即’a’+9=j。
第4次:i=3,i<3为假,结束循环。
95.【答案】C
【解析】C选项if(x=y),给x赋值,变为0,if为假,不执行if后面语句,y不会变,为原值0。
96.【答案】B
【解析】i初值为4,先执行for里面第一个表达式,即输出i的初值为4。然后执行for第2个表达式i<2为假,循环结束。
97.【答案】B
【解析】if()、while()里面的表达式可以任意合法的表达式。
98.【答案】D
【解析】
第1次:i=0。输出’K’-i,即字符K。然后i++,i变为1。
第2次:i=1。输出’K’-i,即字符J。然后i++,i变为2。
第3次:i=2。输出’K’-i,即字符L。然后i++,i变为3。
第4次:i=3。i<3为假,循环结束。
99.【答案】A
【解析】第1个输入字符为字符a,进行第1次循环判定时’a’==’e’为假,循环直接结束,并没有执行循环体输出语句。
100.【答案】A
【解析】while语句要先进行循环条件的判定,若第1次判定为假,循环体一次也不执行。
101.【答案】D
【解析】
第1次:i=0,data=5进入循环,if为假,不执行break,然后输出i的值为0。
第2次:i=0,data=5进入循环,if为假,不执行break,然后输出i的值为1。
第3次:i=0,data=5进入循环,if为假,不执行break,然后输出i的值为2。
第4次:i=0,data=5进入循环,if为假,不执行break,然后输出i的值为3。
第5次:i=0,data=5进入循环,if为假,不执行break,然后输出i的值为4。
第5次:i=0,data=5进入循环,if为真,执行break结束循环。
102.【答案】A
【解析】本题为求和。I从1开始,每次在循环体里面自加1一次,在for第3个表达式自加一次。即每次i的值加2。可以判定为奇数相加。
f每次都正负1相间的变化。然后求和时每次都乘f可以使用求和项正负相间的变化,所以本题选择A。
103.【答案】D
【解析】
a=0,a++加号在后,先用后加,a++=0。即第一个if(a++)为假,执行else输出F。由于执行了a++,所以a变为1。
然后面输出a,b的值为1,4。
104.【答案】C
【解析】
第1次:当i=9。Switch(i/10),i/10=0,执行case 0:m++;n++;break:m变为1,n变为1。结束switch.随后i++,i变为10。
第2次:当i=10。Switch(i/10),i/10=1,没有找到对应case,执行default:k++;n++; n变为2,k变为1。switch.结束随后i++,i变为11。
第2次:当i=11。Switch(i/10),i/10=1,没有找到对应case,执行default:k++;n++; n变为3,k变为2。switch.结束随后i++,i变为12。
第4次:当i=12。i<=11为假。循环结束。
最终m,n,k的值分别为1,3,2。
105.【答案】C
【解析】x=0x18是给x赋值。X为十六进制数,不为0。即if为真,执行输出T。由于if只管一个语句,对后面语句没影响。然后再执行输出F。
106.【答案】A
【解析】输入21,那么c接受字符2,d接受字符1。switch(c-'0’)即要执行case2:。进入case1:后又进入另一个switch(d%’0’),字符1的ASCII码为49,字符0为48。即switch(49%48),case1:printf(“#”)。输出#。由于没有break,继续执行case2:printf(“&”),输出&。结果为#&。
107.【答案】A
【解析】注意记住一些常见转义字符。\a响铃,\b退格,\r回车。A选项不存在。
108.【答案】C
【解析】循环嵌套。外层一次,内层一轮。
第1次:j=0,进入whlie循环,j++,j变为1。if(j==1)为真,执行continue,跳过continue后面内容,直接进行下一次循环。
第2次:j=1,进入whlie循环,j++,j变为2。if(j==1)为假,不执行continue。然后进入内层的for循环。
当i=0,if为假,不执行break。然后a=a*10+i=0。if(i<1)为真,执行b=a,b=0.
当i=1,if为假,不执行break。然后a=a*10+i=1。if(i<1)为假,不执行后面语句。
当i=2,if为假,执行break。内层循环结束。
第3次:j=2,,进入whlie循环,j++,j变为3。if(j==1)为假,不执行continue。然后进入内层的for循环。
当i=0,if为假,不执行break。然后a=a*10+i=10。if(i<1)为真,执行b=a,b=10
当i=1,if为假,不执行break。然后a=a*10+i=101。if(i<1)为假,不执行后面语句。
当i=2,if为假,执行break。内层循环结束。
第4次:j=3,while(j<3)为假,结束外层循环。
最后输出a,b值分别是101,10。
109.【答案】C
【解析】
运算优先级逻辑高于逻辑或,进入if相当于a++||(b++&&++c)后先执行a++加号在后,先用后加,a++为假,同时a变为1。然后执行后面b++&&++c,b++也为0,那么短路现象++c不再执行,c不变。(b++&&++c)即为假。由于b++执行,所以b变为1。由于逻辑或||两边都为假。所以if为假。执行else,输出a,c,b的值分别是1,0,1。
110.【答案】A
【解析】点到圆心的距离小于半径1。勾股定理,利用点的横纵坐标分别减去圆心的横纵坐标的平方与半径的平方相比较即可以判断点与圆的位置关系。即(x-2)*(x-2)+(y-1)*(y-1)<1在圆内,(x-2)*(x-2)+(y-1)*(y-1)=1在圆上。(x-2)*(x-2)+(y-1)*(y-1)>1在圆外。
111.【答案】A
【解析】条件表达式,运算规则是真前假后。问号前为当flag不等于0时为真选择冒号前,当flag为假执行冒号后。
112.【答案】C
【解析】三个if并列关系,相互不影响。
第1个if,’\0’为空值,即等于0, if为真,输出<1>OK。
第2个if,’0’是字符与0不相等,if为假,不执行输出。
第3个if,’z’>’A’为真,执行输出<3>OK。
选择C选项。
113.【答案】A
【解析】
Switch语句中可以不使用break和default。break可以在循环体和switch语句。break可以与case或default配对使用。
114.【答案】D
【解析】D 选项n<10,所以求结果为1+2+3+……+9。
115.【答案】C
【解析】
第1次:当i=1,a=6,进入循环。if(a<5)为假,不执行break。然后第2个if(a%2)也为假,不执行后面复合语句。再执行a=a+4。a变为10。然后i++,i变为2。
第2次:当i=2,a=10,进入循环。if(a<5)为假,不执行break。然后第2个if(a%2)也为假,不执行后面复合语句。再执行a=a+4。a变为14。然后i++,i变为3。
第3次:当i=3,a=14,进入循环。if(a<5)为假,不执行break。然后第2个if(a%2)也为假,不执行后面复合语句。再执行a=a+4。a变为18。然后i++,i变为4。
第4次:当i=4,a=18,i<=3为假。循环结束。
最后输出i和a的值为4和18。
116.【答案】A
【解析】略
117.【答案】B
【解析】字符串中有6个字符分别是\t、a、\01、8、b、c共6个字符。每次循环只要*s指向的字符不是空值(\0)就执行输出语句,输出一个*。一共会输出6个*。
118.【答案】A
【解析】c=getchar()!=’#’表示只要读入字符不是’#’就为真,为真即执行循环体。所以每次循环执行输出c++,加号在后,先用后加。所以答案为abcdefg。
119.【答案】A
【解析】switch语句中没有break就继续执行。
第1次:a=0,进入循环,b接受1,即b=1。switch(b) ,执行case 1:printf(“%d”,++b);输出2。然后再执行case2:printf(“%d”,++b),输出3。
第2次:a=1,进入循环,b接受2,即b=2。switch(b) ,执行case 2:printf(“%d”,++b);输出3。
第3次:a=2,进入循环,b接受3,即b=3。switch(b) ,执行default:printf(“%d”,++b);输出4。然后再执行case1:printf(“%d”,++b),输出5。然后再执行case2:printf(“%d”,++b),输出6。
120.【答案】C
【解析】C语言任意合法的表达式都可以是运算对象,用0表示假,非0表示真。但
逻辑运算结果1和0,分别表示真和假。
121.【答案】C
第1次:当a=-2,b=2;执行for(;a++,b--;),a++,b—为for的第2个表达式,同时也是逗号表达式,其值为b—的值,即2,为真。由于执行了a++,b--。a变为-1,b变为1。然后执行输出a、b值分别为-1,1。
第2次:当a=-1,b=1;执行for(;a++,b--;),a++,b—为for的第2个表达式,同时也是逗号表达式,其值为b—的值,即1,为真。由于执行了a++,b--。a变为0,b变为0。然后执行输出a、b值分别为0,0。
第3次:当a=0,b=0;执行for(;a++,b--;),a++,b—为for的第2个表达式,同时也是逗号表达式,其值为b—的值,即0,为假,结束循环。
122.【答案】B
【解析】本题y的值一直为0,y!=123一直为真。只要看右边x值变化就行。当x值为0、1、2、3条件为真执行循环。所以一共执行了4次。
123.【答案】B
【解析】(!x==0)表达含义是非x等于0,即x不等于0。B选项是x==1,与题目不等价。
124.【答案】A
A选项2个问题,第一sum初值为1,第二每次循环先将i自加1所以当最后一次循环i的值为n时,加的是n+1。所以A选项表示求和为1+1+2+……+n+n+1;
125.【答案】B
【解析】
第1次:a=0,进入循环,b接受1,即b=1。switch(b) ,执行case 1:printf(“%d”, b++);输出1,b变为2。然后再执行case2:printf(“%d”,b++),输2。
第2次:a=1,进入循环,b接受2,即b=2。switch(b) ,执行case 2:printf(“%d”, b++);输出2。
第3次:a=2,进入循环,b接受3,即b=3。switch(b) ,执行default:printf(“%d”, b++);输出3,b变为4,。然后再执行case1:printf(“%d”, b++),输出4,b变为5。然后再执行case2:printf(“%d”, b++),输出5。
126.【答案】A
【解析】if()表达式可以是任意合法表达式。
127.【答案】C
【解析】
进入if(),a++值为0,短路现象,b++不执行。由于执行了a++,a变为1。if为假执行else输出
128.【答案】C
【解析】
进入if(),++a值为1,b++值为1;同时a变成1,b变为2。if为真。执行输出1。然后执行最后一个输出a,b的值分别是1和2。
129.【答案】B
【解析】csae后面没有break要断续执行下面语句。
第1次:m=10247。进入循环,switch(m%10),即执行case 7:,继续执行后面case 9:m/=10,b++; m变为1024,b变为1。继续执行case 2: case 4: case 6: case 8:m/10;c++。m变为102,c变成1。
第2次:m=102。while(m!=0)为真,进入循环。switch(m%10),即执行case 2: case 4: case 6: case 8:m/10;c++。m变为10,c变为2。
第3次:m=10。while(m!=0)为真,进入循环。switch(m%10),即执行case 0:m/10;a++。m变为1,a变为1。
第4次:m=1。while(m!=0)为真,进入循环。switch(m%10),即执行case 1:m/10;b++。m变为0,b变为2。继续执行继续执行case 2: case 4: case 6: case 8:m/10;c++。m变为0,c变成3。
第5次:m=0。while(m!=0)为假。循环结束。
最终输出a,b,c的值为1,2,3。
130.【答案】A
【解析】条件表达式真前假后。
A选项先计算表达式++a,其值为1,短路现象,++b不执行。由此可确定(++a|| ++b)值为1,因此计算++c。
131.【答案】A
【解析】
while和for由于要先判定,若为假,则会一次也不执行循环体。do…while语句要先执行一次循环体,所以至少执行一次循环体。
132.【答案】C
【解析】
C选项等于字符'3’,转化为ASCII码为52。
133.【答案】A
【解析】’\141’是八进制转义字符。
134.【答案】C
【解析】进入if,a++值为0,即为假,短路现象,b++不执行。a变为1,b不变。为假执行else,输出FALSE。之后执行输出a,b值分别为1和1。
135.【答案】A
【解析】每次循环都m和n都在减小。可以排除BD。
假设m=9,n=3。代入后
外循环:m!=n为真。进入第一个内循环,
第1次while(m>n)为真,执行m=m-n=6;
第2次while(m>n)为真,执行m=m-n=3;
第3次为假,第一个内循环结束。
进入第二个内循环while(n>m)为假,内循环结束。
再次执行外循环while(m!=n)为假循环结束。最终m为3。是最大公约数,同时不是差值。