問題描述:輸出 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"); } | |