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; 
} 

请您在解释中一点一点的去解释一下吗?非常感谢

+9

在纸上测试它。 – 2014-10-09 22:44:27

+0

哪一部分你有麻烦,你做了什么来弄清楚这一点? – juanchopanza 2014-10-09 22:46:32

+0

而作业的下一步是,,,, – 2014-10-09 22:46:51

  • 迭代1
    • val为-10
    • if ((-10 < 0) && (+10 >= 40))是假
      • 因此它不会跳出循环
    • *印刷
    • 循环条件: (-10 < 100)为真
      • 所以循环继续然后
    • VAL被更新:val = -val * 2
      • val = +10*2 = 20
  • 迭代2
    • val为20
    • 语句短路到假由于 (20 < 0)为假
      • 因此它不会跳出循环
    • *印刷
    • 循环条件:(20 < 100)为真
      • 所以循环继续
    • val然后更新
      • val = -20*2 = -40
  • 迭代3
    • val都-40
    • if((-40 < 0) && (+40 >= 40))是真的
      • 所以,跳出循环的重新打印
+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)

因此,在第三次迭代,仿佛条件变为真,则退出循环。