流程控制必修攻略:從結構化程式設計到C++流程控制指令的全方位解析

在早期程式語言發展的過程中,人們發現隨著程式規模日益龐大,單純依靠線性、無結構的程式敘述已無法有效維護與拓展。於是,「結構化程式設計 (Structured Programming)」的概念逐漸成為主流。結構化程式設計的核心思想在於將整個問題的解決過程,以「自頂向下」(top-down)的設計方法,將問題由大化小,逐層分解成彼此獨立且具備明確功能的程式模組(module),例如函數或程式區段。透過這種方法,複雜的系統得以被拆解為簡單的組件,進而減少程式碼的維護成本。

結構化程式設計強調了三種基本的程式流程控制結構:

  1. 循序結構 (Sequential structure):程式敘述由上而下,依序執行。
  2. 選擇結構 (Selection structure):根據條件判斷,執行其中一個分支的程式碼。
  3. 重複結構 (Repetition structure):在滿足特定條件時,重複執行某段程式碼。

即使程式日後規模再大、功能再複雜,理論上都可透過組合這三種基本結構來加以實現。

接下來,我們將深入探討這三種流程控制結構在C++中的運用,包括程式碼區塊(block)、if/else條件指令、switch分支、for/while/do-while迴圈,以及break、continue等迴圈控制指令。

4-1 循序結構 (Sequential Structure)

循序結構是最基本的程式結構,程式會照著程式碼的撰寫順序,從上到下依序執行每一行指令。大多數的程式執行流程都是以循序結構為基礎,再輔以選擇結構或重複結構實現更動態的行為。

在C++中,每一行指令必須以分號(;)結尾。若有多行指令需被視為一個整體,則可利用大括號 { } 將這些敘述包起來,形成一個「程式區塊 (statement block)」。程式區塊本身亦可視為一個基本執行單位,之後在敘述流程控制指令時,常會看到 { } 將多行程式碼組成一個區塊的用法。

範例:以下是一個單純的循序結構程式片段,輸入攝氏溫度,轉換為華氏溫度後輸出結果。

 
cpp
#include <iostream> using namespace std; int main() { float c, f; cout << "請輸入攝氏溫度:"; cin >> c; f = (9*c)/5 + 32; cout << "攝氏 " << c << " 度 = 華氏 " << f << " 度\n"; return 0; }

在這個例子中,程式從上到下依序執行指令,不涉及條件判斷或迴圈,就是一個標準的循序結構。

4-2 選擇結構 (Selection Structure)

程式運行過程中,常常需要根據某個條件來選擇執行不同的程式碼路徑。這種根據條件來分支的結構便稱為「選擇結構」。透過選擇結構,我們可以讓程式在執行過程中做出判斷並執行對應的敘述,猶如在十字路口依交通號誌或指標選擇前進的方向。

C++中常見的選擇結構指令有:

  1. if 條件指令:只在條件為真時執行特定區塊的程式敘述。
  2. if-else 條件指令:條件為真執行 if 區塊,否則執行 else 區塊。
  3. 巢狀 if-elseif-else if: 利用多重條件判斷達成多分支邏輯。
  4. switch 選擇指令:用於多分支狀況,當某變數與特定值相符時執行相對應程式碼。

4-2-1 if 條件指令

if 指令的基本形式如下:

 
cpp
if (條件運算式) 程式指令或程式區塊;

若條件運算式的結果為真(true),則執行if後的指令;若為假(false),則跳過這些指令。

範例:判斷停車時間,若超過1小時則計費50元/小時:

 
cpp
int main() { float t, total; cout << "請輸入停車幾小時:"; cin >> t; if (t >= 1) { total = t * 50; cout << "總額為: " << total << " 元\n"; } return 0; }

若使用者輸入 2.5,則 t>=1 成立,顯示「總額為:125元」。若使用者輸入0.5則不輸出任何費用訊息。

4-2-2 if-else 條件指令

若希望在條件為真時執行A區塊,為假時執行B區塊,可使用 if-else

 
cpp
if (條件運算式) 指令區塊1; else 指令區塊2;

範例:判斷分數是否及格:

 
cpp
int score; cout << "請輸入成績:"; cin >> score; if (score >= 60) cout << "成績及格。\n"; else cout << "成績不及格。\n";

4-2-3 多重條件判斷:if-else if

當條件不只兩種時,可以透過巢狀 if-elseif-else if 來實現。例如,根據成績判斷等級:

 
cpp
if (score > 100) cout << "超過100分,輸入錯誤\n"; else if (score < 0) cout << "分數不可能為負值\n"; else if (score >= 60) cout << "及格\n"; else cout << "不及格\n";

條件會依序評估,一旦符合某個條件就執行對應敘述並離開判斷鏈。

4-2-4 switch 選擇指令

