问几道问题。谢谢大哥,大姐们。

zic741425263 2010-05-02 09:11:01
第一道
已知 int x=30,y=50,z=80;以下语句执行后变量x,y,z,的值分别是什么?
if(x>y||x<z&&y>z)
z=x;x=y;y=z;

A:x=50,y=80,z=80 B:x=50,y=30,z=30
C: x=30,y=50,z=80 D:x=80,y=30,z=50

第二道
程序段如下
int k=0;
while(k++<=2); printf("last=%d\n",k);
则执行结果是last=多少?
A:2 B:3 C:4 D:无结果

第三道
执行下面的程序后,a的值为多少?
main()
{int a,b;
for(a=1,b=1;a<=100;a++)
{if(b>=20)break;
if(b%3==1)
{b+=3;
continue;
}
b-=5;
}
}
A:7 B:8 C:9 D:10

第四道
以下程序的输出结果是多少?
#include<stdio.h>
main()
{int i=0,a=0;
while(i<20)
{for(;;) {if((i%10==0) break;else i--;}
i+=11; a+=i;
}
printf("%d\n",a);
}

A:21 B:32 C:33 D:11


第一道的答案是:A
第二道的答案是:C
第三道的答案是:B
第四道的答案是:B

那位大哥,大姐们能够解释一下,谢谢了.问题有点多。刚刚开始学。哈哈。

...全文
270 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zic741425263 2010-05-02
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zhangweiit 的回复:]
楼主,第二题,你可能还是没有明白
你先把代码格式化一下,才容易明白

C/C++ code

int k=0;
while(k++<=2)
{

}
;
printf("last=%d\n",k);


while(k++ <= 2);
其实可以变成
while(k++ <= 2)
{
}

prin……
[/Quote]

哈哈谢谢,已经明白了。谢谢。
zhangweiit 2010-05-02
  • 打赏
  • 举报
回复
last是最后的一次,
也确实,在这里面,只在最后的时候输出一次
zhangweiit 2010-05-02
  • 打赏
  • 举报
回复
楼主,第二题,你可能还是没有明白
你先把代码格式化一下,才容易明白

int k=0;
while(k++<=2)
{

}
;
printf("last=%d\n",k);

while(k++ <= 2);
其实可以变成
while(k++ <= 2)
{
}

printf("last=%d\n",k);无关,
是两个独立的语句
printf不在while的循环体内
zhangweiit 2010-05-02
  • 打赏
  • 举报
回复
第四道题,我觉得出得不好,
虽然我也猜对了,但是,我觉得,这个,相比前面三道题,费时间啊

int i=0,a=0;
while(i < 20)
{
for(;;)
{
if(i%10 == 0)
break;
else
i--;
}
i += 11;
a += i;
}
printf("%d\n",a);


只要是到i+= 11这一步,说明,i已经是被10整除了
第一次,是0,第二次是10
i = 0 + 11 , 11, a = 11
i = 10 + 11, 21 , a= 11 + 21, 32
10的时候,i = 11
zic741425263 2010-05-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zic741425263 的回复:]
引用 2 楼 zhangweiit 的回复:
第二题的考点在于
while()这里的检测条件,在循环体之前,无论如何都会被检测一次
while(k++<=2);
可以写成这样
while(k++ <= 2){
//空循环体
}
假设现在k已经是2了
那,再经过这个语句时,
k++ <= 还是成立的
于是,K=3

然后,再经过这个语句
此时 3++ <= 2才不符合条件……
[/Quote]
有点明白了。这个里面的last是不是就是最后的意思啊!
zic741425263 2010-05-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zhangweiit 的回复:]
第二题的考点在于
while()这里的检测条件,在循环体之前,无论如何都会被检测一次
while(k++<=2);
可以写成这样
while(k++ <= 2){
//空循环体
}
假设现在k已经是2了
那,再经过这个语句时,
k++ <= 还是成立的
于是,K=3

然后,再经过这个语句
此时 3++ <= 2才不符合条件,
但是,K又被++了一次,就是4了
[/Quote]

还是有点不懂这个,是不是当K=1时,就不输出了。
zhangweiit 2010-05-02
  • 打赏
  • 举报
回复
第三题,
我插句话,如果我同事写出这样的代码,我会把他抓来打的

int a,b;
for(a=1,b=1;a<=100;a++)
{
if(b>=20)
break;
if(b%3==1)
{
b+=3;
continue;
}
b-=5;
}


在这个循环中,b -= 5是永远都不可能被执行到的
因为,b%3 == 1,这句,每次都成立,被次在b += 3后,就被continue到下一个循环了
于是,b = 1 , 4, 7 ,10, 。。。执行了7次
第一次执行完,a = 2
第七次执行完,a = 8
zh8910 2010-05-02
  • 打赏
  • 举报
回复
int x=30,y=50,z=80;
if(x>y||x<z&&y>z) //不满足
z=x; //不执行
x=y; //x=50
y=z; //y=80
//A

int k=0;
while(k++<=2); //k=3时跳出循环,并且k++
printf("last=%d\n",k);
//C

int a,b;
for(a=1,b=1;a<=100;a++)
{if(b>=20)break;
if(b%3==1)
{b+=3;
continue;
}
b-=5; //b除3余数为1时加3,否则减5,b>=20时退出。1%3==1满足,加7次3超过20,a加7次变为8
}
//B


int i=0,a=0;
while(i<20)
{for(;;) {if((i%10==0) break;else i--;}
i+=11; a+=i;
}
printf("%d\n",a);
//过程:
//i=i+11=11 a=a+11=11
//i--=10 i=i+11=21 a=a+21=32(i>20结束)
//B
zhangweiit 2010-05-02
  • 打赏
  • 举报
回复
第二题的考点在于
while()这里的检测条件,在循环体之前,无论如何都会被检测一次
while(k++<=2);
可以写成这样
while(k++ <= 2){
//空循环体
}
假设现在k已经是2了
那,再经过这个语句时,
k++ <= 还是成立的
于是,K=3

然后,再经过这个语句
此时 3++ <= 2才不符合条件,
但是,K又被++了一次,就是4了
zhangweiit 2010-05-02
  • 打赏
  • 举报
回复
第一题,考点在if后面的几个;号,
同时,还有比较运算符与逻辑运算符的优先级
如果代码是这样写的,我相信大家就明白了

if(x>y || x<z && y>z)
z=x;
x=y;
y=z;

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