# 程式流程控制
# 結構化程序設計
- 目標
設計出結構清晰、可讀性強、易於分工合作編寫的 - 步驟
- 自上而下的分析:把複雜的問題分解成若干小問題以後再解決
- 模組化設計:將程序劃分為多個模組,每個模組獨立存放、完成一個特定功能。
- 結構化編碼:使用基本控制結構控制程序的流程。
# 模組
- 組成:可以是一條敘述句、一段程式、一個函式等等...
- 基本特徵:僅有一個入口和一個出口
- 模組間的關係:相互獨立、內聚性很強
# 基本控制結構
graph TD | |
subgraph 循環結構 | |
F-->G{條件?} | |
G-->|條件成立|F[語句序列] | |
G-->|條件不成立|H[ ] | |
end | |
subgraph 選擇結構 | |
C{條件?}-->|條件成立|D[語句序列A] | |
C-->|條件不成立|E[語句序列B] | |
end | |
subgraph 循序結構 | |
A[語句序列1] --> B[語句序列2] | |
end |
語句序列可以是一條語句或是一組複合語句喔~
# 順序結構中使用的語句
- 說明語句
- 賦值語句
- I/O 語句 (輸入 / 輸出語句)
- 複合語句和空語句
# 其他控制結構中使用的語句
- 流程控制語句
- 選擇語句
- 條件分支
if
else
- switch 分支
switch
case
- 條件分支
- 循環語句
- 已知次數
for
- 已知條件
while
、do while
- 已知次數
- 選擇語句
- 輔助控制語句
break
、continue
、goto
return
# 選擇語句
# 單路分支語句 if
if(表達式) | |
{ | |
語句序列 | |
} |
graph LR | |
B{表達式?}-->|成立|D[語句序列]-->C | |
B-->|不成立|C[ ] |
# 雙路分支語句 if else
if(表達式) | |
{ | |
語句序列1 | |
} | |
else | |
{ | |
語句序列2 | |
} |
graph LR | |
B{表達式?}-->|成立|D[語句序列1]-->C | |
B-->|不成立|F[語句序列2]-->C[ ] |
# 多路分支語句 else if
if(表達式1) | |
{ | |
語句序列1 | |
} | |
else if(表達式2) | |
{ | |
語句序列2 | |
} | |
else | |
{ | |
語句序列3 | |
} |
graph LR | |
B{表達式1?}-->|成立|D[語句序列1]-->C[ ] | |
B-->|不成立|A{表達式2?}-->|成立|F[語句序列2]-->C | |
A-->|不成立|G[語句序列3]-->C |
# 內嵌分支語句 巢狀if
if(表達式1) | |
{ | |
if(表達式2) | |
{ | |
語句序列1 | |
} | |
else | |
{ | |
語句序列2 | |
} | |
} | |
else | |
{ | |
語句序列3 | |
} |
graph LR | |
B-->|成立|A{表達式2?}-->|成立|F[語句序列1]-->C | |
B{表達式1?}-->|不成立|D[語句序列3]-->C[ ] | |
A-->|不成立|G[語句序列2]-->C |
# switch 分支 switch
switch (表達式) | |
{ | |
case 常數表達式1: | |
語句序列1; | |
case 常數表達式2: | |
語句序列2; | |
.............. | |
default: | |
語句序列3; | |
} |
graph LR | |
B{常數表達式1?}-->|成立|D[語句序列1]-->C[ ] | |
B-->|不成立|A{常數表達式2?}-->|成立|F[語句序列2]-->C | |
A-->|不成立|G[語句序列3]-->C |
# 例子:轉換成績
例子在裡面喔!!
將一個輸入的百分成績經過運算得到相應的 5 制成績。
轉換前後的成績對應如下:
100~90 | 5 |
89~80 | 4 |
79~70 | 3 |
69~60 | 2 |
60 分以下 | 1 |
public class App { | |
public static void main(String[] args) { | |
int old_grade = 90, new_grade; | |
switch (old_grade/10){ | |
case 10: | |
case 9: new_grade = 5;break; | |
case 8: new_grade = 4;break; | |
case 7: new_grade = 3;break; | |
case 6: new_grade = 2;break; | |
default: new_grade = 1; | |
} | |
System.out.println(new_grade);; | |
} | |
} |
- 整數表達式作為運算表達式
switch(old_grade/10)
- 分支描述
case 10: | |
case 9: new_grade = 5;break; | |
case 8: new_grade = 4;break; | |
case 7: new_grade = 3;break; | |
case 6: new_grade = 2;break; |
- 缺省分支敘述
default: new_grade = 1; |
- 中斷語句:
break