# 條件判斷
## 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: `中和高中`