我要學會 C 語言(五):如果這樣會怎樣之選擇結構

能夠互動以後,你會不會希望程式在不同時候能夠做不同的事情呢?這時候就要用到選擇結構;選擇結構是什麼?講白話一點,就是 if 啦!

if 的用法就是,如果達到某種條件,就做這件事情;反之,就做另外一件事情。不過,為了描述達到某種條件,我們必須先學會關係運算子

關係運算子

關係運算子是什麼呢?別看它名字很困難一樣,其實關係運算子就是數學上數字的比較,有大於(>)、小於(<)、大於等於(>=)、小於等於(<=)、等於(==)、及不等於(!=)。

第二章的時候提過:數學上的 = 和 C 語言裡面的 =,意思不太一樣。數學上的 = 是指等號左右兩邊的值相等;但在 C 語言(及絕大部分程式語言裡面),= 的意思是把等號右邊的值存放(assign)到等號左邊的變數裡,有←的味道存在。

而如果要比較等號兩邊是不是相等,用的是 ==,很重要!**if 裡面幾乎只會用到 ==!**如果你寫 = 不會出錯,但意思不一樣。

邏輯運算子

邏輯運算子其實也不是太難的東西,就是(AND)、(OR)和(NOT)而已。若要在同時達到條件 a 和條件 b 才做某件事,可以使用 if (a && b);若要達到條件 a 或 條件 b 就做某件事,可以使用 if (a || b)。注意:關係運算子和等於(==)一樣,且(&&)與或(||) 都必須重複。

則是用 ! 來表達,例如當沒有達成 a 的時候做某件事可以寫成 if(!a)

選擇結構:if

下面這段程式碼可以判斷輸入的整數是否大於 5:

#include <stdio.h>
 
int main(){
	int a;
	scanf("%d", &a);
	if(a>5){
		printf("%d 大於 5\n", a);
	}else{
		printf("%d 沒有大於 5\n", a);
	}
	return 0;
}

條件放在小括號裡面,然後用大括號開啟一個新的區段,並把達成條件要做的事情(敘述)放在該區段裡面;也可以使用 else,指定沒有達成條件才做的事情。

然而不使用 else 也是可以的:

#include <stdio.h>
 
int main(){
	int a;
	scanf("%d", &a);
	if(a>5){
		printf("a>5才會輸出這行");
	}
	printf("不管怎樣都會輸出這行\n");
	return 0;
}

也可以在使用 else if,例如經典的是否為閏年題目:

#include <stdio.h>
 
int main(){
	int y=0;
	printf("請輸入年份:");
	scanf("%d", &y);
	if(y%4000==0){
		printf("%d 年不是閏年\n", y);
	}else if(y%100==0 && y%400!=0){
		printf("%d 年不是閏年\n", y);
	}else if(y%4==0){
		printf("%d 年是閏年\n", y);
	}else{
		printf("%d 年不是閏年\n", y);
	}
	return 0;
}

if 裡面也可以再包 if (所謂的巢狀 if):

#include <stdio.h>
 
int main(){
	int a=0;
	scanf("%d", &a);
	if(a%7==0 && a%3==0){
		printf("%d 是 21 的倍數\n", a);
	}else{
		if(a%7==0){
			printf("%d 是 7 的倍數\n", a);
		}else if(a%3==0){
			printf("%d 是 3 的倍數\n", a);
		}else{
			printf("%d 不是 3 或 7 的倍數\n", a);
		}
	}
	return 0;
}

if 的用法大概是這樣,如果把多個 if 拿來做搭配,就能夠做出決策樹的效果。基本上選擇結構學到這裡就可以了。但如果你嫌 if 很麻煩的話,可以試著學學看 switch 結構。

我要學會 C 語言 目錄