For循环返回**值。请解释一下
问题描述:
有人可以解释一下为什么下面的代码的输出是**
?For循环返回**值。请解释一下
#include <iostream>
using namespace std;
int main()
{
for (float val = -10.0; val < 100; val = -val * 2)
{
if (val < 0 && -val >= 40)
break;
cout << "*";
}
return 0;
}
请您在解释中一点一点的去解释一下吗?非常感谢
答
- 迭代1
- val为
-10
-
if ((-10 < 0) && (+10 >= 40))
是假- 因此它不会跳出循环
-
*
印刷 - 循环条件:
(-10 < 100)
为真- 所以循环继续然后
- VAL被更新:
val = -val * 2
val = +10*2 = 20
- val为
- 迭代2
- val为
20
语句短路到假由于
- 因此它不会跳出循环
-
*
印刷 - 循环条件:
(20 < 100)
为真- 所以循环继续
- val然后更新
val = -20*2 = -40
(20 < 0)
为假 - val为
- 迭代3
- val都
-40
-
if((-40 < 0) && (+40 >= 40))
是真的- 所以,跳出循环的重新打印
- val都
+0
谢谢iwolf,你的回答非常有帮助。 Thx非常。 – Pablo 2014-10-10 23:46:42
答
由于循环迭代了三次,但cout语句只执行了两次,所以输出为**。
迭代1:VAL = -10.0(For循环条件为真,并且如果块是假)
迭代2:VAL = 20.0(For循环条件为真,并且如果块是假)
迭代3:VAL = -40.0(For循环条件为真,但如果块为true)
因此,在第三次迭代,仿佛条件变为真,则退出循环。
在纸上测试它。 – 2014-10-09 22:44:27
哪一部分你有麻烦,你做了什么来弄清楚这一点? – juanchopanza 2014-10-09 22:46:32
而作业的下一步是,,,, – 2014-10-09 22:46:51