問題描述:輸出 9x9 乘法表。如下:


【解題步驟一】
分析一小部分問題。
如何輸出
1x1=1
1x2=2
1x3=3
1x4=4
1x5=5
1x6=6
1x7=7
1x8=8
1x9=9

注意上面輸出文字中,黑色字為不變文字,
紅色字是有規則的文字變化,因此演算法如下:

i 從 1 遞增至 9 (每次+1)
輸出 ("1x%d=%d\n",i,1*i);

將上述演算法轉成 C 程式碼如下:
for(i=1;i<=9;i++){
     printf("1x%d=%d\n",i,1*i);
}


【解題步驟二】
擴大問題。
若上述演算法當成 A 事件,則 A 事件發生 9 次如下:
1x1=1
..........
1x9=9

2x1=2
..........
2x9=18

3x1=3
..........
3x9=27

4x1=4
..........
4x9=36

5x1=5
..........
5x9=45

6x1=6
..........
6x9=54

7x1=7
..........
7x9=63

8x1=8
..........
8x9=72

9x1=9
..........
9x9=81

因此修改演算法如下:

j 從 1 遞增至 9 (每次+1)
     處理 A 事件

將上述演算法轉成 C 程式碼如下:
for(j=1;j<=9;j++){
     for(i=1;i<=9;i++){
          printf("%dx%d=%d\n",j,i,j*i);
     }

}


【解題步驟三】
修飾細節。
1.A 事件將跳行碼刪除。
2.每一個 A 事件之間須跳行。
因此修改演算法如下:
for(j=1;j<=9;j++){
     for(i=1;i<=9;i++){
          printf("%dx%d=%d",j,i,j*i);
     }
     printf("\n");
}


【解題步驟四】
再修飾細節。
1.讓 A 事件內,每個輸出均有間隔。
2.讓數字能對齊。
因此程式修改如下:
for(j=1;j<=9;j++){
     for(i=1;i<=9;i++){
          printf("%dx%d=%2d   ",j,i,j*i);
     }
     printf("\n");
}