如何製作一個列印九九乘法表的程式

請下載並執行程式 PrintMul.exe

設計步驟

  1. 步驟一:

    先想好九九乘法表的樣子, (當然你也可以執行一下 MultTab.exe 看一看輸出, 不過一般情況下你要自己去設計), 例如:

  2. 步驟二:

    想一想 C 中列印的命令是 printf, 使用它來印第一列的話該如何寫呢? 首先, 你想到要列印

    那太容易了, 不就是 嗎? 要列印上面所設計的 9 列簡直不費吹灰之力, 就寫 9 個 printf 敘述就好了, 外加一個 main() 函式的殼子, 和 #include <stdio.h> 就大功告成了, 可是、可是、慢著, 要印出上面這些東西我們除了要把這些東西一五一十地通通打一遍之外, 還要再加上 printf、(、"、;、#include 這些有的沒有的, 是不是有點給它控固力, 你打字打了比你要列印的東西還多, 那電腦在做什麼? 如果要你做一個 16 進位的乘法表程式, 那你不是又通通打一遍了嗎, 而且這次要打 16×16 項, 那如果要做 100 進位的呢? 哇! 100×100 項耶!

  3. 步驟三:

    重新分析列印一列的 printf 敘述

    要列印

    的程式和要列印 或是列印 的程式其實應該是很像的, 上面所做的分析是把不變的東西拿掉, 不變的東西也就是 "1×", 因為要列印一樣的東西 9 次的程式其實很好寫, 就是重覆做 printf("1×?"); 九遍 執行這個程式碼你馬上看到 的結果,至於要列印 的話,你還是可以執行 printf 九次, 只是這時必須要列印一個變數如下面程式 (這種寫法如果要改成從 0 列印到 100 是不是很容易呢?)

    那麼要列印

    應該就不難了吧! 請嘗試組裝一下吧! ※故意用這麼不清楚的字不讓你一次看到, 請先想一想, 實在想不出來才看上面的答案!

  4. 步驟四: 列印第二列時該怎麼辦?

    由上面步驟三中你很容易稍加修改就可以列印出

    的結果,如下: 哇! 真容易, 可是這樣子要列印 100 列而且每一列數字都比上一列加 1 的話豈不就要拷貝上面這兩列一百遍去逐一修改了嗎? Stupid! 顯然我們應該再用一層迴圈來做才會省事啊!

  5. 步驟五: 組合步驟三及四, 要列印出步驟一中的結果應該要使用類似下面的程式碼

  6. 步驟六:

    完成上一步驟以後, 請你測試執行你自己的程式, 再執行看看 MultTab.exe 比較一下, 你發現有什麼不同嗎? 請你嘗試用 %2d 取代 %d 來試看看! 請你再試看看所有 %d 換成 %-2d 如何? 有一些不同吧! 你能不能告訴我 %2d 讓 printf() 做了什麼事? %-2d 呢? %5d 呢?

  7. 步驟七: 自我擴充練習

    1. 你能不能稍微修改一下程式來印出十六進位的乘法表? (也許有一種外星人他們從小就學十六進位的心算喔!)

    2. 承接上題, 你知道怎樣修改上面這個程式, 讓數字 10 用 A 來印出來, 11 用 B,12 用 C, 13 用 D,14 用 E, 15 用 F 來表示嗎? 乘積仍然用十進位數字來表示。

    3. 你能不能稍微修改一下程式來印出九九乘法中奇數乘偶數及偶數乘奇數的那些項目出來, 例如:
        1×2 1×4=4 ....
        2×1 2×3=6 ....
        3×2 .......
        .....

    4. 留給你自己儘量發揮囉!

在這個例子裡大家看到要運用程式達成某一種效果時, 不可避免地一定會有很種方法可以做到, 就像我們形容 "某人很積極" 可以有很多種說法一樣。 在挑選其中一種方法的時候, 我們常常運用的原則是:

  1. 儘量讓電腦發揮其運算快速的能力,減輕設計者及使用者的工作

  2. 儘量挑選任何人都容易瞭解的寫法

  3. 儘畫挑選 CPU 執行起來比較有效率的寫法。

當然這幾個原則不可能完全顧及, 總是會有互相抵觸的地方, 此時就要看你的評斷了。

程式設計課程 首頁
by Pei-yih Ting
E-mail: pyting@cs.ntou.edu.tw