scanf("%d",&a);
}
printf("%d",max);
}
A、a==0
B、a
C、!
a==1
D、!
a
答案:
B
解答:
题目中说输入0结束循环。
它的另一个意思是输入的变量a的值不是0时就执行循环或者说a为真就执行循环,为假就结束循环。
所以条件是a!
=0或a
●答案Aa==0a为假,即等于0时,0==0,为真,执行循环体。
为真,即非0,则a==0的逻辑值为假。
结束循环。
总结:
a为假执行循环体。
为真,结束循环。
●答案C!
a==1非运算符!
优先级高于比较运算符==。
所以先计算!
a,然后再判断是否和1相等。
a为假时,!
a值是真,与1恒等,逻辑值为为真时,!
a值是假,与1不等,逻辑值为0.所以它的含义是a为假执行循环体。
为真,结束循环。
●答案D。
!
a的含义,是a为假执行循环体。
为真,结束循环。
题号:
13357
与下面程序段等价的是________。
for(n=100;n<=200;n++)
{if(n%3==0)continue;
printf("%4d",n);
}
A、for(n=100;n<=200;n++)if(n%3==0)printf("%4d",n);
B、for(n=100;(n%3)&&n<=200;n++)printf("%4d",n);
C、for(n=100;(n%3)||n<=200;n++)printf("%4d",n);
D、for(n=100;n<=200;n++)
{if(n%3)printf("%4d",n);
elsecontinue;
}
答案:
D
解答:
●程序的含义:
1)n=100;n<=200;n++。
含义是循环变量n的初值为100,终值为200,步长为1.
2)if(n%3==0)continue;含义是若n是3的倍数,则结束此次循环,进入下一次循环。
即后面的printf("%4d",n);不执行。
直接执行步长加1.
3)若n不是3的倍数,则执行printf("%4d",n);,即输出n的值。
且值占四列,右对齐。
输出100-200中所有不是3的倍数的数。
●看四个答案:
1)答案Aif(n%3==0)printf("%4d",n);的含义是n是3的倍数,则输出。
与源程序的题意不符。
2)答案B与关系表达式,两边的逻辑值均为1,结果才是真。
若有一个为假,结果为假。
(n%3)&&n<=200n%3为真,同时n<=200为真,则执行循环体,即输出变量n.n%3为真,说明n不是3的倍数时为真。
(n%3)&&n<=200若n%3为假,或n>200,则条件为假,结束循环。
所以,当n是3的倍数时,就结束。
即n=102时,102%3=0,为假,就结束循环。
不符合题意。
3)答案C(n%3)||n<=200;是或关系表达式。
有一个为真,结果为真。
全为假,结果为假。
n%3n是3的倍数时,如n=102,n%3为假,但n=102<=200为真。
所以102也要输出。
不符合题意。
4)答案Dif(n%3)printf("%4d",n);elsecontinue;n%3为真时,输出。
为假时,结束本次循环,步长加1,进入下一次循环。
符合题意。
题号:
13367
下面程序的运行结果是________。
#include<>
voidmain()
{intx,i;
for(i=1;i<=100;i++)
{x=i;
if(++x%2==0)
if(++x%3==0)
if(++x%7==0)
printf("%d",x);
}
}
A、2668B、3981C、4284D、2870
答案:
D
解答:
●i=1;i<=100;i++循环变量i初值为1,终值为100,步长为1
●if(++x%2==0)if(++x%3==0)if(++x%7==0)是分支嵌套。
++x自增表达式的值是x+1.所以
Ø++x%2==0等价于(x+1)%2==0x=x+1以此类推
Ø++x%3==0等价于(x+1)%3==0x=x+1;
Ø++x%7==0等价于(x+1)%7==0x=x+1;
总结:
x=i;若x+1能被2整除,x+2能被3整除,x+3能被7整除,则输出x的值。
最后输出的x值是能被7整除的。
●1-100中能被7整除的数有100/7=14个,个位数的只有7。
四个答案中第一个数字没有7。
所以确定是有两个整数满足这样的条件。
所以首先排除AB。
因为答案A的26和答案B的39均不是7的倍数。
其他的题目依次代入法解决即可。
答案C42%7=041%3!
=0所以不符合
答案D28%7=027%3=026%2=0正确
70%7=069%3=068%2=0正确
题号:
13344
以下程序段运行的结果是________。
for(y=1;y<10;)y=((x=3*y,x+1),x-1);
printf("x=%d,y=%d",x,y);
A、x=15,y=14B、x=12,y=13C、x=27,y=27D、x=y=27
答案:
A
解答:
y=1;y<10;循环变量y初值为1,终值为9,y值为10时结束循环。
步长省略。
若循环体中循环变量没有变化,则是死循环,没有结果。
所以循环体中循环变化一定要发生变化。
循环体:
y=((x=3*y,x+1),x-1);将一个逗号嵌套表达式赋值给循环变量y。
逗号表达式的规则是从左往右依次对每个表达式进行计算,结果是最后一个表达式的结果。
先计算(x=3*y,x+1)。
第一次循环时,y=1,所以(x=3,4),结果是2;计算((x=3*y,x+1),x-1),((x=3,4),x-1)=(4,2)=2;所以y=2.2<10为真,进行第二次循环。
y=((x=3*y,x+1),x-1)=((x=6,7),5)=55<10为真,进行第三次循环。
y=((x=3*y,x+1),x-1)=((x=15,16),14)=14,14<10为假,结束循环。
此时x=15,y=14,答案选A
题号:
13351
有以下程序
voidmain()
{inti=0,s=0;
do{
if(i%2){i++;continue;}
i++;
s+=i;
}while(i<7);
printf("%d\n",s);
}
执行后输出结果是________。
A、21B、12C、16D、28
答案:
C
解答:
if(i%2){i++;continue;}若i不是2的倍数,则i自增1,然后结束此次循环,即后面的语句i++;s+=i;不执行,直接判断条件i<7的真假。
若i是2的倍数,则i自增1,同时进行累加求和。
i<7,所以i的范围是0-6。
题目的含义是0-6之间所有的偶数自增1后的相加和。
偶数有0,2,4,6,每个偶数自增1后的值是1,3,5,7,将其相加,1+3+5+7=16。
答案选择C
题号:
13352
要求以下程序的功能是计算:
s=1-1/2+1/3-1/4+1/5-1/6+1/7-1/8+1/9-1/10
(注:
'/'为分数线)
voidmain()
{intn;floats;
s=;
for(n=10;n>1;n--)
s=s+1/n;
printf("%\n",s);
}
程序运行后输出结果错误,导致错误结果的程序行是________。
A、printf("%\n",s);
B、for(n=10;n>1;n--)
C、s=s+1/n;
D、s=;
答案:
C
解答:
/是算术运算符的除。
它的规则是两端是整数,结果为整数。
若有一个为小数,结果为小数。
intn;n为整型。
1/n结果为0.所以s=s+1/n;结果永远为0.
答案选C
A、printf("%\n",s);输出结果占6列,保留四位小数。
题号:
13355
下面程序的运行结果是________。
#include<>
voidmain()
{inti,b,k=0;
for(i=1;i<=5;i++)
{b=i%2;
while(b==1){k++;b--;}
}
printf("%d,%d",k,b);
}
A、8,-1B、8,-2C、3,0D、3,-1
答案:
C
解答:
找规律快速解法:
b=i%2i是偶数,b=0;i是奇数,b=1;
while(b==1){k++;b--;}b是1,执行循环体,k自增1,b自减1。
b是0,不执行循环体。
综合:
i是奇数,则k自增1,b自减1。
因为每次循环,b值都要更新,所以b值只可能是0.
i的范围是1-5,奇数有1,3,5,所以k自增3次,k初值为0,自增3次,值为3.所以选择C
中规中矩的传统解法:
1.第一次循环:
i=1,i<=5为真,执行循环体。
循环体有两个语句;
语句b=i%2=1%2=1
语句while循环中,条件b==1为真,所以执行循环体:
k=1,b=0;条件0==b为假,结束循环。
执行步长i++,i等于2
2.第二次循环:
i=2,i<=5为真。
语句b=i%2=2%2=0
语句while循环中,条件0==1为假,结束循环。
执行步长i++,i等于3
3.第三次循环:
i=3,i<=5为真,执行循环体。
循环体有两个语句;
语句b=i%2=3%2=1
语句while循环中,条件b==1为真,所以执行循环体:
k=2,b=0;条件0==b为假,结束循环。
执行步长i++,i等于4
4.第二次循环:
i=4,i<=5为真。
语句b=i%2=4%2=0
语句while循环中,条件0==1为假,结束循环。
执行步长i++,i等于5
5.第五次循环:
i=5,i<=5为真,执行循环体。
循环体有两个语句;
语句b=i%2=5%2=1
语句while循环中,条件b==1为真,所以执行循环体:
k=3,b=0;条件0==b为假,结束循环。
执行步长i++,i等于6
6.第六次循环:
i=6,6<5为假,结束循环。
题号:
13369
以下程序的输出结果是________。
voidmain()
{inta=0,i;
for(i=1;i<5;i++)
{switch(i)
{case0:
case3:
a+=2;
case1:
case2:
a+=3;
default:
a+=5;
}
}
printf("%d\n",a);
}
A、10B、20C、31D、13
答案:
C
解答:
此题的考点是switch中没有break语句。
switch语句,遇到break终止执行switch语句,或者遇到右大括号},结束执行switch语句。
i=1,执行case1,case2,default三个语句,a=0+3=3a=3+5=8;
i=2,执行case2,default两个语句,a=8+3=11a=11+5=16;
i=3,执行case3,case1,case2,default语句;a=16+2=18;a=18+3=21;a=21+5=26;
i=4,执行default语句,a=26+5=31
i=5,结束循环。
所以答案是C
题号:
13356
下面程序段________。
for(t=1;t<=100;t++)
{scanf("%d",&x);
if(x<0)continue;
printf("%3d",t);
}
A、x>=0时什么也不输出B、最多允许输出100个非负整数
C、printf函数永远也不执行D、当x<0时整个循环结束
答案:
B
解答:
if(x<0)continue;x<0时,不执行后面的Printf语句。
进行下一次循环。
即x小于0,则不输出。
x大于等于0,才输出。
题号:
13358
下面程序的运行结果是________。
#include""
voidmain()
{inti;
for(i=1;i<=5;i++)
{if(i%2)printf("*");
elsecontinue;
printf("#");
}
printf("$");
}
A、#*#*#*$B、*#*#$C、*#*#*#$D、#*#*
答案:
C
解答:
if(i%2)printf("*");elsecontinue;printf("#");
i不是2的倍数,即i是奇数,输出字符’*’,输出字符‘#‘;
i是2的倍数,即i是偶数,则什么也不输出,进行下一次的循环。
1-5中,奇数有1,3,5,所以要重复3次输出*#。
循环结束后,执行后面的printf("$");语句,输出字符’$’。
题号:
13332
以下能正确计算1×2×3×...×10的程序段是________。
A、do{i=1;s=1;s=s*i;i++;}while(i<=10);
B、i=1;s=0;do{s=s*i;i++;}while(i<=10);
C、i=1;s=1;do{s=s*i;i++;}while(i<=10);
D、do{i=1;s=0;s=s*i;i++;}while(i<=10);
答案:
C
解答:
答案A每次循环,i和s都重新赋初值为1,所以i永远小于10,是死循环。
答案Bs初值为=s*i的值永远为0.
答案D每次循环,i的值重新赋值为1,s重新赋初值为0,所以i永远小于10,是死循环。
题号:
13370
以下程序的输出结果是________。
#include<>
voidmain()
{
inti=0,a=0;
while(i<20)
{
for(;;)
{
if((i%10)==0)break;
elsei--;
}
i+=11;
a+=i;
}
printf("%d\n",a);
}
A、32B、21C、11D、33
答案:
A
解答:
第一次循环:
●i=0i<20为真;
●执行嵌套的for循环:
0%10==0为真,执行break语句,结束嵌套的for循环;
●执行i+=11后,i=11;a=a+i=0+11=11;
第二次循环:
●i=11i<20为真
●执行嵌套的for循环:
11%10=1==0为假,执行else后的i—后,i=10;10%10=0==0为真;执行break语句,结束嵌套的for循环;
●执行i+=11后,i=21;a=a+i=11+21=32;
第三次循环
●i=2121<20为假,结束循环;
题号:
13354
下面程序的运行结果是________。
#include<>
voidmain()
{
inti;
for(i=1;i<=5;i++)
switch(i%5)
{
case0:
printf("*");break;
case1:
printf("#");
default:
printf("\n");
case2:
printf("&");
}
}
A、#
&&
&
&*
B、#
&
&
&
*
C、#&
&*
D、#&
*
解答:
答案:
A
i=1i%5=1%5=1执行case1,default,case2,输出#&
i=2i%5=2%5=2执行case2,输出&
i=3i%5=3%5=3执行default,case2输出&
i=4i%5=4%5=4执行default,case2输出&
i=5i%5=5%5=0执行case2输出*
总结:
#&&&&*
题号:
13361
若运行以下程序时,从键盘输入ADescriptor(表示回车),则下面程序的运行结果是________。
#include<>
voidmain()
{
charc;
intv0=0,v1=0,v2=0;
do{
switch(c=getchar())
{case'a':
case'A':
case'e':
case'E':
case'i':
case'I':
case
A、v0=8,v1=4,v2=8
B、v0=11,v1=4,v2=11
C、v0=12,v1=4,v2=12
D、v0=7,v1=4,v2=7
答案:
C
解答:
getchar()是从键盘读入一个字符,赋值给字符变量c。
它是无参函数。
题目不完整,需要记住答案。
否则,若考试中有这样的题目,直接选择答案即可。
题号:
13359
下面程序的功能是计算正数2345的各位数字平方和,请选择填空。
#include<>
voidmain()
{intn,sum=0;
n=2345;
do
{sum=sum+________;
n=n/10;
}while(n);
printf("sum=%d",sum);
}
A、n%10B、(n/10)*(n/10)C、n/10D、(n%10)*(n%10)
答案:
D
解答:
任意正整数n,n%10是正整数的最低位,即个位数;n/10是正整数的值减去个位数的值后再除以10.
第一次循环:
sum=sum+(n%10)*(n%10)=0+(2345%10)*(2345%10)=5*5=25
n=n/10=2345/10=234
第二次循环:
sum=sum+(n%10)*(n%10)=25+(234%10)*(234%10)=25+4*4=25+16=41
n=n/10=234/10=23
第三次循环:
sum=sum+(n%10)*(n%10)=41+(23%10)*(23%10)=41+3*3=41+9=50
n=n/10=23/10=2
第四次循环:
sum=sum+(n%10)*(n%10)=50+(2%10)*(2%10)=50+2*2=50+4=54
n=n/10=2/10=0
条件为假,结束循环。
题号:
13366
下面程序的运行结果是________。
#include<>
voidmain()
{inti,j,x=0;
for(i=0;i<2;i++)
{x++;
for(j=0;j<=3;j++)
{if(j%2)continue;
x++;
}
x++;
}
printf("x=%d\n",x);
}
A、x=4B、x=8C、x=12D、x=6
答案:
B
解答:
for循环的嵌套。
嵌套循环中,一般外循环执行1次,内循环执行若干次;
分析:
外循环中i=0,1时,i<2为真。
即循环体执行2次。
内循环,j=0,1,2,3时,执行循环体。
当j是偶数时,x自增,j是奇数时,x++语句不会被执行。
即j=0,2时,x会分别自增1。
即内循环中,x会自增两次。
而题目最会是输出x的值。
所以i=0时,x++;完成一次自增;x=1;执行嵌套的for循环,x自增2,值为3;执行x++语句,值为4;i=1时,又重复一次。
所以x值为8.
题号:
13368
下面程序的运行结果是________。
#include<>
voidmain()
{inta,b;
for(a=1,b=1;a<=100;a++)
{if(b>=20)break;
if(b%3==1){b+=3;continue;}
b+=5;
}
printf("%d\n",a);
}
A、8B、7C、9D、10
答案:
A
解答:
循环结束的条件是a=101或者b>=20;
b%3==1的含义是b是3的倍数+1时,b自增3后,执行continue,即结束本次循环,执行a++;
a=1,b=1
第一次循环:
b>=20为假b%3=1.所以b%3==1为真,b=4.a=2;
第二次循环:
4>=20为假,4%3=1b%3==1为真,b=7.a=3;
第三次循环:
7>=20为假,7%3=1b%3==1为真,b==4;
第四次循环:
10>=20为假,10%3=1b%3==1为真,b==5;
第五次循环:
13>=20为假,13%3=1b%3==1为真,b==6;
第六次循环:
16>=20为假,16%3=1b%3==1为真,b==7;
第七次循环:
19>=20为假,19%3=1b%3==1为真,b==8;
第八次循环:
22>=20为真,执行break,结束for循环。
执行for语句后面的语句,输出a值。
通过分析得知,初值使b%3==1为真时,b+=5语句永远不会被执行。
题号:
13364
下面的功能是计算1至10之间奇数之和及偶数之和,请选择填空。
#include<>
voidmain()
{inta,b,c,i;
a=c=0;
for(i=0;i<=10;i+=2)
{a+=i;
________;
c+=b;
}
printf("偶数之和=%d\n",a);
printf("奇数之和=%d\n",c-11);
}
A、b=i-
B、b=i+1
C、b=i-1
D、b=i++
答案:
B
解答:
是累