switch 指令適合在多種固定值情況下做判斷,而不用寫過多的else-if條件。語法:

 
cpp
switch(運算式或變數) { case1: 程式碼區塊; break; case2: 程式碼區塊; break; ... default: 程式碼區塊; }

break很重要,能防止程式繼續執行下一個case。default類似else,當沒有任何case匹配時執行此部分。

範例:選擇旅遊地點的範例:

 
cpp
char select; cout << "(A)義大利\n(B)巴黎\n(C)日本\n請選擇地點:"; cin >> select; switch (select) { case 'A': case 'a': cout<<"義大利5日遊$35000\n"; break; case 'B': case 'b': cout<<"巴黎7日遊$40000\n"; break; case 'C': case 'c': cout<<"日本5日遊$25000\n"; break; default: cout<<"選項錯誤\n"; }

4-3 重複結構 (Repetition Structure)

重複結構也稱迴圈結構,用來在滿足特定條件時重複執行一段程式碼。例如列印1到100的整數、生成九九乘法表、或是反覆詢問使用者輸入直到輸入正確為止。

C++提供三種基本迴圈指令:

  1. for 迴圈:適合已知確切迴圈次數的情況。
  2. while 迴圈:事先測試條件,若成立才執行,不確定執行次數,但事先知道判斷條件。
  3. do-while 迴圈:後測試型迴圈,至少會執行一次迴圈內程式碼後才判斷條件。

4-3-1 for 迴圈指令

for迴圈常用於計數迴圈,語法:

 
cpp
for (初始式; 條件式; 更新式) 程式區塊;

例如計算1+2+...+10的總和:

 
cpp
int sum=0; for (int i=1; i<=10; i++) sum += i; cout << "1+2+...+10 = " << sum << endl;

巢狀for迴圈則可以處理多維度的重複,如列印九九乘法表:

 
cpp
for (int i=1; i<=9; i++) { for (int j=1; j<=9; j++) { cout << j << "*" << i << "=" << i*j << "\t"; } cout << endl; }

4-3-2 while 迴圈指令

while是前測試型迴圈,在迴圈開始前先檢查條件是否為真:

 
cpp
while(條件式) 程式區塊;

例如計算階乘n!:

 
cpp
int n, i=1, sum=1; cout << "請輸入階層數:"; cin >> n; while (i <= n) { sum *= i; cout << i << "! = " << sum << endl; i++; }

若使用者輸入8,則程式會計算1!, 2!, 3!... 8! 並依序輸出。

4-3-3 do-while 迴圈指令

do-while必定先執行一次迴圈區塊,結尾再檢查條件。語法:

 
cpp
do { 程式區塊; } while(條件式);

適合至少要執行一次的場景,例如要求使用者至少輸入一次資料:

 
cpp
int val; do { cout << "請輸入大於10的數字:"; cin >> val; } while(val <= 10);

無論如何都會先要求輸入一次,即使不符合條件也會執行一次區塊內程式,再次判斷條件後才決定是否重複。

4-3-4 迴圈控制指令:break與continue

有時在執行迴圈時,我們希望在特定條件成立時提前結束迴圈,或是跳過當前迴圈剩餘指令繼續下一輪迴圈。

  • break指令:用於立即跳出目前所在的這層迴圈或switch結構。

     
    cpp
    for(int i=1; i<=100; i++) { if (i > 10) break; // 當i>10時,結束for迴圈 cout << i << " "; }
  • continue指令:用於略過當前迴圈剩餘指令,提前進入下一次迴圈判斷及執行。

     
    cpp
    for(int i=1; i<=10; i++) { if (i==5) continue; // 跳過i=5這次顯示 cout << i << " "; } // 螢幕將不顯示5

課後評量與實務應用

在本章結尾,我們會發現所有複雜的程式邏輯組合,無非是「循序、選擇、重複」三種結構的組合。C++提供的if-else、switch、for、while、do-while、break、continue這些關鍵字與指令,使得程式設計師能以靈活且可讀性高的方式描述任意的邏輯。

程式設計師在初學時,應熟記這些基本指令的用法和特色,並多加練習如何決定何時選擇哪種結構,何時需要巢狀結構,何時應該使用break或continue來調整迴圈運作。透過不斷的練習和程式實作,最終將能輕鬆面對更複雜的程式邏輯與需求。


透過上面詳盡的解說和範例,我們已具備足夠的基礎,來面對未來更深層的程式結構與技術議題。記住,流暢的程式結構與清晰的程式流程控制,正是打造穩定、高品質程式的關鍵。

創作者介紹
創作者 AI革命家 REVOLUTIONARY 的頭像
AI革命家

AI革命家 REVOLUTIONARY

AI革命家 發表在 痞客邦 留言(0) 人氣( 1 )