2014-10-09 92 views
-10

有人可以解釋一下爲什麼下面的代碼的輸出是**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

回答

0
  • 迭代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

0

由於循環迭代了三次,但cout語句只執行了兩次,所以輸出爲**。

迭代1:VAL = -10.0(For循環條件爲真,並且如果塊是假)

迭代2:VAL = 20.0(For循環條件爲真,並且如果塊是假)

迭代3:VAL = -40.0(For循環條件爲真,但如果塊爲true)

因此,在第三次迭代,彷彿條件變爲真,則退出循環。