程式控制結構

進階

任何程式邏輯都由三種控制結構組成:順序結構逐步執行,分支結構按條件選路,循環結構重複執行;配合變量、賦值與布爾條件,以偽代碼便能寫出語言中立的算法。

適合:中五資訊及通訊科技 · 單元:編程概念 · 建議學習路徑第 5/6 課

學完呢課,你會識:
  • 變量是儲存資料的具名位置,賦值把右邊算式的結果存入左邊變量。
  • 三種控制結構:順序逐步執行、分支按條件選路、循環重複執行,可層層套疊。
  • 次數已知用計數循環,次數不明用條件循環;循環變量每輪必須更新。
文體:科技知識說明文有聲朗讀

文體小知識:科技知識說明文——講解變量與賦值的基礎上,剖析順序、分支、循環三種控制結構,以偽代碼訓練語言中立的程式邏輯。

資訊及通訊科技Information & Communication Technology
讀呢課前,你應該識: 算法與流程圖

§課文原文 Passage

1程式的本質是對資料的處理:變量是儲存資料的具名位置,賦值把資料放入變量,例如把總和設為零;處理資料的指令則由控制結構安排次序。理論與實踐都證明:只需順序、分支、循環三種基本結構,便足以寫出任何邏輯的程式。

2順序結構是最基本的結構:指令按書寫次序逐一執行,上一句完成才輪到下一句。看似簡單,次序卻至關重要,例如必須先輸入分數才計算總和;又如交換兩個變量的值,需要第三個暫存變量,先後次序錯了資料便會遺失。

3分支結構讓程式按條件選擇不同路徑:單向分支只在條件成立時執行一段指令;雙向分支條件成立走一路,不成立走另一路;多向分支與巢狀分支則應付多於兩種情況,例如把分數分為甲乙丙丁等級。

4循環結構讓程式重複執行一段指令:計數循環適合次數已知的重複,例如逐個處理全班三十個分數;條件循環適合次數不明、由條件決定的重複,例如不斷要求輸入直至密碼正確。循環變量必須在迴圈內更新,否則條件永遠不變,便成死循環。

5條件由比較與邏輯運算符構成,結果是布爾值,只有成立與不成立兩種;複雜條件可用且、或、非組合。三種結構可以互相套疊:循環之內可以有分支,分支之內可以有循環,層層組合,便是解決現實問題的全部工具。

1重點摘要 Summary

任何程式邏輯都由三種控制結構組成:順序結構逐步執行,分支結構按條件選路,循環結構重複執行;配合變量、賦值與布爾條件,以偽代碼便能寫出語言中立的算法。

2生字卡 Vocabulary

v
variable變量

儲存資料的具名位置,其值可在程式執行期間改變。

a
assignment賦值

把數值或運算結果存入變量的動作,例如把總和設為總和加分數。

s
sequence順序結構

指令按書寫次序逐一執行的控制結構,是最基本的結構。

s
selection (branch)分支結構(選擇結構)

按條件成立與否選擇執行路徑的結構,有單向、雙向與多向等形式。

l
loop (iteration)循環結構

重複執行一段指令的結構,分為次數已知的計數循環與由條件控制的條件循環。

c
condition條件

由比較與邏輯運算符組成的式子,其結果只有成立與不成立兩種,用於分支與循環。

B
Boolean布爾

只有成立與不成立兩種取值的資料類型,是條件判斷的基礎。

o
operator運算符

進行運算的記號,包括算術運算符、比較運算符與邏輯運算符(且、或、非)。

i
infinite loop死循環(無限循環)

因循環條件永遠成立而無法結束的循環,多因循環變量未有更新。

n
nesting巢狀

把一種控制結構放進另一種之內,例如循環之內有分支,層層組合出複雜邏輯。

3逐步講解 Steps

  1. 第一步:變量與賦值變量可想像為一個貼了名稱的儲存格,程式執行期間可隨時讀取或更改其內容;賦值便是把資料放進變量的動作,寫法一般為變量在左、數值或算式在右。賦值會覆蓋舊值,而右邊算式可引用變量自身,例如把總和設為總和加分數,意即用新分數更新累計。舉個例子:初學者常問「總和等於總和加分數」豈非矛盾,其實右邊先用舊值算好,才存回左邊,執行一次總和便增加一個分數,這是累加的基本手法。
  2. 第二步:順序結構與次序的重要順序結構按書寫次序逐一執行指令,上一句未完成,下一句不會開始。次序錯了,結果便錯:必須先輸入人數與分數,才可計算平均;必須先把計數器設為零,才開始累加。最經典的例子是交換兩個變量的值:直接把甲設為乙,甲的原值便告消失,正確做法是先把甲存入暫存變量,再把乙設為甲,最後把暫存變量設回乙。舉個例子:以五十與二十為例逐步執行,可見暫存變量保住了五十這個原值,交換才得以完成。
  3. 第三步:分支結構——單向與雙向分支結構按條件成立與否選路。單向分支只在條件成立時執行一段指令,不成立便跳過,例如成績大於或等於五十便把及格人數加一。雙向分支則兩邊都有安排:條件成立執行一段,不成立執行另一段,例如成立輸出及格,不成立輸出不及格,兩條路必不齊做、亦不齊跳。舉個例子:判斷分數是否及格時,用雙向分支能把兩種結果都交代清楚;若只需處理及格者,例如及格才加分,用單向分支便可,題目要求決定用哪一種。
  4. 第四步:多向分支與巢狀分支情況多於兩種時,可用巢狀分支層層判斷,或多向分支一次分流。以評級為例:分數大於或等於八十為甲,六十或以上為乙,其餘為丙——巢狀寫法先判斷是否達八十,是則甲,否則再判斷是否達六十,是則乙,否則丙。巢狀必須留意層次分明,內層判斷只在外層條件不成立時才會執行。舉個例子:多個條件的次序不可隨便調換,若先判斷是否達六十,八十的分數也會被評為乙;由嚴到寬依次判斷,是多向分支的基本原則。
  5. 第五步:條件與布爾運算條件由比較運算符構成,包括大於、小於、等於、大於或等於、小於或等於與不等於,結果只有成立與不成立兩種,屬布爾值。複雜條件以邏輯運算符組合:且要求兩邊同時成立;或要求任一邊成立;非把成立與不成立倒轉。舉個例子:「分數大於或等於五十且分數小於六十」鎖定五十至五十九分的區間;「年滿十二歲或身高達一米四」則滿足其一即可,寫條件時宜先想清楚要同時滿足還是滿足其一。
  6. 第六步:計數循環與條件循環循環結構分兩類。計數循環適合次數已知的重複:設計數器由一數到全班人數,每輪輸入一個分數並累加,例如三十人便整整重複三十次。條件循環適合次數不明的重複:以 WHILE 條件控制,每輪先檢查條件,成立才繼續,例如不斷要求輸入密碼直至正確為止。兩者可互換,但次數已知時用計數循環較清晰。舉個例子:計一班平均分宜用計數循環,因為人數已知;等使用者按停止鍵才結束的輸入,則宜用條件循環。
  7. 第七步:死循環的成因與三結構的組合條件循環若在循環之內從不更新影響條件的變量,條件便永遠成立,程式永遠做不完,這是死循環;例如計數器忘記加一,條件始終少於人數。避免方法是在每輪迴圈內更新變量,確保條件最終不成立。三種結構可以套疊:循環之內放分支判斷及格,分支之內放循環重試輸入。舉個例子:統計全班分數的程式,正是順序定初值、循環讀入、循環內分支計及格人數、循環後順序輸出——四步組合,任何複雜邏輯都不外乎如此層層搭建。

