決策結構(Decision Structures)

1. if-else statement

if (運算式) {
    Statement1;
} else {
    Statement2;
}

說明:

主要先判斷運算式的結果,如果運算式的結果不是0,則執行敘述1,否則執行敘述2。else部分可以省略。else後面也可加上if敘述。

輸入兩個整數,比較其大小

#include <stdio.h>
int main() {
    int a, b;
    // 提示使用者輸入資料
    printf("Please input two integers:");
    scanf("%d%d", &a, &b);
    if (a > b) {
        printf("%d  > %d\n", a,  b);
    } else if (a < b)  {
        printf("%d <  %d\n", a, b);
    } else {
        printf("%d == %d\n", a, b);
    }
}

檢查使用者輸入的數字是否為0

#include <stdio.h>
int main() {
    int num = 100;
    printf("Please input an integer:"); // 提示使用者輸入資料
    scanf("%d", &num); // 輸入數字到num變數
    if (num == 0) {
        printf("您輸入的數字是0\n");
    } else {
        printf("您輸入的數字不是0\n");
    }
}

判斷西元年份是否為閏年

判斷是否為閏年的流程圖如下:

依照上述流程圖,可寫出如下的程式

#include <stdio.h>
int main() {
    int year;
    printf("Please input an the year:"); // 提示使用者輸入資料
    scanf("%d", &year); // 輸入年份year
    if (year%4 == 0) {
        if (year%100 == 0) {
            if (year%400 == 0) {
                printf("%d是閏年\n", year);
            } else {
                printf("%d不是閏年\n", year);
            }
        } else {
            printf("%d是閏年\n", year);
        }
    } else {
        printf("%d不是閏年\n", year);
    }
}

如果我們把所有可得到閏年的路徑,集合在一起,則更簡潔的寫法是

#include <stdio.h>
int main() {
    int year;
    printf("Please input the year:"); // 提示使用者輸入資料
    scanf("%d", &year); // 輸入年份year
    if (year%400 == 0 || year%4 == 0 && year%100 != 0) {
        printf("%d是閏年\n", year);
    } else {
        printf("%d不是閏年\n", year);
    }
}

如何求一元二次方程式的解

我們可以畫出如下的流程圖,如何按照此流程圖寫出程式?

請各位讀者自己寫寫看了


2. switch statement

switch (運算式) {
case 常數1:
    statement1;
    break;
case 常數2:
    statement2;
    break;
default:
    statement;
}

說明:

switch是一個處理多重判斷的敘述,經由運算式所產生的結果,分別對應到符合的case,並執行底下的statement。假設沒有相符合的case,則會執行default case的敘述;default case敘述可有可無,假如運算式產生的結果沒有相符合的case,則不會產生任何結果。要特別注意的是, ":"這個符號在C語言裡用來表示標籤,所謂標籤不會產生任何程式碼,只是用來告訴compiler某一行程式的位置。因此下面的範例中若把break指令都拿掉,那你會發覺當intnum的值是1的時候,三個printf都會被執行到。這點在寫程式時要特別小心。

範例:

switch (intnum) {
case 1:
    printf("The number is one");
    break;
case 2:
    printf("The number is two");
    break;
default:
    printf("The number is not one or two");
}

3. while statement

表示法:

while (運算式) {
    statements;
}

說明:

若運算式的結果不是0,則會執行底下的statements,然後再回頭判斷運算式的結果;此動作會一直重覆執行,直到運算式結果為0時,則會停止執行。

範例:

int i = 0;
while (i <= 5) {
    printf("The Number is %d\n", i);
    i++;
}

4. for statement

表示法:

for (運算式1; 運算式2; 運算式3) {
    statements;
}

說明:

運算式1:初始值設定運算式

運算式2:比較運算式

運算式3:增加或減少運算式

範例:

int i;
for (i = 10; i <= 100; i += 10) {
    printf("%d divided by 10 equals %d \n", i, i/10);
}

5. do while statement

表示法:

do {
    statements;
} while (運算式);

說明:

此迴圈為先執行statements,接著判斷運算式的結果,假如其值不是0,則再執行statements;反之,則停止執行。

範例:

int i = 1;
do {
    printf("%d * 5 = %d", i, i * 5);
    i++;
} while (i <= 5);

6. break

說明:

break的功能是跳離目前所在的迴圈或switch區塊的動作,但並不會直接跳離到最外部層級。此用法在於for、while、do及switch完全相同。

範例:

int i;
for (i = 1; i <= 100; i++) {
    if (i == 13) {
        break;
    }
    printf("The number is %d\n", i);
}

7. continue

說明:

表示當遇到continue敘述時,for、while或do迴圈停止這一次循環,接著下一次的循環。但switch不適合continue此項敘述。

範例:

int i;
for (i = 1; i <= 100; i++) {
    if (i % 2 != 0) {
        continue; // 跳過所有奇數
    }
    printf("The even number is %d", i);
}

8. goto

說明:

跳到某個標籤後的指令。在程式中,goto可改變程式執行時的順序及影響整體程式的結構。因此,程式當中盡量少用goto敘述,以免使整個程式執行複雜化。

範例:

    int i = 1;
    if (i == 1) {
        goto one;
    } else {
        goto another;
    }
one:
    printf("Here is one");
another:
    printf("Here is another");

請注意上述程式,如果i==1,則兩個printf都會執行到。