以下哪个是无限循环...

来源:百度知道 编辑:UC知道 时间:2024/05/08 02:53:17
1. k=32764;
do
{
k++;k++;
}while(k>0);

2.s=32764;
while((s++%2)||(s%2)) s++;

请问这两个.哪一个是无限循环...哪一个是有限循环..为什么...
呵呵.大家的答案怎么都不一样啊....
书上的答案是第二个..
这是一道选择题的后两个选项...也就是说..第一个不是无限循环.第二个是无限循环...各位大哥.请指教....

第二个是无限循环

第一个程序中的k在某个时候会溢出,到溢出时,k值会变会负数,此时k>0便不成立,所以它不是无限循环

第二个程序中即使s上溢,也仍然会满足"s和s+1中有一个不能被2整除"的条件,所以它会永远循环下去。

******************************************************

你的这本书可以扔掉了!你可以看书根据大家的发言推理判断一下嘛!第一个绝对不是无限循环。

第二个,
因为第二个无论什么情况下都会有%2不为0的情况,所以会继续循环。
而第一个会因为越界而使得k变成负数,则》0不成立而退出。

嗯,第二个之所以不是无限循环,是因为后++始终会在语句执行完才会自增,所以,它只是判断什么时候能不能被2整除

两个都是无限循环吧.

第一个是无限循环,第二个是有限循环。
为什么呢?
分析如下:
do{}while()是以while括号里面的语句作为判断是否继续执行{}里面的语句。

第一个括号里面的k>0,因为赋值为32764,并且执行k++,这样k>32764>0,是无限循环。

第二个括号里的左边s++%2是先%2值为0,右边s%2为32764%2结果为16382,余数为0,所以值也为0,左边的0与右边的0作或运算,结果为0,所以跳出循环。

第一个k一直++会溢出整形范围,k变为负数,所以不是无限循环
第二个while的条件是k是偶数或者奇数,因为不管溢出与否,k要么是偶数要么是奇数,所以是无限循环