在先前的教學中我們理解到程式的執行是從上而下依續執行的,就有如買菜用的單子一樣,例如你的父母在你小的時候可能曾給你一張單子,要你依照上面的需求去買菜一樣
買黃瓜 買雞蛋 買西瓜 買蘋果
但是,世事難預料,要是其中有某項買不到該怎麼辦?你的父母可能會在單子上這樣寫
如果有黃瓜 買黃瓜 沒有的話 買西瓜
這樣子一來,依照上面的指示,就可以依當時的情況來決定到底要買什麼,而寫程式也有類似的概念,就是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運算的特性是兩邊都要成立其整體的結果才會成立,換言之,其中只要有一邊不成立,就整體結果不成立,其真值表如下
左 右 結果 false false false true false false false true false true true true
以一些口語話的例子來說明
如果天氣晴 && 如果心情好
以這個例子來看,如果天氣不好,或是心情不好,結果就是會為 false (假),因此我們通常會用到這個運算式,是在當我們思考到
並且、同時、兩者都
這類的詞時,就可以使用AND運算
OR運算只要有一邊成立,其整體的結果即為成立,也就是true,其真值表如下
左 右 結果 false false false true false true false true true true true true
以一些口語話的例子來說明
如果天氣晴 || 如果心情好
跟之前的例子不同,心情好或天氣好只要其中一項成立,其結果即為真,通常我們在思考時想到
或著、或是、其一
這類的詞時,就可以使用OR運算
雖然大多時候我們都會以順的邏輯來思考事情,但是有些時候我們會以相反的方向來思考,NOT運算所做的就是把其它邏輯運算式的結果,真變為假,假變為真,其真值表如下
輸入 結果 false true true false
以一些口語話的例子來說明
如果 天氣晴 不成立
後面的不成立這段,就將前面的天氣情給否定了,因此這個運算符號的作用就在於用相反的邏輯來表達