我要學會 C 語言(五):如果這樣會怎樣之選擇結構
能夠互動以後,你會不會希望程式在不同時候能夠做不同的事情呢?這時候就要用到選擇結構;選擇結構是什麼?講白話一點,就是 if 啦!
能夠互動以後,你會不會希望程式在不同時候能夠做不同的事情呢?這時候就要用到選擇結構;選擇結構是什麼?講白話一點,就是 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 結構。