SlideShare a Scribd company logo
1 of 26
Download to read offline
分支流程
 條件運算式
 if單選條件敘述
 if/else⼆選⼀條件敘述
 if/else if多選⼀條件敘述
 switch多選⼀條件敘述
Revised on July 25, 2021
Make
each
day
count
 在⽇常⽣活中,我們常常需要⾯臨⼀些抉擇,在某些情況下,決定作
什麼;或是不作什麼,例如:
 如果天氣有些涼的話,出門需要加件衣服
 如果下雨的話,出門需要拿把傘
 如果颱風的話,就取消旅行
 上述描述是人類的思考邏輯,轉換到程式語言,就是使用條件運算式
(conditional expressions) 來描述條件和執行運算
 條件運算式的運算結果只有 2 個值
 條件成立 → 真 (true)
 條件不成立 → 假 (false)
條件運算式 1/3
2
Make
each
day
count
 C語言使用關係運算子來建立條件運算式,例如:成績是否及格,需
將成績值和60進行比較
score >= 60
 關係運算子
條件運算式 2/3
運算子 說明 運算式範例
!= 不等於 score != 0
< 小於 score < 60
<= 小於或等於 score <= 59
== 等於 score == 100
> 大於 score > 59
>= 大於或等於 score >= 60
3
Make
each
day
count
 C 語言並沒有 true 和 false 邏輯文字值,而是使用常數值來判斷條件
運算式是否成立
 當運算結果的值是非零值 (整數或浮點數都可以),就是 true
 當運算結果的值是 0,即為 false
條件運算式 3/3
4
Make
each
day
count
 AND「且」運算是指連接的左右 2 個運算元都為 true,運算式才為
true;相當於數學集合運算中的交集
 OR「或」運算是指連接的 2 個運算元,任⼀個為 ture,運算式就為
true;相當於數學集合運算中的聯集
使用邏輯運算子 1/3
A B
A && B
A B
A || B
5
Make
each
day
count
 邏輯運算子 (logical operators) 可以組合多個條件運算式來建立複雜的
