English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

請問以下的for statement一共會執行幾圈,y最後等於多少,為什麼?
x = 5
y= 0
for (; x--) {
y = y+x
}

2007-01-29 12:29:28 · 2 個解答 · 發問者 俊賢 1 in 電腦與網際網路 程式設計

是否可以寫成:
x = 5
y= 0
for (; x<0;--x) {
y = y x
}

2007-01-30 04:15:59 · update #1

Hi,阿信您好:
a)您第一次說明這個 "for ( ; x-- ; )"時結果是(x,y)=(1,15)但第二次變成(-1,10)可能有問題.
b)Sorry,我第一次補充時確實想寫的是"for (; x>0;--x)",看來達案如我預期的.
麻煩再說明問題a),謝謝!

2007-01-30 10:21:44 · update #2

2 個解答

  你少打了一個分號,迴圈是不是這樣呢?
for ( ; x-- ; )
  如果是,答案是 5 圈,y 的結果是 15。for 迴圈的語法如下:
for (statement1 ; statement2 ; statement3)
statement1:迴圈前置動作,只做一次,可以不寫
statement2:迴圈每次的前置判斷式,成立才執行迴圈,每次都做,可以不寫
statement3:迴圈每次的後續動作,每次都做,可以不寫
  這裡請注意判斷式的特性,「不成立」與「0」是一樣的,所以當 x 變成 0 的時候,即代表了「不成立」。所以這個迴圈會使 x 由 5 遞減,當 x 為 5 ~ 1 的時候,y 進行 y + x 的動作,而當 x 變為 0 的時候,迴圈結束。每次迴圈的 x, y 值如下:
迴圈次數 x y  y值的計算
================
  1  5 5  y=0+5
  2  4 9  y=5+4
  3  3 12  y=9+3
  4  2 14  y=12+2
  5  1 15  y=14+1

2007-01-30 10:40:58 補充:
判斷式的地方寫錯了,應該寫成 x > 0,當條件成立的時候,才會進入迴圈內部。因為 x = 5 > 0,這樣才進得去。

2007-01-31 09:00:18 補充:
考慮不週,更正如下:

迴圈次數 x y  y值的計算
================
  1  4 4  y=0+4
  2  3 7  y=4+3
  3  2 9  y=7+2
  4  1 10  y=9+1
 結束  0 10

2007-01-31 09:03:08 補充:
再更正(真糊塗):

迴圈次數 x y  y值的計算
================
  1  4 4  y=0+4
  2  3 7  y=4+3
  3  2 9  y=7+2
  4  1 10  y=9+1
  5  0 10  y=10+0
 結束  -1 10

2007-01-29 12:50:58 · answer #1 · answered by ? 5 · 0 0

我將它改成可執行的程式再來說明
#include
void main()
{
int x, y;
x = 5;
y= 0;
for (; x--; ) { /* 原題漏寫 */
y = y+x;
}
printf("(x, y) = (%d, %d)\n", x, y);
x = 5;
y= 0;
for (; x>0;--x) { /* 寫 x<0 迴路將無法執行 因為 x=5>0 */
y = y+x;
}
printf("(x, y) = (%d, %d)\n", x, y);
}
兩者執行的結果將不同
因為 for (; x--; ) 的動作是
1. 檢查 x>0 否
2. x = x-1
3. 進入迴路
最後結果 (x, y) = (-1, 10)
for (; x>0;--x) 的動作是
1. 檢查 x>0 否
2. 進入迴路
3. 出迴路後做 x = x-1
最後結果 (x, y) = (0, 15)
所以兩者是不同的
如果有問題, 請來函討論. 不然, 我可能會錯失你再補充的疑點.

2007-01-30 07:19:59 · answer #2 · answered by JJ 7 · 0 0

fedest.com, questions and answers