4圖解 Diagrams

偽代碼 vs 流程圖:同一邏輯兩種寫法偽代碼 pseudocodeINPUT scoreIF score >= 50 THENOUTPUT "合格"ELSEOUTPUT "要加油"流程圖 flowchart開始≥50?顯示結果是否偽代碼=用普通字寫程式邏輯(唔使理語法);流程圖=畫出嚟睇流程寫程式前先寫偽代碼/畫圖——諗清楚邏輯先至落手,事倍功半
圖 1:偽代碼與流程圖

5例題示範 Example

應用題:某班完成測驗,人數以 N 表示。試以偽代碼寫出算法:逐個輸入全班分數,輸出平均分與及格人數(五十分或以上為及格),並指出所用控制結構與必須初始化的變量。

  1. 順序結構定初值:輸入人數 N;把總和 T、及格人數 P、計數器 C 都設為零——三個變量都必須初始化,否則累加與計數無從開始。
  2. 循環結構讀入全班:WHILE C 少於 N 時重複——輸入分數 S,把 T 設為 T 加 S。
  3. 分支結構判斷及格:在循環之內,若 S 大於或等於五十,便把 P 設為 P 加一(單向分支);每輪最後把 C 設為 C 加一,保證循環有限,避免死循環。
  4. 順序結構輸出結果:離開循環後,把平均 A 設為 T 除以 N,輸出 A 與 P。
  5. 答案:偽代碼:INPUT N;T 設為 0;P 設為 0;C 設為 0;WHILE C < N 重複:INPUT S;T 設為 T + S;若 S >= 50 則 P 設為 P + 1;C 設為 C + 1;ENDWHILE;A 設為 T / N;OUTPUT A;OUTPUT P。所用結構:順序(初始化與輸出)、循環(讀入全班)、分支(判斷及格);必須初始化的變量是 T、P、C。

6常見錯誤 Mistakes

✗ 把賦值敘述當作數學等式,質疑「總和設為總和加分數」不成立。
✓ 賦值是動作不是等式:右邊先用舊值計算,結果存回左邊變量,正是累加的寫法。
✗ 循環之內忘記更新計數器或循環變量。
✓ 每輪迴圈必須更新影響條件的變量,例如計數器加一,否則條件永遠成立,形成死循環。
✗ 評級判斷由寬到嚴,先判斷是否達六十才判斷是否達八十。
✓ 多向判斷應由嚴到寬:先判斷高門檻,達八十為甲,否則再判斷六十為乙,次序不可調換。
✗ 使用變量累加之前沒有設初值。
✓ 總和、計數器等累加變量必須先初始化為零,否則起點不明,結果錯誤。
✗ 以為分支的兩條路徑會先後都執行一次。
✓ 雙向分支按條件只走其一:成立走一路,不成立走另一路,兩路不會同時執行。

75 題快測 Quick check

Q1三種基本控制結構是甚麼?

Q2全班人數已知,要逐個輸入分數並計總和,宜用哪種循環?為甚麼?

Q3循環之內漏寫「計數器加一」,會發生甚麼事?

Q4條件「分數大於或等於五十且分數小於六十」涵蓋哪個分數範圍?

Q5交換變量甲與乙的值,為甚麼需要第三個暫存變量?

8重點回顧 Recap

  • 變量是儲存資料的具名位置,賦值把右邊算式的結果存入左邊變量。
  • 三種控制結構:順序逐步執行、分支按條件選路、循環重複執行,可層層套疊。
  • 次數已知用計數循環,次數不明用條件循環;循環變量每輪必須更新。
  • 條件產生布爾值,以比較運算符配合且、或、非組合複雜判斷。
  • 多向判斷由嚴到寬依次進行;累加變量使用前必須初始化為零。

同級其他科

同一科其他級別