# 程式流程控制

# 結構化程序設計

  • 目標
    設計出結構清晰、可讀性強、易於分工合作編寫的
  • 步驟
    • 自上而下的分析:把複雜的問題分解成若干小問題以後再解決
    • 模組化設計:將程序劃分為多個模組,每個模組獨立存放、完成一個特定功能。
    • 結構化編碼:使用基本控制結構控制程序的流程。

# 模組

  • 組成:可以是一條敘述句、一段程式、一個函式等等...
  • 基本特徵:僅有一個入口一個出口
  • 模組間的關係:相互獨立、內聚性很強

# 基本控制結構

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
      • 已知條件 whiledo while
  • 輔助控制語句
    • breakcontinuegoto
    • 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
  1. else 總是會和它上方最接近的 if 做配對
  2. 如果 ifelse 的數量不一樣可以用大括號 {} 確定關係

# 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~905
89~804
79~703
69~602
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);;
    }
}
  1. 整數表達式作為運算表達式 switch(old_grade/10)
  2. 分支描述
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;
  1. 缺省分支敘述
default: new_grade = 1;
  1. 中斷語句: break
  1. case 後面必須加上冒號,而不是大括號
  2. case 的敘述結束之後。需加上 break ,中斷這個 switch,否則會繼續向下執行下一個 case
更新於 閱讀次數

用實際行動犒賞爆肝的我😀

Zrn Ye LinePay

LinePay