语言第三次模拟练习题部分解答.docx

上传人:b****5 文档编号:3621685 上传时间:2022-11-24 格式:DOCX 页数:24 大小:26.09KB
下载 相关 举报
语言第三次模拟练习题部分解答.docx_第1页
第1页 / 共24页
语言第三次模拟练习题部分解答.docx_第2页
第2页 / 共24页
语言第三次模拟练习题部分解答.docx_第3页
第3页 / 共24页
语言第三次模拟练习题部分解答.docx_第4页
第4页 / 共24页
语言第三次模拟练习题部分解答.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

语言第三次模拟练习题部分解答.docx

《语言第三次模拟练习题部分解答.docx》由会员分享,可在线阅读,更多相关《语言第三次模拟练习题部分解答.docx(24页珍藏版)》请在冰豆网上搜索。

语言第三次模拟练习题部分解答.docx

语言第三次模拟练习题部分解答

单项选择

题号:

13334

若有如下语句

intx=3;

do{printf("%d\n",x-=2);}while(!

(--x));

则上面程序段________。

A、输出的是1

B、输出的是1和-2

C、输出的是3和0

D、是死循环

答案:

B

解答:

循环变量x初值为3.Do-while是先执行循环体,后判断条件。

若条件为假,循环结束。

条件为真,执行循环体。

第一次循环:

●循环体printf("%d\n",x-=2);是输出x的值。

而x-=2等价于x=x-2=3-2=1。

所以输出1

●条件是自增表达式与逻辑非表达式的综合。

先计算--x.自增表达式--x的值是x自减1后的值,为0.自增变量x的值是0.条件!

(--x)=!

0=1.为真。

继续执行循环体。

第二次循环

●循环体printf("%d\n",x-=2);是输出x的值。

而x-=2等价于x=x-2=0-2=-2。

所以输出-2

●条件是自增表达式与逻辑非表达式的综合。

先计算--x.自增表达式--x的值是x自减1后的值,为-3.自增变量x的值是-3.条件!

(--x)=!

(-3)=0.为假。

循环结束。

总结:

输出1-2

题号:

13353

下面程序的功能是在输入的一批正整数中求出最大者,输入0结束循环。

请选择填空。

#include<>

voidmain()

{inta,max=0;

scanf("%d",&a);

while(________)

{if(max

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

解答:

是累

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 小升初

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1