世事難預料 - if判斷式

在先前的教學中我們理解到程式的執行是從上而下依續執行的,就有如買菜用的單子一樣,例如你的父母在你小的時候可能曾給你一張單子,要你依照上面的需求去買菜一樣

買黃瓜
買雞蛋
買西瓜
買蘋果

但是,世事難預料,要是其中有某項買不到該怎麼辦?你的父母可能會在單子上這樣寫

如果有黃瓜
    買黃瓜
沒有的話
    買西瓜

這樣子一來,依照上面的指示,就可以依當時的情況來決定到底要買什麼,而寫程式也有類似的概念,就是if判斷式,可以依照執行當時的條件來決定到底要執行什麼動作,我們來看一下一個簡單的例子

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
    int num;
    printf("Please enter a number:");
    scanf("%d", &num);
    if(num == 18) {
        printf("I like this number\n");
    } else {
        printf("I don't like this number\n");
    }

    system("PAUSE");
    return 0;
}

看到了嗎?我們在此運用的就是if判斷式,條件寫的是

num == 18

意思就是判斷num等不等於18,如果等於的話,會執行第一個大括號裡的程式,如果不等於的話,會執行第二個大括號裡的程式

Note

請注意,這裡是兩個等號,意思是判斷左右邊的數值是否相等,和我們先前所看到的指派是不一樣的語法,如果你寫錯成單一個等號,雖然程式可能還是可以運作,但是執行的結果可能是錯的,因為會進行指派的動作

語法

接著我們看一下if判斷式的語法

if(條件) {
    成立要執行的程式
}

這樣的寫法,當條件成立時,就會執行大括號裡的程式,如果說,你希望能夠也處理條件不成立時的情況,可以這樣寫

if(條件) {
    成立要執行的程式
} else {
    不成立要執行的程式
}

除了獨立分開來寫,if事實上也可以寫在其它if的大括號裡,我們來看一個例子

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
    int num;
    printf("Please enter a number:");
    scanf("%d", &num);
    if(num % 2 == 0) {
        if(num == 4) {
            printf("I like this number\n");
        } else {
            printf("I don't like this number");
        }
    } else {
        printf("This is an odd number\n");
    }

    system("PAUSE");
    return 0;
}

看到沒有,我們在第一層的if大括號裡面包了另一層的if,事實上所有程式碼都有這樣的特性,你可以在大括號裡寫任何合法的語法,就像堆積木一樣,只要是能組合在一起,並沒有限制你可以用什麼樣的方式來寫

條件式

在學會了如何使用if的語法之後,那你可能會問,這樣的話我該怎麼判斷數字之間的大小?而且,如果想要判斷好幾個條件是否有同時成立,又該如何寫?很簡單,接下來我們要介紹的就是條件式的寫法,我們來看下面的簡單例子

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
    int a;
    int b;
    printf("Please enter two numbers:");
    scanf("%d%d", &a, &b);
    if(a > b) {
        printf("a > b\n");
    } else {
        printf("b >= a\n");
    }

    system("PAUSE");
    return 0;
}

在這個例子中,我們要使用者輸入兩個數字,然後我們判斷數字的大小,來決定要印出

a > b

或是

b >= a

在這裡我們所看到的就是大於的比較式寫法,除了大於,還有大於等於、小於、小於等於、還有不等於之類的寫法,我們在下面介紹

比較判斷式

比較的語法主要有以下幾種

比較方式 語法
a 等於 b a == b
a 不等於 b a != b
a 大於 b a > b
a 大於等於 b a >= b
a 小於 b a < b
a 小於等於 b a <= b

值得注意的是大於小於所附帶的等號都只能放在右邊,例如小於等於的語法是 <= ,寫成 =<是錯的。

我們來看一些成立的例子

5 >= 4
5 >= 5
5 != 6
10 < 20
20 <= 20
55 != 66
77 == 77

接著看一些不成立的例子

1 > 2
1 >= 2
5 != 5
6 == 7
10 < 5
10 <= 5

在此用的都是直接的整數做為例子,當然我們可以寫算式,或是變數在判斷式的兩邊,例如

a % 2 == 0
a % 2 == 1
a * 10 < 100
a + b < 10
a != b
a - b == 3

我們來看判斷輸入數字為單數或雙數的例子

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
    int num;
    printf("Please enter a number:");
    scanf("%d", &num);
    if(num % 2 == 0) {
        printf("It is an even number\n");
    } else {
        printf("It is an odd number\n");
    }

    system("PAUSE");
    return 0;
}

因為如果數字除二的餘數為0就是雙數,透過此特性我們就能判斷一個數字是否為雙數

邏輯運算式

我們現在已經學會如何進行簡單的判斷了,那如果是更複雜的情況呢? 多個條件同時成立才做某件事,或是兩個條件其中一個成立就做某件事呢? 很簡單,此時我們就可以用上邏輯運算式,我們來看一個簡單的例子

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
    int num;
    printf("Please enter a number:");
    scanf("%d", &num);
    if(num == 3 || num == 5) {
        printf("The number is 3 or 5\n");
    } else {
        printf("The number is not 3 nor 5\n");
    }

    system("PAUSE");
    return 0;
}

在這個範例中,我們運用了或運算,它的寫法是兩條直線的符號 || ,它的規則為左邊或右邊的式子只要有一邊成立,就算是整個成立,此例我們左邊判斷是否為3,右式判斷是否為5,因此數字只要為3或為5整個式子都會成立,接著我們看一下各種不同的邏輯運算式

算式名稱 算式語法 規則
及(AND) a && b 左右都成立
或(OR) a || b 左右其中一個成立
否(NOT) ! a 不成立

這些運算事實上在數學裡被稱之為布林(Boolean)運算,為了能更精確解釋他們的規則,我們接下來將成立稱之為true (真),而不成立稱之為false (假),我們先介紹及運算,或是通稱AND運算

AND運算

AND運算的特性是兩邊都要成立其整體的結果才會成立,換言之,其中只要有一邊不成立,就整體結果不成立,其真值表如下

結果
false false false
true false false
false true false
true true true

以一些口語話的例子來說明

如果天氣晴 && 如果心情好

以這個例子來看,如果天氣不好,或是心情不好,結果就是會為 false (假),因此我們通常會用到這個運算式,是在當我們思考到

並且、同時、兩者都

這類的詞時,就可以使用AND運算

OR運算

OR運算只要有一邊成立,其整體的結果即為成立,也就是true,其真值表如下

結果
false false false
true false true
false true true
true true true

以一些口語話的例子來說明

如果天氣晴 || 如果心情好

跟之前的例子不同,心情好或天氣好只要其中一項成立,其結果即為真,通常我們在思考時想到

或著、或是、其一

這類的詞時,就可以使用OR運算

NOT運算

雖然大多時候我們都會以順的邏輯來思考事情,但是有些時候我們會以相反的方向來思考,NOT運算所做的就是把其它邏輯運算式的結果,真變為假,假變為真,其真值表如下

輸入 結果
false true
true false

以一些口語話的例子來說明

如果 天氣晴 不成立

後面的不成立這段,就將前面的天氣情給否定了,因此這個運算符號的作用就在於用相反的邏輯來表達

Table Of Contents

Previous topic

基本輸入

This Page