作者shile775 (笑看人生)
站內C_and_CPP
標題[問題] 巢狀迴圈
時間Thu Aug 18 20:52:25 2011
最近看到一個題目:(程式碼如下)
#include <stdio.h>
#include <stdlib.h>
#define ROWS 6
int main(void)
{
int i;
char ch;
for(i = 0; i < ROWS; i++)
{
for(ch = 'F'; 'F' <= (ch+i); ch--)
printf("%c", ch);
putchar('\n');
}
system("pause");
return 0;
}
=====================================
在第二層迴圈的時候,
(帶入第二層)
假設 i = 0 --------> ch ='F';'F'<=(ch+0) 印出:F
i = 1 --------> ch ='F';'F'<=(ch+1) 印出:FG
i = 2 --------> ch ='F';'F'<=(ch+2) 印出:FGH
(以下省略)
=====================================
可是跑程式的時候卻印出:
(這個是要跑的題目)
F
FE
FED
FEDC
FEDCB
FEDCBA
我是哪裡想錯了,最近一直對迴圈和遞增遞減搞不清楚,
很謝謝大家的教導! (在麻煩各位的講解了!!)
補充:問題是在於迴圈那裡我哪裡搞錯了??
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 58.115.134.161
→ firejox:你也沒講題目呀... 08/18 20:53
推 ericinttu:ch-- 要印出ch 08/18 20:55
※ 編輯: shile775 來自: 58.115.134.161 (08/18 20:58)
推 suhorng:i = 1 => ch='F';'F'<=(ch+1);ch-- 08/18 20:57
→ suhorng:印出了'F'.然後ch--變成'E','E'+1<='F',再印出'E'然後ch-- 08/18 20:57
→ suhorng:'D','F'>'D'+1='E',跳出迴圈 其他依此類推 08/18 20:58
→ suhorng: 樓上上反了,這裡是 'F'<='E'+1 08/18 20:58
→ firejox:應該是ch <= 'F'+i;ch++ ... 08/18 20:59
→ firejox:原PO似乎誤解了for的意思... 08/18 21:01
不過f大,題目是要亮出這樣(如下)
(這個是要跑的題目)
F
FE
FED
FEDC
FEDCB
FEDCBA
不懂的地方是下面的迴圈是怎麼跑的?
for(i = 0; i < ROWS; i++)
{
for(ch = 'F'; 'F' <= (ch+i); ch--)
※ 編輯: shile775 來自: 58.115.134.161 (08/18 21:04)
→ firejox:for (first initialize;true expression;next loop do) 08/18 21:04
→ firejox:恩 看懂了 + 只是一種運算 並不會改變ch... 08/18 21:07
→ firejox:你改成ch >= ('F'-i) 這樣會不會比較好懂一點... 08/18 21:11
推 tropical72:我想你應是不懂 ch<='F'+i 或 ch>='F'-i 要怎麼比較 08/18 21:15
→ tropical72:就是十進位的 70, ch<='F'+i 變成 ch<=70+i,其它代換 08/18 21:16
→ tropical72:也一樣, 再推一下吧.. 08/18 21:16
→ ericinttu:ch的位置就跟F是在同一格;ch還沒有後退i格的話;就退一格 08/18 21:19
→ firejox:他可能認為 ch='F' ;'F' <=(ch+1) -->'F'<='G' -->從'F'到 08/18 21:20
→ firejox:'G' 08/18 21:21
→ firejox:那麼ch--是寫好玩的... = = 08/18 21:23
那我在問個白癡問題= =,ch--
是 for( 1: ch='F'; 2:'F'<=(ch+i);ch--)
1和2的哪一個??
※ 編輯: shile775 來自: 58.115.134.161 (08/18 21:29)
→ firejox:那麼原PO是否也是把for(i = 0; i < ROWS; i++)想成 08/18 21:26
→ firejox:i = 0; i < ROWS --> 0 < ROWS -->0 ~ (ROWS-1).... 08/18 21:27
※ 編輯: shile775 來自: 58.115.134.161 (08/18 21:32)
※ 編輯: shile775 來自: 58.115.134.161 (08/18 21:33)
→ firejox:for(...;...; ch-- ) .... 08/18 21:34