C 教材:while

我們現在用 while 語法重寫 f2c-straight.c


#include <stdio.h>
 
/* 將華氏 30:5:100 換算對應的攝氏溫度  (f2c-while.c) */
main() {
    double fahr=30;
 
    while(fahr <= 100) {
        printf("%3.0f\t%4.1f\n", fahr, 5*(fahr-32)/9);
        fahr = fahr + 5;
    }
}

f2c-while.cf2c-straight.c 的執行結果完全一樣, 但是一個寫了 11 行原始碼,令一個寫了 37 行。 注意,我們把 fahr 的宣告和定義,寫到同一個指令裡面,又省了一行。

讓我們先介紹 while 語法:

while (CONDITION) 
    STATEMENTS_
其中 CONDITION 是一個邏輯計算語句, STATEMENTS_ 是一些指令。 while 的流程控制如下:
(1)   執行 CONDITION
(2)   若 (1) 的結果是 True,做 (3),否則做 (4)
(3)   執行 STATEMENTS_ ,完了以後做 (1)
(4)   執行 STATEMENTS_ 的下一個指令,恢復正常流程
STATEMENTS_ 有三種狀況:
沒有指令只要寫個分號 ; 就可以
只有一個指令就寫一個指令
超過一個指令將這些指令依序寫下,並在其前後寫一對 { }
f2c-while.c 裡面看到的是第三種狀況。

寫程式的人,要自行負責在 STATEMENTS_ 裡面適當地改變 CONDITION 的結果。否則 CONDITION 可能永遠是 True, 導至這個 while 會永遠執行下去。 稱為「無窮迴圈」(infinite loop)。

注意,無論 STATEMENTS_ 裡面有幾個指令, 都被當做是 while 語法結構內部的指令。 就 C 而言,整個 while (CONDITION) STATEMENTS_ 被當做 main() 裡面的一個指令。 就好像一個英文句子當中,可以有許多的子句一樣。 整個 while 是一個句子,STATEMENTS_ 是這個句子裡面的子句。

根據一般程式語言的術語,一個 while 指令,又稱為一個 while 迴圈 (while-loop)。

而且,我們看到了

fahr = fahr + 5;
這種指令。我們已經在前面警告過讀者,C 的 = 符號是「指派」或「定義」的意思, 不同於數學的 = 符號,不要將它誤以為是 0 = 5 的意思。

習題

  1. 寫一個程式,輸出攝氏到華氏的溫度轉換表。 其中攝氏度數從 10 到 100 度 (含),每 5 度計算一次。 必需使用 while 迴圈。
  2. 以下程式是否有語法上的錯誤?若執行了,結果如何?(如果您執行了,按 Control-C)
    #include <stdio.h>
    main() {
        int n=0;
        while (n <= 10) {
            printf("hello, world\n");
            n = n*2;
        }
    }
    

[BCC16-C]
單維彰 (2000/03/24) --- 00/06/17 (單)
[Prev] [Next] [Up]