我在Xplore上和人讨论的帖子,非常非常有学习价值!
我在Xplore上和人讨论的帖子,非常非常有学习价值!
512TCT
高级会员
注册日期: 2003年12月23日
发贴数量: 34
所在位置: 湘潭大学
发表时间: 2004年03月25日 20:57 贴子标题: [求助]奇怪的“不死”循环!——它怎么会“活”呢?
小弟在书上遇到这么一道推断题用的TC)
#include
main()
{
int s=0,i=1,j=10;
while(i--&&j--,s+=2,j++<15); /*这里的的确确有分号*/
printf("%d\n",i+j+s);
return 0;
}
问结果会是什么,我推断该无限地循环下去,而且什么也输不出来。
我的思路如下:
第一次循环结束:i=0,j=10,s=2 其中:i开始时是1,所以要计算j,则i,j都减1(i=0,j=9),s加2后(s=2),先拿j与15比,结果9<15成立,则还要进行循环,同时j加1变回10。
第二次循环结束:i=-1,j=11,s=4 其中:i开始时是0,所以不再计算j,则只有i减1,j不变(i=-1,j=10),s加2后(s=4),先拿j与15比,结果10<15成立,则还要进行循环,同时j加1变成11。
第三次循环结束:i=-2,j=11,s=6
第四次循环结束:i=-3,j=11,s=8
…………
……
(往后,i每次减1,j不变,s每次加2)
所以,我得出答案:这是一个死循环,而且无法输出任何结果。
但是 ,上机一试,它没有“死”,还“活”得好好的呢,输出结果是19
我着实想不通,就想看看他最后的i,j,s各为多少,就把它改了这样:
#include
main()
{
int s=0,i=1,j=10;
while(i--&&j--,s+=2,j++<15);
printf("i=%d j=%d s=%d\n",i,j,s);
return 0;
}
结果得到i=-1,j=16,s=4
j=16吗?
怪哉!它是怎么跳变到16去的?
为了搞清楚它的变化过程,我又把程序改成这样:
#include
main()
{
int s=0,i=1,j=10;
while(i--&&j--,s+=2,j++<15) printf("i=%d j=%d s=%d \n",i,j,s);
printf("%d\n",i+j+s);
return 0;
}
结果它如我所料地——“死”了!一直循环了下去,不断地输出结果……
这到底是怎么回事?为什么仅仅改了一下循环体,它就有这么大的变化?
为什么用“;”作循环体会发生跳变?
求助各位高手及老师!
谢谢!!!
_________________
Good good study,day day up!
返回顶部
mlsx
超级管理员
注册日期: 2003年12月20日
发贴数量: 600
所在位置: 湘潭大学
发表时间: 2004年03月26日 08:59 贴子标题: 我的过程!
--------------------------------------------------------------------------------
刚看到你的帖子!
我首先输入你的第一个程序,编译,运行,结果和你说的一样:死循环,什么也不会输出,但是我用的室C语言的老家---UNIX系统,而你使用的是windows平台吧,这样就和编译器有关系!
把后面的程序我也再unix平台编译了一次,得到的结果和你推测的一样,所以我想不是你的问题,而是系统编译器的问题,你可以再unix平台测试一下,为了怕我写错,我把写的程序贴出来
%cat test.c
代码::
#include
main()
{
int s=0,i=1,j=10;
while(i--&&j--,s+=2,j++<15);
printf("i=%d,j=%d,s=%d",i,j,s);
return 0;
}
_________________
女友对我说:“如果秋天过去了,我会在雪地爱你,如果世界消失了,我会在天堂爱你,如果你消失了,我会在泪水中爱你,如果我消失了,我会在心中爱你!”
返回顶部
512TCT
高级会员
注册日期: 2003年12月23日
发贴数量: 34
所在位置: 湘潭大学
发表时间: 2004年03月26日 10:36 贴子标题:
--------------------------------------------------------------------------------
4242
我就是在Windows下用的
unix我至今还不会用,上次在计算机系机房上机,我想见识一下unix是什么样的,结果进去以后要我输入名字和密码!结果没进成
谢谢回答。
_________________
Good good study,day day up!
我被捕了。
第一天敌人用富贵引诱我,我没招;
第二天敌人严刑拷打我,我也没招;
第三天敌人送了一个美女给我,我招了;
第四天我还想招,敌人把我杀了!!!
My HomePage:www.cstc.net.cn
My Blog :www.cnblogs.com/monkeyking
Call me at: 29743836