逍遙自在學C語言 | 條件控制的正確使用姿勢

2023-05-09 18:00:51

前言

在C語言中,有三種條件判斷結構:if語句、if-else語句和switch語句。

一、人物簡介

  • 第一位閃亮登場,有請今後會一直教我們C語言的老師 —— 自在。

  • 第二位上場的是和我們一起學習的小白程式猿 —— 逍遙。

二、if語句

  • 基本語法
if (條件) {
    // 程式碼塊1
}
  • 程式碼範例
#include <stdio.h>

int main() 
{
  int num = 5;
  if (num > 0) {
    printf("這個數為正數.\n");
  }
  return 0;
}
  • 執行結果

三、if-else語句

  • 基本語法
if (條件) {
    // 程式碼塊1
} else {
    // 程式碼塊2
}
  • 程式碼範例
#include <stdio.h>

int main() 
{
  int num = -2;
  if (num > 0) {
    printf("這個數為正數.\n");
  } else {
    printf("這個數為負數.\n");
  }
  return 0;
}
  • 執行結果

if語句巢狀使用

  • 程式碼範例
#include <stdio.h>

int main() {
    int num = 3;
    if (num > 0) {
        if (num < 5) {
            printf("num在1到4之間\n");
        } else {
            printf("num大於等於5\n");
        }
    } else {
        printf("num小於等於0\n");
    }
    return 0;
}

在這個範例中,外層的if語句判斷num是否大於0,如果成立,進入內層的if語句繼續判斷num是否小於5;

如果不成立,執行else語句塊,輸出"num小於等於0"。

num的值是3,它既符合外層if語句的條件,也符合內層if語句的條件,所以程式輸出"num在1到4之間"。

  • 執行結果

if else語句的鏈式使用

  • 程式碼範例
#include <stdio.h>

int main() {
    int score = 85;
    if (score >= 90) {
        printf("優秀\n");
    } else if (score >= 80) {
        printf("良好\n");
    } else if (score >= 70) {
        printf("中等\n");
    } else if (score >= 60) {
        printf("及格\n");
    } else {
        printf("不及格\n");
    }
    return 0;
}

在這個範例中,if else語句被鏈式使用,程式從上到下依次判斷score的值是否大於等於90、是否大於等於80、是否大於等於70、是否大於等於60,最終輸出對應的成績等級。

score的值是85,它大於等於80,但小於90,所以程式輸出"良好"。

  • 執行結果

四、switch語句

  • 基本語法
switch (expression) {
    case constant1:
        statement1;
        break;
    case constant2:
        statement2;
        break;
    ...
    default:
        statementN;
        break;
}

  • switch語句的執行過程如下:
  1. 表示式的值被計算。
  2. 表示式的值被依次與各個case後的常數進行比較,直到找到與之匹配的常數。
  3. 如果找到匹配的常數,執行該常數對應的程式碼塊,並跳出switch語句。
  4. 如果沒有找到匹配的常數,執行default對應的程式碼塊(如果有),並跳出switch語句。

switch語句中的case標籤可以是整數、字元或列舉常數。

每個case標籤必須是唯一的,且必須以冒號(:)結尾。

case後面的程式碼塊中可以包含任意數量的語句,用花括號({})來組成程式碼塊。

switch語句的default標籤是可選的,它通常放在case標籤的最後面。如果沒有匹配到任何case標籤,那麼default標籤下的程式碼塊將被執行。

default標籤只能出現一次,且必須放在最後一個case標籤之後,否則會引發編譯錯誤。

switch基礎用法

  • 下面是一個簡單的switch語句範例,用於根據輸入的數位輸出對應的星期幾:
#include <stdio.h>

int main() 
{
    int day;
    printf("請輸入數位(1-7):");
    scanf("%d", &day);
    switch (day) {
        case 1:
            printf("星期一\n");
            break;
        case 2:
            printf("星期二\n");
            break;
        case 3:
            printf("星期三\n");
            break;
        case 4:
            printf("星期四\n");
            break;
        case 5:
            printf("星期五\n");
            break;
        case 6:
            printf("星期六\n");
            break;
        case 7:
            printf("星期日\n");
            break;
        default:
            printf("輸入錯誤!\n");
            break;
    }
    return 0;
}
  • 執行結果

switch高階用法

除了基本用法外,switch語句還有一些高階用法,可以更靈活地使用。

1、case標籤穿透

在switch語句中,如果沒有在一個case語句塊中使用break語句,那麼程式會從這個case開始,一直執行到switch語句的結尾,這種現象被稱為case標籤穿透。

  • 下面是一個case標籤穿透的範例:
#include <stdio.h>

int main() {
    int num = 3;
    switch (num) {
        case 1:
        case 2:
            printf("num是1或2\n");
            break;
        case 3:
        case 4:
            printf("num是3或4\n");
            break;
        default:
            printf("num不是1、2、3、4\n");
            break;
    }
    return 0;
}

在這個範例中,num的值是3,它既符合case 3的條件,也符合case 4的條件,但是由於case 3的語句塊中使用了break語句,所以程式執行完case 3之後就跳出了switch語句,不會繼續執行case 4的語句塊。

  • 執行結果

2、switch語句巢狀

  • 在C語言中,switch語句可以巢狀使用,例如:
#include <stdio.h>

int main() 
{
    int num = 1;
    switch (num) {
        case 1:
            printf("num是1\n");
            switch (num) {
                case 2:
                    printf("num是2\n");
                    break;
                default:
                    printf("num不是2\n");
                    break;
            }
            break;
        case 3:
            printf("num是3\n");
            break;
        default:
            printf("num既不是1也不是3\n");
            break;
    }
    return 0;
}

在這個範例中,switch語句被巢狀使用,內層的switch語句只有在外層的case 1被匹配時才會執行。

  • 執行結果

小結

通過這篇文章,我們學會了

1、if語句

2、if-else語句

3、switch語句