Skip to content

選擇結構 Selection Structrue

選擇結構簡單來說就是流程上我們會有岔路,因應不同的條件而做不同的事情。在C語言裡面,我們用ifswitch來達到這樣的效果。此篇暫時只有討論if的用法。

通常會先搭配「邏輯值」Logic Value 來講解,但它其實很直覺,因此我們直接用例子來說。

以下任何例子,可以使用Online GDB來線上測試程式。

IF Statement

程式碼

c
#include<stdio.h>
int main(){
    int a = 5;
	if (a > 3){
	    printf("%d 大於 3", a);
	}
}

執行結果

text
5 大於 3

此例中,我們在第三行宣告一個整數變數a,並將它的值指派為5。而後在第四行的地方說「如果a大於3」,那麼我們就「顯示a 大於 3」這句話。

顯而易見,a > 5,因此程式執行會顯示5 大於 3

TIP

試著把 a 的值改成別的數字,然後再執行看看。

單向選擇

這邊我們首先整理if的最基礎應用方式,專業術語是單向選擇。

程式碼

c
#include<stdio.h>
int main(){
	if (expression){
	    // do something you want if the statement hold
	}
}

若某個條件成立,則做某事。這邊我們expression的部分,會是一個「邏輯值」,也就是true或是false

在前面的例子中,a > 3true,因此條件成立,而做大括號內的事。

Try it yourself

  • 試著將a改為其他數字,再執行看看結果。
  • 試著寫多個 if statement。

如果你不知道要試什麼,可以直接複製以下的程式碼執行看看。

程式碼

c
#include<stdio.h>
int main(){
    int a = 10;
	if (a > 5){
	    printf("%d 大於 5\n", a);
	}
	if (a % 2 == 0){
	    printf("%d 是 2 的倍數\n", a);
	}
	if (a < 3){
		printf("%d 小於 3\n", a);
	}
}

INFO

%是一種運算子,代表「取餘數」的意思,例如 30 % 7 的結果會是 2,因為 30除以7餘2

雙向選擇

程式碼

c
#include<stdio.h>
int main(){
    int a = 2;
	if (a > 3){
	    printf("%d 大於 3", a);
	}else{
		printf("%d 小於等於 3", a);
	}
}

執行結果

text
2 小於等於 3

此例增加了else,意思是「否則」。當前述條件不成立時,就會執行這個區塊的程式碼。因此我們一開始設定a = 2而在第三行判斷它如果大於 3 則執行某事。但它並不大於 3,因此程式跳到第六行的程式區塊中,執行printf("%d 小於等於 3", a);

奇數偶數判斷

程式碼

c
#include<stdio.h>
int main(){
    int a = 2;
	if (a % 2 == 0){
	    printf("%d 是偶數", a);
	}else{
		printf("%d 是奇數", a);
	}
}

多向選擇

如果你有過填選志願的經驗,應該可以快速理解這個例子。假設第一志願的條件不通過,則看第二志願的條件是否通過,依此類推往後看最後落在哪個志願。

這裡我們簡單用分數來進行說明,

  • 如果大於等於 90 分,則為 A 等級;
  • 否則如果大於等於 80 分,則為 B 等級(即分數落在 80 ~ 89 之間);
  • 否則如果大於等於 70 分,則為 C 等級(即分數落在 70 ~ 79 之間);
  • 否則如果大於等於 60 分,則為 D 等級(即分數落在 60 ~ 69 之間);

程式碼

c
#include<stdio.h>
int main(){
    int a = 79;
	if (a >= 90){
	    printf("A");
	}else if(a >= 80){
		printf("B");
	}else if(a >= 70){
		printf("C");
	}else if(a >= 60){
		printf("D");
	}else{
		printf("不及格");
	}
}

你可以試著改動a的值來觀察執行結果。

巢狀結構

假設今天符合某條件之後,我們可以在裡面繼續進行選擇結構。例如,在剛才的例子中,不及格又可以分為:

  • 大於等於 40 分,可以補考;
  • 小於 40 分,不能補考。

程式碼

c
#include<stdio.h>
int main(){
    int a = 79;
	if (a >= 90){
	    printf("A");
	}else if(a >= 80){
		printf("B");
	}else if(a >= 70){
		printf("C");
	}else if(a >= 60){
		printf("D");
	}else{
		printf("不及格\n");
		if (a >= 40) {
			printf("可以補考。");
		}else{
			printf("不能補考。");
		}
	}
}

值得注意的是,此處我們的例子中,a = 79,所以它大於等於 40,但是並不會顯示「可以補考。」

練習題