C 速查手冊

控制結構

控制結構有三種,分別是循序、選擇 (selection) 、重複 (repetition) ,通常在程式語言 (programming language) 中,程式碼 (code) 從上而下一行一行依次排列,程式也依此順序執行,這就是所謂的循序結構。循序結構為一般程式語言執行的基本方式,包括 C 語言。

選擇結構為依條件 (condition) 讓程式 (program) 分流執行,如下

條件 → 真 → 分流A
    ↘
      假 → 分流B

條件為真,程式執行分流 A ,條件為假,程式執行分流 B ,這便是典型的選擇結構之例。

C 語言中提供的選擇結構如下表

選擇結構簡述
if如果條件為真才執行
if-else如果條件為真執行某某,否則執行某某
switch多重條件選擇,並可設定預設執行選項

最簡單的為 if 陳述,如下例

#include <stdio.h>

int main(void)
{
    int a = 22;
    int b = 34;
    
    if (a > b) {
        printf("Good luck!\n");
    }
    
    if (a != b) {
        printf("Have a nice day!\n");
    }
    
    return 0;
}

/* 《程式語言教學誌》的範例程式
    http://kaiching.org/
    檔名:conif.c
    功能:示範 if 陳述的作用
    作者:張凱慶 */

編譯後執行,結果如下

$ gcc conif.c
$ a.out
Have a nice day!
$

此例 if 陳述有兩組。 if 為 C 語言的關鍵字 (keyword) 之一,緊接在 if 後頭的小括弧即為條件運算式,若運算式 (expression) 的結果為非零的值,條件即為真,隨後大括弧內的程式區塊就會被執行,反之,若運算式的結果為零,條件則為假,程式就會跳過大括弧的程式區塊,尋找區塊後的程式繼續執行。

其中,第一組 if 陳述

if (a > b) {
    printf("Good luck!\n");
}

由於 a > b 的條件為假,所以 Good luck! 的英文字串不會被列印出來,而第二組 if 陳述

if (a != b) {
    printf("Have a nice day!\n");
}

a != b 的條件為真,所以程式會印出 Have a nice day! 的英文字串。

請參考C 速查手冊 - 選擇控制,有對於 ifif-else 的詳細敘述。
C 語言還有另一種依常數選擇的 switch 常數,請參考 C 速查手冊 - switch 控制,有對於 switch 陳述的詳細敘述

重複結構是讓程式重複執行某些工作,如下

條件 → 真 → 重複執行的工作
↓↑            ↓
↓ ↖          ↙
↓    ←←←← 



迴圈後的陳述

當有工作需要重複執行時,重複的條件為真,此工作就重複執行一次,執行完畢再行測試條件,條件為真,繼續重複執行此工作,直到條件為假時,結束工作的執行。依此執行的方式為重複結構,也被稱為迴圈 (loop) 。

因此,具有重複結構的程式通常需要下列三項基本任務

1. 控制變數初始設定
2. 迴圈結束條件測試
3. 調整控制變數的值

C 語言中提供的重複結構如下表

重複結構簡述
for通常用於有明確重複數的迴圈
while前測試迴圈
do-while後測試迴圈

常見的 for 迴圈,如下例

#include <stdio.h>

int main(void)
{
    
    int i;
    
    for (i = 0; i < 10; i++) {
        printf("%d\n", i);
    }
    
    return 0;
}

/* 《程式語言教學誌》的範例程式
    http://kaiching.org/
    檔名:confor.c
    功能:示範 for 迴圈的使用
    作者:張凱慶 */

編譯後執行,結果如下

$ gcc confor.c
$ a.out
0
1
2
3
4
5
6
7
8
9
$

for 迴圈的部分

for (i = 0; i < 10; i++) {
    printf("%d\n", i);
}

for 為 C 語言的關鍵字之一。第 8 行在關鍵字 for 之後緊接著的小括弧為 for 迴圈的控制項目,用分號分隔的三個項目,分別是

控制變數初始設定;迴圈條件測試;調整控制變數的值

此例中, i 為迴圈的控制變數,初始值設為 0 ,而迴圈結束條件為 i < 10 ,每執行完一次迴圈, i 就遞增 1 。因此,此程式重複印出 i 的值,恰巧從 0 印到 9 為止。

請參考 C 速查手冊 - for 迴圈,有對於 for 迴圈的詳細敘述。另外 C 還有兩種迴圈,請參考 C 速查手冊 - while 迴圈C 速查手冊 - do-while 迴圈
C 語言雖然可以使用 goto 位標寫程式,但使用 goto 為非結構化程式設計,會使得程式變得凌亂難以閱讀及理解。以上所述的結構化程式設計方式,已經被廣泛使用,並且視為寫程式的良好習慣。

回 C 速查手冊首頁