「開始」執行後,就進入「選擇」的框框,若是往「工作 B 」的方向,工作 B 執行完就繼續往底下走,若是選擇往「工作 A 」的方向,工作 A 執行完可能會執行「工作 C 」的框框,工作 C 執行完要不繼續重複執行工作 C ,要不就繼續往下走。
這是說明程式設計大體上可以分為三種結構,分別是循序結構 (sequence structure) 、選擇結構 (selection structure) 及重複結構 (repetition structure) ,這便是結構化程式設計 (structured programming) 的概念,下圖用流程圖的方式畫出三種結構
C 語言函數內的執行方式,便是預設為循序結構,例如,我們曾經依序呼叫函數 printf()
printf("\n\n今天是 %d 月 %d 日\n", month, day); printf("現在是上午 %d:%d\n", hour, min); printf("哈囉, %s!\n\n", name);
依陳述的順序,從上而下,一個陳述執行完,再去執行另一個陳述,這便是循序結構。
選擇結構如 if 陳述,或 if-else 陳述,可以作為程式執行的分流,也可以組合成巢狀的 if-else結構。
這一章中,我們繼續發展猜數字遊戲,包括利用狀態控制遊戲。
else 後面也可以直接加上 if 陳述,形如 if-else if-if- .... else 的多重選擇機制,我們也已經遇見過另一個多重選擇的 switch-case 。
巢狀的 if-else 陳述不宜太複雜,我們先來看看如何簡化巢狀的 if-else 。
猜數字遊戲的目前版本都只能執行一次猜一次,答案也無法固定,我們可以加入 for 迴圈多猜幾次,就猜固定一個答案。
用了迴圈,就得小心無窮迴圈的陷阱。
遊戲是用時間函數回傳的秒數當答案,其實,我們可以建立自己的亂數表,既然有了亂數表,我們就來發展另一個擲骰子遊戲吧!
迴圈其實還有後測試迴圈與前測試迴圈之別,處理字串的迴圈也很常用,當然,也存在迴圈中的迴圈。
我們最後以使用者帳號的登入程式這一章講解迴圈最後的例子,其中也用到二維陣列,這是說陣列也可以當做陣列的元素。
問題與討論
- 程式可以分為哪三種結構?
- 哪些方式可以做到多重選擇?
- C 語言有幾種迴圈?試舉例說明。
- 什麼是無窮迴圈?
- 為什麼處理字串要用迴圈?
- 什麼是二維陣列
沒有留言:
張貼留言