作者lungswu (宅爸爸)
看板C_and_CPP
標題Re: [問題]C++ 九九乘法表 如何用if來寫呢??
時間Mon Feb 1 18:36:44 2010
/*
恕刪全文...
我認為 do-while, while-do, for迴圈某種程度上是由
if 判斷式加上 goto 組合而成(前板有推文中也有提到)
之間可以互用,這邊獻個醜,若有不對觀念請鞭小力點
謝謝....
以下的source cide中將USING_LOOP的定義改成1~4,
再用 gcc -E 就可以看出不同的寫法,但一樣的結果 :)
<P.S> 抱歉,我不會用C++,改成C ....
*/
#define USING_LOOP 4
#define LOOP_FOR 1
#define LOOP_DO_WHILE 2
#define LOOP_WHILE_DO 3
#define LOOP_IF_GOTO 4
#if (USING_LOOP == LOOP_FOR)
#define LOOP_BEGIN(F, Begin, Stop, Step) \
for(Begin; Stop; Step) {
#define LOOP_END(F, Begin, Stop, Step) \
}
#elif (USING_LOOP == LOOP_DO_WHILE)
#define LOOP_BEGIN(F, Begin, stop, step) \
Begin; do {
#define LOOP_END(F, Begin, Stop, Step) \
Step; } while(Stop);
#elif (USING_LOOP == LOOP_WHILE_DO)
#define LOOP_BEGIN(F, Begin, Stop, Step) \
Begin; while(Stop) {
#define LOOP_END(F, Begin, Stop, Step) \
Step; }
#elif (USING_LOOP == LOOP_IF_GOTO)
#define LOOP_BEGIN(F, Begin, Stop, Step) \
Begin; loop_begin_##F:
#define LOOP_END(F, Begin, Stop, Step) \
Step; if (Stop) {goto loop_begin_##F;}
#endif
int main(int argc, char *argv[])
{
int i , j;
int sum;
LOOP_BEGIN(a, i = 1, i <= 9, i++)
{
LOOP_BEGIN(b, j = 1, j <= i, j++)
{
sum=i*j;
printf("%d*%d=%d ", j, i, sum);
}
LOOP_END(b, j = 1, j <= i, j++)
printf("\n");
}
LOOP_END(a, i = 1, i <= 9, i++)
return 0;
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.136.210.73
→ adrianshum:何苦呢 02/01 19:15
→ dendrobium:你這樣寫 原PO肯定看不懂你在寫啥...XD 02/01 19:54
→ applecool:#放在第一行,如 # define.... 02/01 20:36
推 Killercat:不要講元PO了 我沒展開工具我也看不懂 -_- 02/01 20:47
推 pharaoh7:這........我看不懂XDDD 02/01 21:50
推 yauhh:乍看很有印象,但仔細一看,是程式碼代換. 02/01 22:54
→ remmurds:這...自找麻煩= =a 02/02 08:47
推 lianchiamin:謝謝lungswu大的提供,但是我看不懂...XD 02/02 10:13
推 ljhgc:SORRY, 我想請問一下,#define那邊 有接個”\”這是甚麼意思 02/02 10:17
→ james732:代表把這一行跟下一行接在一起 02/02 10:19
→ lungswu:1,7樓說的也是中肯,一般是不會這樣做啦,哈哈... 02/02 10:49
→ lungswu:回lianchiamin:使用gcc -E aa.c -o bb.c, 就可以看到aa.c 02/02 10:50
→ lungswu:展開的結果,儲存於bb.c 02/02 10:50
→ lungswu:USING_LOOP 設為1~4中的任意一個數,可以看到不同的作法 02/02 10:51