條件運算式
使用邏輯運算子 2/3
運算子 說明 運算式範例
! 反條件 !(a > 60)
&& 左右條件要同時成立 (a >= 70) && (a < 80)
|| 左右條件任⼀個成立 (a < 70) || (a >= 80)
60
70 80
70 80
60
a > 60
!(a > 60)
(a >= 70) && (a < 80)
(a < 70) || (a >= 80)
6
Make
each
day
count
 畢業學分規定必修 188 學分,選修 32 學分 (其中專業選修至少 24 學分,
通識選修至少 2 學分;條件運算式可表示如下
(必修 >= 188) && (專業選修 + 通識選修) >= 32 && (專業選修 >= 24) && (通識選修 >= 2)
 閏年的定義:
 能被 4 整除且不能被 100 整除的年份
 能被 400 整除的年份
(year%4 == 0 && year%100 != 0) || (year%400 == 0)
使用邏輯運算子 3/3
7
Make
each
day
count
 if敘述會依據條件運算式的結果,決定是否執行程式敘述,語法如下:
if (條件運算式){
程式區塊;
}
 如果條件運算式的結果為true,就執行程式區塊;否則就跳過程式區塊。
如果程式區塊只有單行敘述,則可以省略大括號
if敘述 1/2
條件運算式
程式區塊
true
false
8
Make
each
day
count
int year;
printf("輸入年份:");
scanf("%d", &year);
if ((year%4 == 0 && year%100 != 0) || (year%400 == 0))
printf("⻄元%d是閏年n", year);
改為以下程式碼,可以嗎?
if (year%4 == 0 && year%100 != 0 || year%400 == 0)
printf("⻄元%d是閏年n", year);
註:&& 運算子優先 || 運算子
if敘述 2/2
9
Make
each
day
count
 ⽇常⽣活的⼆選⼀條件敘述是⼀種⼆分法,可以將⼀個集合分成⼆種
互斥的群組
 超過 60 分屬於成績及格群組;反之為不及格群組
 每⼀年不是閏年,就是平年
if/else二選一條件敘述 1/3
10
Make
each
day
count
 if 條件敘述可以加上 else 敘述,變成⼆選⼀條件敘述,語法如下:
if (條件運算式){
程式區塊1; //條件成立執行的程式碼
}
else {
程式區塊2; //條件不成立執行的程式碼
}
 如果條件運算式成立 true,就執行程式敘述 1;不成立 false,就執行程式
敘述 2
 如果程式區塊只有單行敘述,則可以省略大括號
if/else二選一條件敘述 2/3
條件運算式
程式區塊2 程式區塊1
true
false
11
Make
each
day
count
int year;
printf("輸入年份:");
scanf("%d", &year);
if ((year%4 == 0 && year%100 != 0) || (year%400 == 0))
printf("⻄元%d是閏年n", year);
else
printf("⻄元%d是平年n", year);
if/else二選一條件敘述 3/3
12
Make
each
day
count
 若 if else ⼆選⼀條件敘述之程式區塊都是單行敘述,則可用條件運算
子「?:」取代,語法如下:
(條件運算式)? 程式敘述1 : 程式敘述2;
 例如:
if (score >= 60)
printf("成績及格n");
else
printf("成績不及格n");
可簡化為
(score >= 60)? printf("成績及格n") : printf("成績及格n");
? :條件運算子 1/2
13
Make
each
day
count
 條件運算子「?:」也可配合指定敘述以條件來指定變數值,語法如下:
變數 = (條件運算式)? 變數值1 : 變數值2;
 如果條件成立,就將變數指定成變數值1;否則是變數值2
 例如:將時間轉為12時制
hour = (hour>=12)? hour-12 : hour;
 上述程式碼使用條件敘述運算子指定變數 hour 的值,如果條件為 true,
hour 變數值為 hour-12;否則維持原資料
? :條件運算子 2/2
14
Make
each
day
count
 當可選擇情況不只是⼆選⼀,可以使用 if/else if 建立多選⼀條件敘述,
語法如下:
if (條件運算式1 ){
程式區塊1; //條件運算式1成立時執行的程式碼
}
else if (條件運算式2){
程式區塊2; //條件運算式1不成立而條件運算式2成立時執行的程式碼
}
else if (條件運算式3){
程式區塊3; //條件運算式1、2不成立而條件運算式3成立時執行的程式碼
}
else {
程式區塊4; //所有條件運算式都不成立執行的程式碼
}
if/else if多選一條件敘述 1/2
15
Make
each
day
count
 if/else 敘述可繼續串加 if/else 敘述,變成多選⼀條件敘述,語法如下:
if (條件1){
程式區塊1; //條件1成立時,執行的程式碼
}
else if (條件2){
程式區塊2; //條件1不成立且條件2成立時,執行的程式碼
}
else {
程式區塊3; //條件1與條件2皆不成立時,執行的程式碼
}
if/else if多選一條件敘述 1/2
條件1
程式區塊3
程式區塊1
true
false
條件1
true
程式區塊2
false
16
Make
each
day
count
int aqi;
printf("輸入AQI:");
scanf("%d", &aqi);
if(aqi <= 50)
printf("良好n");
else if(aqi <= 100)
printf("普通n");
else if(aqi <= 150)
printf("對敏感族群不健康n");
else if(aqi <= 200)
printf("對所有族群不健康n");
else if(aqi <= 300)
printf("非常不健康n");
else
printf("危害n");
if/else if多選一條件敘述 2/2
17
Make
each
day
count
 設計程式輸入三個整數 x、y、z,將這三個數值由小到大顯示
 使用 if/else if 敘述
 過程中不可變更 x, y, z 變數值
Lab1 比較大小 1/3
18
Make
each
day
count
int x, y, z;
printf("請輸入3個整數:");
scanf("%d %d %d", &x, &y, &z);
if (x > y){
if (y > z)
printf("數字由小到大為:%d %d %d", z, y, x);
else
if (x > z)
printf("數字由小到大為:%d %d %d", y, z, x);
else
printf("數字由小到大為:%d %d %d", y, x, z);
}else {
if (x > z)
printf("數字由小到大為:%d %d %d", z, x, y);
else
if (y > z)
printf("數字由小到大為:%d %d %d", x, z, y);
else
printf("數字由小到大為:%d %d %d", x, y, z);
}
Lab1 比較大小 2/3
19
Make
each
day
count
int x, y, z, t;
printf("請輸入3個整數:");
scanf("%d %d %d", &x, &y, &z);
if (x > y) { //交換x,y的值
t = x;
x = y;
y = t;
}
if (x > z){ //交換x,z的值
t = z;
z = x;
x = t;
}
if (y > z){ //交換z,y的值
t = y;
y = z;
z = t;
}
printf("數字由小到大為: %d %d %dn", x, y, z);
Lab1 比較大小 3/3
20
Make
each
day
count
 switch敘述框架
switch (整數運算式){
case 常數值1: //如果運算式值等於常數值1,執行break敘述前的程式碼
程式區塊1;
break;
case 常數值2: //如果運算式值等於常數值2,執行break敘述前的程式碼
程式區塊2;
break;
...
case 常數值n: //如果運算式值等於常數值n,執行break敘述前的程式碼
程式區塊n;
break;
default: //所有case都不符合,執行預設程式碼
預設程式區塊;
}
switch多選一條件敘述 1/4
21
Make
each
day
count
 switch 多選⼀條件敘述之每⼀個 case 比對值相當於進行「==」運算子,
⼀旦整數運算式結果與 case 條件比對相同,就會執行對應的程式區塊
 每個程式區塊最後應加上 break 敘述,如果沒有 break 敘述就會繼續執行
下⼀個 case 之程式區塊
switch多選一條件敘述 2/4
case 比對1
default 其它敘述
程式區塊1
true
false
程式區塊2
case 比對2
switch (整數運算式)
case 比對n
true
false
non break
程式區塊n
true
non break
non break
break
break
break
結束
false
22
Make
each
day
count
int score;
char grade;
printf("輸入成績:");
scanf("%d", &score);
switch (score/10){
case 10:
case 9: grade = 'A';
break;
case 8: grade = 'B';
break;
case 7: grade = 'C';
break;
case 6: grade = 'D';
break;
default:
grade = 'F';
}
printf("成績等第%cn", grade);
switch多選一條件敘述 3/4
23
Make
each
day
count
 gcc 的編譯器還允許 case 比對的是⼀個數值範圍
int score;
char grade;
printf("輸入成績:");
scanf("%d", &score);
switch (score){
case 90 … 100: grade = 'A';
break;
case 80 … 89: grade = 'B';
break;
case 70 … 79: grade = 'C';
break;
case 60 … 69: grade = 'D';
break;
default:
grade = 'F';
}
printf("成績等第%cn", grade);
switch多選一條件敘述 4/4
24
Make
each
day
count
 (條件運算式)? 程式敘述1 : 程式敘述2;
 程式敘述1或程式敘述2可以使用嵌套作業
int score;
char grade;
printf("輸入成績:");
scanf("%d", &score);
grade=(score>=90)? 'A':(score>=80? 'B':(score>=70? 'C':(score>=60? 'D':'F')));
printf("成績等第%cn", grade);
? :條件運算子嵌套作業
25
Make
each
day
count
 使用Dev C++建立C程式專案,設計程式完成以下功能
 專案名稱:學號_5
 宣告字元型別變數 operator,浮點數型別變數 n1 及 n2
 使用 switch 敘述
 輸入運算字元及⼆筆運算資料(浮點數),自動列出運算式及運算結果
實作練習 四則運算計算機
26

More Related Content

What's hot (20)

Python元組,字典,集合
Python元組,字典,集合Python元組,字典,集合
Python元組,字典,集合
 
Python變數與資料運算
Python變數與資料運算Python變數與資料運算
Python變數與資料運算
 
Js is js(程劭非) (1)
Js is js(程劭非) (1)Js is js(程劭非) (1)
Js is js(程劭非) (1)
 
C程式-函式與巨集
C程式-函式與巨集C程式-函式與巨集
C程式-函式與巨集
 
C程式-陣列與指標
C程式-陣列與指標C程式-陣列與指標
C程式-陣列與指標
 
Sql培训 (1)
Sql培训 (1)Sql培训 (1)
Sql培训 (1)
 
Python程式設計 - 分支作業
Python程式設計 - 分支作業Python程式設計 - 分支作業
Python程式設計 - 分支作業
 
第六章 函數與巨集
第六章 函數與巨集第六章 函數與巨集
第六章 函數與巨集
 
C++基礎程式設計 ch5 陣列
C++基礎程式設計 ch5 陣列C++基礎程式設計 ch5 陣列
C++基礎程式設計 ch5 陣列
 
0710 php學習進度(1)
0710 php學習進度(1)0710 php學習進度(1)
0710 php學習進度(1)
 
企业常用Sql
企业常用Sql企业常用Sql
企业常用Sql
 
Python程式設計 - 串列資料應用
Python程式設計 - 串列資料應用 Python程式設計 - 串列資料應用
Python程式設計 - 串列資料應用
 
Python程式設計 - 迴圈作業
Python程式設計 - 迴圈作業Python程式設計 - 迴圈作業
Python程式設計 - 迴圈作業
 
Appendix B 範例
Appendix B 範例Appendix B 範例
Appendix B 範例
 
C++基礎程式設計 ch2 變數與運算子
C++基礎程式設計 ch2 變數與運算子C++基礎程式設計 ch2 變數與運算子
C++基礎程式設計 ch2 變數與運算子
 
Ch8 範例
Ch8 範例Ch8 範例
Ch8 範例
 
建置Python開發環境
建置Python開發環境建置Python開發環境
建置Python開發環境
 
Ch10 範例
Ch10 範例Ch10 範例
Ch10 範例
 
Php & Mysql
Php & MysqlPhp & Mysql
Php & Mysql
 
Ch12 範例
Ch12 範例Ch12 範例
Ch12 範例
 

Similar to C語言分支流程

C语言学习100例实例程序
C语言学习100例实例程序C语言学习100例实例程序
C语言学习100例实例程序yiditushe
 
1 C入門教學
1  C入門教學1  C入門教學
1 C入門教學Sita Liu
 
C 02 c语言的基本数据类型与表达式
C 02 c语言的基本数据类型与表达式C 02 c语言的基本数据类型与表达式
C 02 c语言的基本数据类型与表达式1138177709
 
R 語言教學: 探索性資料分析與文字探勘初探
R 語言教學: 探索性資料分析與文字探勘初探R 語言教學: 探索性資料分析與文字探勘初探
R 語言教學: 探索性資料分析與文字探勘初探Sean Yu
 
第3章算法与控制语句
第3章算法与控制语句第3章算法与控制语句
第3章算法与控制语句summerfeng
 

Similar to C語言分支流程 (10)

Ch05
Ch05Ch05
Ch05
 
SCJP ch05
SCJP ch05SCJP ch05
SCJP ch05
 
SCJP ch06
SCJP ch06SCJP ch06
SCJP ch06
 
C语言学习100例实例程序
C语言学习100例实例程序C语言学习100例实例程序
C语言学习100例实例程序
 
1 C入門教學
1  C入門教學1  C入門教學
1 C入門教學
 
C 02 c语言的基本数据类型与表达式
C 02 c语言的基本数据类型与表达式C 02 c语言的基本数据类型与表达式
C 02 c语言的基本数据类型与表达式
 
R 語言教學: 探索性資料分析與文字探勘初探
R 語言教學: 探索性資料分析與文字探勘初探R 語言教學: 探索性資料分析與文字探勘初探
R 語言教學: 探索性資料分析與文字探勘初探
 
第3章算法与控制语句
第3章算法与控制语句第3章算法与控制语句
第3章算法与控制语句
 
系統程式
系統程式系統程式
系統程式
 
Ch10 習題
Ch10 習題Ch10 習題
Ch10 習題
 

More from 吳錫修 (ShyiShiou Wu)

mbot2.0教學-陀螺儀與三軸加速計應用.pdf
mbot2.0教學-陀螺儀與三軸加速計應用.pdfmbot2.0教學-陀螺儀與三軸加速計應用.pdf
mbot2.0教學-陀螺儀與三軸加速計應用.pdf吳錫修 (ShyiShiou Wu)
 
mbot2.0教學-四路顏色感測器應用.pdf
mbot2.0教學-四路顏色感測器應用.pdfmbot2.0教學-四路顏色感測器應用.pdf
mbot2.0教學-四路顏色感測器應用.pdf吳錫修 (ShyiShiou Wu)
 
mbot2.0教學-mblock5開發mBot 2.0應用程式.pdf
mbot2.0教學-mblock5開發mBot 2.0應用程式.pdfmbot2.0教學-mblock5開發mBot 2.0應用程式.pdf
mbot2.0教學-mblock5開發mBot 2.0應用程式.pdf吳錫修 (ShyiShiou Wu)
 

More from 吳錫修 (ShyiShiou Wu) (20)

mbot2.0教學-陀螺儀與三軸加速計應用.pdf
mbot2.0教學-陀螺儀與三軸加速計應用.pdfmbot2.0教學-陀螺儀與三軸加速計應用.pdf
mbot2.0教學-陀螺儀與三軸加速計應用.pdf
 
mbot2.0教學-使用makeblock雲服務.pdf
mbot2.0教學-使用makeblock雲服務.pdfmbot2.0教學-使用makeblock雲服務.pdf
mbot2.0教學-使用makeblock雲服務.pdf
 
mbot2.0教學-局域網路傳輸應用.pdf
mbot2.0教學-局域網路傳輸應用.pdfmbot2.0教學-局域網路傳輸應用.pdf
mbot2.0教學-局域網路傳輸應用.pdf
 
mbot2.0教學-四路顏色感測器應用.pdf
mbot2.0教學-四路顏色感測器應用.pdfmbot2.0教學-四路顏色感測器應用.pdf
mbot2.0教學-四路顏色感測器應用.pdf
 
mbot2.0教學-聲光控制應用.pdf
mbot2.0教學-聲光控制應用.pdfmbot2.0教學-聲光控制應用.pdf
mbot2.0教學-聲光控制應用.pdf
 
mbot2.0教學-光感測器與LED應用.pdf
mbot2.0教學-光感測器與LED應用.pdfmbot2.0教學-光感測器與LED應用.pdf
mbot2.0教學-光感測器與LED應用.pdf
 
mbot2.0教學-超音波感測應用.pdf
mbot2.0教學-超音波感測應用.pdfmbot2.0教學-超音波感測應用.pdf
mbot2.0教學-超音波感測應用.pdf
 
mbot2.0教學-移動控制.pdf
mbot2.0教學-移動控制.pdfmbot2.0教學-移動控制.pdf
mbot2.0教學-移動控制.pdf
 
mbot2.0教學-mblock5開發mBot 2.0應用程式.pdf
mbot2.0教學-mblock5開發mBot 2.0應用程式.pdfmbot2.0教學-mblock5開發mBot 2.0應用程式.pdf
mbot2.0教學-mblock5開發mBot 2.0應用程式.pdf
 
mbot2.0教學-組裝與測試.pdf
mbot2.0教學-組裝與測試.pdfmbot2.0教學-組裝與測試.pdf
mbot2.0教學-組裝與測試.pdf
 
Python函式
Python函式Python函式
Python函式
 
Python串列資料應用
Python串列資料應用Python串列資料應用
Python串列資料應用
 
micro:bit加速度感測應用
micro:bit加速度感測應用micro:bit加速度感測應用
micro:bit加速度感測應用
 
C語言檔案處理
C語言檔案處理C語言檔案處理
C語言檔案處理
 
C語言函式
C語言函式C語言函式
C語言函式
 
C語言迴圈作業
C語言迴圈作業C語言迴圈作業
C語言迴圈作業
 
C語言運算式和運算子
C語言運算式和運算子C語言運算式和運算子
C語言運算式和運算子
 
C語言基本資料型別與變數
C語言基本資料型別與變數C語言基本資料型別與變數
C語言基本資料型別與變數
 
C語言初體驗
C語言初體驗C語言初體驗
C語言初體驗
 
程式設計概論
程式設計概論程式設計概論
程式設計概論
 

C語言分支流程