### C語言程式設計導論
### if條件敘述
---
<!-- .slide: data-transition="fade" -->
<h3 class="text-left">
Table of Content
</h3>
- 認識條件敘述
- if 條件判斷
- 程式範例
- 例題練習
----
<!-- .slide: data-transition="fade" -->
### 為了節省講義空間
### 從這裡開始會習慣性省略以下幾行程式
```cpp
#include<stdio.h>
int main(){
return 0;
}
```
<!-- .element: class="fragment" data-fragment-index="1" -->
---
<!-- .slide: data-transition="fade" -->
### 認識條件敘述
----
<!-- .slide: data-transition="fade" -->
**日常生活之中**
**我們常會遇到一些要抉擇的事情**
<!-- .element: class="fragment" data-fragment-index="1" -->
----
<!-- .slide: data-transition="fade" -->
**這時我們常常會想**
**如果發生$A$的話就做$B$**
**如果發生$C$的話就做$D$**
<!-- .element: class="fragment" data-fragment-index="1" -->
----
<!-- .slide: data-transition="fade" -->
**舉例來說**
**如果會下雨就穿雨鞋**
**如果沒下雨就穿球鞋**
<!-- .element: class="fragment" data-fragment-index="1" -->
----
<!-- .slide: data-transition="fade" -->
**流程圖**
```mermaid
flowchart TD
id1{是否下雨}
id2[穿雨鞋]
id3[穿球鞋]
id1 ----> |是|id2
id1 ----> |否|id3
```
**這種結構就會稱為選擇結構**
<!-- .element: class="fragment" data-fragment-index="1" -->
----
<!-- .slide: data-transition="fade" -->
**有時候程式裡的選擇結構可能會比較複雜**
**但是通常畫流程圖後就會好懂一點**
```mermaid
flowchart LR
id1{條件}
id2[程式敘述]
id3[結束]
id1:::condition --> |成立|id2:::des --> id3:::des
id1 ----> |不成立|id3
classDef condition stroke:#f00, fill:#fff
classDef des stroke:#0f0, fill:#fff
```
```mermaid
flowchart LR
id4{條件1}:::des
id5{條件2}:::des
id6{條件3}:::des
id7[程式敘述1]:::condition
id8[程式敘述2]:::condition
id9[程式敘述3]:::condition
id10[結束]:::condition
id4 --> |不成立|id5 --> |不成立|id6 --> |不成立|id10
id4 --> |成立|id7 --> id10
id5 --> |成立|id8 --> id10
id6 --> |成立|id9 --> id10
classDef condition stroke:#f00, fill:#fff
classDef des stroke:#0f0, fill:#fff
```
----
<!-- .slide: data-transition="fade" -->
### 注意
### 通常流程圖都是上到下畫
<!-- .element: class="fragment" data-fragment-index="1" -->
### 除非空間不夠
<!-- .element: class="fragment" data-fragment-index="2" -->
### 不然不會從左到右畫
<!-- .element: class="fragment" data-fragment-index="3" -->
---
<!-- .slide: data-transition="fade" -->
### if條件判斷
----
<!-- .slide: data-transition="fade" -->
**既然懂了以上講的條件敘述**
**那就要來看看C語言是如何實現選擇結構**
<!-- .element: class="fragment" data-fragment-index="1" -->
----
<!-- .slide: data-transition="fade" -->
**如果只有一個條件要判斷**
```cpp
if(條件){
...條件敘述...
}
```
----
<!-- .slide: data-transition="fade" -->
**如果有兩個條件要判斷**
```cpp
if(條件1){
...條件敘述1...
}
else if(條件2){
...條件敘述2...
}
```
----
<!-- .slide: data-transition="fade" -->
**承上頁 如果有都不是的狀況**
```cpp
if(條件1){
...條件敘述1...
}
else if(條件2){
...條件敘述2...
}
else{
...條件敘述3...
}
```
----
<!-- .slide: data-transition="fade" -->
**那要怎麼寫條件式呢?**
**我們需要用到比較運算子**
<!-- .element: class="fragment" data-fragment-index="1" -->
**還有邏輯運算子**
<!-- .element: class="fragment" data-fragment-index="2" -->
----
<!-- .slide: data-transition="fade" -->
<h3 class="text-left">
邏輯運算子
</h3>
|運算子|範例|說明|
|:-:|:-:|:-:|
|!|!cnd|True變False,反之亦然|
|&&|cnd1 && cnd2|兩者皆成立才會是True|
|\|\||cnd1 \|\| cnd2|其中一個是成立就會True|
---
<!-- .slide: data-transition="fade" -->
### 程式範例
----
<!-- .slide: data-transition="fade" -->
<h3 class="text-left">
範例1:成績等第
</h3>
**老師想把全班學生的成績分不同的等第**
**$A:[90,100]、B:[80,89]、C:[70,79]$、其他$F$**
**你要寫一個程式幫助老師區分不同的等第**
----
<!-- .slide: data-transition="fade" -->
**這時就要用上之前學的比較運算子**
```cpp
if(n >= 90 && n <= 100){
printf("A");
}
else if(n >= 80 && n <= 89){
printf("B");
}
else if(n >= 70 && n <= 79){
printf("C");
}
else{printf("F");}
```
----
<!-- .slide: data-transition="fade" -->
**這樣寫會發現其實會有沒必要的敘述**
**因此可以這樣改寫**
```cpp
if(n >= 90 && n <= 100){
printf("A");
}
else if(n >= 80){
printf("B");
}
else if(n >= 70){
printf("C");
}
else{printf("F");}
```
----
<!-- .slide: data-transition="fade" -->
<h3 class="text-left">
範例2:三數比大小
</h3>
**有三個數字a, b, c要你來找出最大的數**
----
<!-- .slide: data-transition="fade" -->
**首先可以規劃流程圖**
```mermaid
flowchart LR
st[a, b, c]:::started
cnd1{a > b && a > c}:::cnd
cnd2{b > c}:::cnd
dpt1[/a最大/]:::dpt
dpt2[/b最大/]:::dpt
dpt3[/c最大/]:::dpt
st --> cnd1
cnd1 --> |Yes|dpt1
cnd1 --> |No|cnd2
cnd2 --> |Yes|dpt2
cnd2 --> |No|dpt3
classDef started stroke:#00f, fill:#fff
classDef cnd stroke:#f00, fill:#fff
classDef dpt stroke:#0f0, fill:#fff
```
----
<!-- .slide: data-transition="fade" -->
**程式可以這樣寫**
```cpp
if(a > b && a > c){
printf("a 最大")
}
else{
if(b > c){
printf("b 最大")
}
else{
printf("c 最大")
}
}
```
**這種if裡包著if的結構稱為**
**巢狀結構**
<!-- .element: class="fragment" data-fragment-index="1" -->
---
<!-- .slide: data-transition="fade" -->
### 例題練習
----
<!-- .slide: data-transition="fade" -->
[Zerojudge a003. 兩光法師占卜術](https://zerojudge.tw/ShowProblem?problemid=a003)
[Zerojudge d066. 上學去吧!](https://zerojudge.tw/ShowProblem?problemid=d066)
[Zerojudge a004. 文文的求婚](https://zerojudge.tw/ShowProblem?problemid=a004)
[Zerojudge a053. Sagit's 計分程式](https://zerojudge.tw/ShowProblem?problemid=a053)
[Zerojudge a058. MOD3](https://zerojudge.tw/ShowProblem?problemid=a058)
[Zerojudge d050. 妳那裡現在幾點了?](https://zerojudge.tw/ShowProblem?problemid=d050)
[Zerojudge d064. ㄑㄧˊ 數?](https://zerojudge.tw/ShowProblem?problemid=d064)
[Zerojudge d068. 該減肥了!](https://zerojudge.tw/ShowProblem?problemid=d068)
[Zerojudge a799. 正值國](https://zerojudge.tw/ShowProblem?problemid=a799)
**要用一點點數學喔**
<!-- .element: class="fragment" data-fragment-index="1" -->
---
<!-- .slide: data-transition="fade" -->
### 以上就是本章節的內容
{"description":"認識條件敘述","title":"C語言程式設計導論-if條件敘述","contributors":"[{\"id\":\"4f67a8cd-06ae-45dc-a8e3-62c6a41e5a37\",\"add\":5576,\"del\":87}]"}