決策結構(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都會執行到。