# 條件判斷 ## if() ```c if(判斷式){ 陳述句 } ``` 如果符合小括號內的條件,就會執行大括號內的程式 範例: ```c= #include <stdio.h> int main(){ int n=1; if(n==1){ printf("1"); } return 0 ; } ``` 輸出: ``` 1 ``` 如果n=0 ```c= #include <stdio.h> int main(){ int n=0; if(n==1){ printf("1"); } return 0 ; } ``` 輸出: ``` ``` --- 還可以加上邏輯運算子 #### && ```c= #include <stdio.h> int main(){ int n=1; if(n==1 && n==0){ printf("1"); } return 0 ; } ``` 輸出: ``` ``` #### || ```c= #include <stdio.h> int main(){ int n=1; if(n==1 || n==0){ printf("1"); } return 0 ; } ``` 輸出: ``` 1 ``` --- ## else if() ```c= if(判斷式){ 陳述句 }else if(判斷句){ 陳述句 } ``` 如果if裡條件不成立,就會跑到else if()裡看條件成不成立 * 不能直接寫else if ,前面至少要有if。 :::warning else if 可以寫很多層 但if只能寫一次(就是在開頭)。 ::: 舉例: ```c= #include <stdio.h> int main(){ int n=1; if(n==0){ printf("1"); }else if(n==1){ printf("2"); } return 0 ; } ``` 輸出 ``` 2 ``` --- ## else ```c= if(判斷式){ 陳述句 }else if(判斷句){ 陳述句 }else{ 陳述句 } ``` 如果if、else if 的條件都不成立,就會執行else 裡的程式 不可以直接寫else 前面至少要有一個if 舉例: ```c= #include <stdio.h> int main(){ int n=2; if(n==0){ printf("1"); }else if(n==1){ printf("2"); }else{ printf("3"); } return 0 ; } ``` 輸出 ``` 3 ``` --- 我們來帶個例子 ### zerojudge a003 : 兩光法師占卜術 https://zerojudge.tw/ShowProblem?problemid=a003 題目敘述: 兩光法師時常替人占卜,由於他算得又快有便宜,因此生意源源不絕,時常大排長龍,他想算 得更快一點,因此找了你這位電腦高手幫他用電腦來加快算命的速度。   他的占卜規則很簡單,規則是這樣的,輸入一個日期,然後依照下面的公式: M=月 D=日 S=(M*2+D)%3 得到 S 的值,再依照 S 的值從 0 到 2 分別給與 普通、吉、大吉 等三種不同的運勢 ::: spoiler 參考解法 ```c= #include<stdio.h> int main(){ int M,D,S; scanf("%d %d",&M,&D); S=(M*2+D)%3; if(S==0){ printf("普通"); } else if(S==1){ printf("吉"); } else{ printf("大吉"); } return 0; } ``` ::: --- ## switch ```c= switch(變數名稱或運算式) { case 符合數字或字元: 陳述句一; break; case 符合數字或字元: 陳述句二; break; default: 陳述三; } ``` 他的功能是在判斷變數的值符合哪個 case,並執行該 case 底下的陳述句。 而 default 就相當於 else,也是可有可無。 :::warning case 後面加的是 : 不是 ; 這裡的 break 基本上都要加上去。 ::: 舉例: ```c= #include <stdio.h> int main(){ char ch; scanf("%c", &ch); switch(ch){ case 'Y': printf("Yes\n"); break; case 'N': printf("No\n"); break; default: printf("Err\n"); break; } } ``` 輸入: ``` Y ``` 輸出: ``` Yes ``` 輸入: ``` N ``` 輸出: ``` No ``` 輸入: ``` A ``` 輸出: ``` Err ``` 如果沒加break? ```c= #include <stdio.h> int main(){ char ch; scanf("%c", &ch); switch(ch){ case 'Y': printf("Yes\n"); case 'N': printf("No\n"); default: printf("Err\n"); } } ``` 輸入: ``` Y ``` 輸出: ``` Yes No Err ``` 輸入: ``` N ``` 輸出: ``` No Err ``` 輸入: ``` A ``` 輸出: ``` Err ``` 他就會一直往下執行直到遇到`break`或者switch整個結束 記得要加`break` ## 三元運算子 ```c (判斷句 ? 陳述句 : 陳述句) ``` 如果判斷是true的話會執行?後的陳述句,如果是false則執行:後的陳述句 舉例: ```c= #include <stdio.h> int main(){ int n=1; printf(n==1?"Yes":"No"); } ``` 輸出 ``` Yes ``` 當n=0 輸出 ``` No ``` --- ## 兩個數字排序 由小到大排列 ```c= #include <stdio.h> int main(){ int a,b,t; scanf("%d%d",&a,&b); if(a>b){ t=a; a=b; b=t; } printf("%d %d",a,b); } ``` 輸入: ``` 2 1 ``` 輸出: ``` 1 2 ``` ## 三個數字排序 舉例: ```c= #include <stdio.h> int main(){ int a,b,c,t; scanf("%d%d%d",&a,&b,&c); if(a>b){ t=a; a=b; b=t; } if(a>c){ t=a; a=c; c=t; } if(b>c){ t=b; b=c; c=t; } printf("%d %d %d",a,b,c); } ``` 輸入: ``` 3 1 2 ``` 輸出: ``` 1 2 3 ``` --- ### 來個練習題: [最後一台計算機](https://chiscoj.com/problem/a007) [小鬼最討厭的東西](https://chiscoj.com/problem/a008) [經典問題:雞兔同龍問題](https://chiscoj.com/problem/a009) ###### tags: `中和高中`