請問以下的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
你少打了一個分號,迴圈是不是這樣呢?
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⤋