c语言中的一道题 求程序的输出结果 为什么我求出来是1 2 2 呢?而答案是1 2 3 啊

main(){intn=0;while(n++<=1)printf("%d\t",n);printf("%d\n",n);}... main ()
{
int n=0;
while(n++<=1)
printf("%d\t",n);
printf("%d\n",n);
}
展开
 我来答
thebabe
2013-03-07 · TA获得超过829个赞
知道小有建树答主
回答量:729
采纳率:66%
帮助的人:514万
展开全部
你的情况是:
while(n++<=1)中是先取n值判断后再n++,因此第一次n=0判断有效,n变为1并执行循环体;
第二次n=1判断仍有效,n变为2并执行循环体,第三次n=2判断无效,n++被忽略。

但实践中由于编译器的实现不同,可能导致第三次半段无效时n++未被忽略-理论上是不应该忽略的。所以给的答案是1 2 3。

所以问题可能出在你使用的编译器上。
我用TC2.0编译器、tcc编译器和cygwin下的gcc编译器执行结果均为:1 2 3。
不知道你用的什么编译器?

难怪。这主要是编译器的问题。 我用VC6.0测试了,如果Debug模式没有问题,Release模式有问题,只有1 2。 我估计是Release优化出错。所以查看了一下,如果以速度优化,则输出1 2。默认模式则跟Debug一样。最小尺寸优化也只输出两个。自定义优化跟默认模式一样。 所以问题出在编译器及Project设置上。

所以正确答案应是三个:1 2 3。
百度网友b24d08f
2013-03-06 · TA获得超过114个赞
知道小有建树答主
回答量:114
采纳率:0%
帮助的人:80.5万
展开全部
你忽略了最后一次,n = 2的时候,还是会计算n++ <= 1的,这个时候 因为n > 1,所以没有进循环(在括号处求的值),但是编译器还是对n++求了一次值,不然,怎么知道n++ 已经不符合条件了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友b0bba24
2013-03-06 · TA获得超过887个赞
知道小有建树答主
回答量:446
采纳率:0%
帮助的人:462万
展开全部
当n=1时(第二次循环),1<=1满足,那么n加一,然后执行循环体
此时n=2,进入n++<=1中,由于2<=1不成立,应该跳出循环啦,但n还要加1的,因为n++<=1是一个语句。此时n=3了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式