![]() |
C 教材:流程控制 |
前面的兩個華氏與攝氏轉換的例子,都是一次只做一個轉換。 如果我們想要在一個程式裡面做許多次轉換呢? 例如,現在我們要將華氏溫度,從 30 到 100 之間,每 5 度列出一個華氏與攝氏的對照表。 則我們需要做 15 次轉換計算,並輸出 15 行數字。 假設這個程式的原始碼叫做 f2c-straight.c。
我們知道,一個 C 寫成的程式,從 main() 的第一個指令開始執行, 逐一按照次序執行 main() 裡面的指令。 所以,用一根腸子通到底的方法來寫 f2c.c,就像這樣:
#include <stdio.h> /* 錯誤示範,請勿學習 (f2c-straight.c) */ main() { double fahr; fahr = 30; printf("%3.0f\t%4.1f\n", fahr, 5*(fahr-32)/9); fahr = 35; printf("%3.0f\t%4.1f\n", fahr, 5*(fahr-32)/9); fahr = 40; printf("%3.0f\t%4.1f\n", fahr, 5*(fahr-32)/9); fahr = 45; printf("%3.0f\t%4.1f\n", fahr, 5*(fahr-32)/9); fahr = 50; printf("%3.0f\t%4.1f\n", fahr, 5*(fahr-32)/9); fahr = 55; printf("%3.0f\t%4.1f\n", fahr, 5*(fahr-32)/9); fahr = 60; printf("%3.0f\t%4.1f\n", fahr, 5*(fahr-32)/9); fahr = 65; printf("%3.0f\t%4.1f\n", fahr, 5*(fahr-32)/9); fahr = 70; printf("%3.0f\t%4.1f\n", fahr, 5*(fahr-32)/9); fahr = 75; printf("%3.0f\t%4.1f\n", fahr, 5*(fahr-32)/9); fahr = 80; printf("%3.0f\t%4.1f\n", fahr, 5*(fahr-32)/9); fahr = 85; printf("%3.0f\t%4.1f\n", fahr, 5*(fahr-32)/9); fahr = 90; printf("%3.0f\t%4.1f\n", fahr, 5*(fahr-32)/9); fahr = 95; printf("%3.0f\t%4.1f\n", fahr, 5*(fahr-32)/9); fahr = 100; printf("%3.0f\t%4.1f\n", fahr, 5*(fahr-32)/9); }
看起來蠻不錯的。30 -1.1 35 1.7 40 4.4 45 7.2 50 10.0 55 12.8 60 15.6 65 18.3 70 21.1 75 23.9 80 26.7 85 29.4 90 32.2 95 35.0 100 37.8
但是,前面那個程式也未免太笨了一點吧? 萬一我們需要重複做這種計算七千遍,難道要寫一萬四千行那樣的原始碼嗎? 程式語言如果要這樣使用,恐怕沒有今日的電腦文明了。 我們應該很明顯地看到,前面那個程式所做的事情,重複了 15 遍, 每一遍只是 fahr 的值比前一遍增加了 5 而已。 怎樣叫 C 自己去重複 15 遍,而我們不必一五一十地寫 15 遍呢? 這就要用到 C 的流程控制 (flow control)語法結構。 這種結構,使得 C 的執行順序不再是一個接著一個地做, 有時候它會回頭重新執行某個指令, 有時候它會不執行下一個指令而跳到更後面的指令去。
流程控制的方法分成三大類:
我們將在後面幾節,介紹 while 和 for 兩種語法結構。 其他的留待稍後再談。
分岔 (branching) 利用 if、else 語法結構 迭代 (iteration) 利用 while、for、do 語法結構 遞迴 (recursion) 利用自我呼叫的函式
習題
![]() |
![]() |
單維彰 (2000/03/24) --- |