流程控制必修攻略:從結構化程式設計到C++流程控制指令的全方位解析
在早期程式語言發展的過程中,人們發現隨著程式規模日益龐大,單純依靠線性、無結構的程式敘述已無法有效維護與拓展。於是,「結構化程式設計 (Structured Programming)」的概念逐漸成為主流。結構化程式設計的核心思想在於將整個問題的解決過程,以「自頂向下」(top-down)的設計方法,將問題由大化小,逐層分解成彼此獨立且具備明確功能的程式模組(module),例如函數或程式區段。透過這種方法,複雜的系統得以被拆解為簡單的組件,進而減少程式碼的維護成本。
結構化程式設計強調了三種基本的程式流程控制結構:
- 循序結構 (Sequential structure):程式敘述由上而下,依序執行。
- 選擇結構 (Selection structure):根據條件判斷,執行其中一個分支的程式碼。
- 重複結構 (Repetition structure):在滿足特定條件時,重複執行某段程式碼。
即使程式日後規模再大、功能再複雜,理論上都可透過組合這三種基本結構來加以實現。
接下來,我們將深入探討這三種流程控制結構在C++中的運用,包括程式碼區塊(block)、if/else條件指令、switch分支、for/while/do-while迴圈,以及break、continue等迴圈控制指令。
4-1 循序結構 (Sequential Structure)
循序結構是最基本的程式結構,程式會照著程式碼的撰寫順序,從上到下依序執行每一行指令。大多數的程式執行流程都是以循序結構為基礎,再輔以選擇結構或重複結構實現更動態的行為。
在C++中,每一行指令必須以分號(;)結尾。若有多行指令需被視為一個整體,則可利用大括號 { } 將這些敘述包起來,形成一個「程式區塊 (statement block)」。程式區塊本身亦可視為一個基本執行單位,之後在敘述流程控制指令時,常會看到 { } 將多行程式碼組成一個區塊的用法。
範例:以下是一個單純的循序結構程式片段,輸入攝氏溫度,轉換為華氏溫度後輸出結果。
在這個例子中,程式從上到下依序執行指令,不涉及條件判斷或迴圈,就是一個標準的循序結構。
4-2 選擇結構 (Selection Structure)
程式運行過程中,常常需要根據某個條件來選擇執行不同的程式碼路徑。這種根據條件來分支的結構便稱為「選擇結構」。透過選擇結構,我們可以讓程式在執行過程中做出判斷並執行對應的敘述,猶如在十字路口依交通號誌或指標選擇前進的方向。
C++中常見的選擇結構指令有:
if條件指令:只在條件為真時執行特定區塊的程式敘述。if-else條件指令:條件為真執行 if 區塊,否則執行 else 區塊。- 巢狀
if-else或if-else if: 利用多重條件判斷達成多分支邏輯。 switch選擇指令:用於多分支狀況,當某變數與特定值相符時執行相對應程式碼。
4-2-1 if 條件指令
if 指令的基本形式如下:
若條件運算式的結果為真(true),則執行if後的指令;若為假(false),則跳過這些指令。
範例:判斷停車時間,若超過1小時則計費50元/小時:
若使用者輸入 2.5,則 t>=1 成立,顯示「總額為:125元」。若使用者輸入0.5則不輸出任何費用訊息。
4-2-2 if-else 條件指令
若希望在條件為真時執行A區塊,為假時執行B區塊,可使用 if-else:
範例:判斷分數是否及格:
4-2-3 多重條件判斷:if-else if
當條件不只兩種時,可以透過巢狀 if-else 或 if-else if 來實現。例如,根據成績判斷等級:
條件會依序評估,一旦符合某個條件就執行對應敘述並離開判斷鏈。
4-2-4 switch 選擇指令
switch 指令適合在多種固定值情況下做判斷,而不用寫過多的else-if條件。語法:
break很重要,能防止程式繼續執行下一個case。default類似else,當沒有任何case匹配時執行此部分。
範例:選擇旅遊地點的範例:
4-3 重複結構 (Repetition Structure)
重複結構也稱迴圈結構,用來在滿足特定條件時重複執行一段程式碼。例如列印1到100的整數、生成九九乘法表、或是反覆詢問使用者輸入直到輸入正確為止。
C++提供三種基本迴圈指令:
for迴圈:適合已知確切迴圈次數的情況。while迴圈:事先測試條件,若成立才執行,不確定執行次數,但事先知道判斷條件。do-while迴圈:後測試型迴圈,至少會執行一次迴圈內程式碼後才判斷條件。
4-3-1 for 迴圈指令
for迴圈常用於計數迴圈,語法:
例如計算1+2+...+10的總和:
巢狀for迴圈則可以處理多維度的重複,如列印九九乘法表:
4-3-2 while 迴圈指令
while是前測試型迴圈,在迴圈開始前先檢查條件是否為真:
例如計算階乘n!:
若使用者輸入8,則程式會計算1!, 2!, 3!... 8! 並依序輸出。
4-3-3 do-while 迴圈指令
do-while必定先執行一次迴圈區塊,結尾再檢查條件。語法:
適合至少要執行一次的場景,例如要求使用者至少輸入一次資料:
無論如何都會先要求輸入一次,即使不符合條件也會執行一次區塊內程式,再次判斷條件後才決定是否重複。
4-3-4 迴圈控制指令:break與continue
有時在執行迴圈時,我們希望在特定條件成立時提前結束迴圈,或是跳過當前迴圈剩餘指令繼續下一輪迴圈。
-
break指令:用於立即跳出目前所在的這層迴圈或switch結構。
-
continue指令:用於略過當前迴圈剩餘指令,提前進入下一次迴圈判斷及執行。
課後評量與實務應用
在本章結尾,我們會發現所有複雜的程式邏輯組合,無非是「循序、選擇、重複」三種結構的組合。C++提供的if-else、switch、for、while、do-while、break、continue這些關鍵字與指令,使得程式設計師能以靈活且可讀性高的方式描述任意的邏輯。
程式設計師在初學時,應熟記這些基本指令的用法和特色,並多加練習如何決定何時選擇哪種結構,何時需要巢狀結構,何時應該使用break或continue來調整迴圈運作。透過不斷的練習和程式實作,最終將能輕鬆面對更複雜的程式邏輯與需求。
透過上面詳盡的解說和範例,我們已具備足夠的基礎,來面對未來更深層的程式結構與技術議題。記住,流暢的程式結構與清晰的程式流程控制,正是打造穩定、高品質程式的關鍵。
請先 登入 以發表留言。