歡迎來到程式設計的世界!
你好!歡迎來到電腦科學旅程中最令人興奮的部分之一。可以把程式設計(Programming)想像成學習一門能讓你與電腦溝通的新語言。電腦雖然速度極快,但它們其實並不怎麼「聰明」——它們需要我們提供特定的「食譜」來執行任務。這份食譜就是我們所說的演算法(Algorithm),而將它寫成電腦能理解的方式,就是程式設計。
在本章中,我們將探討程式碼的基本建構模組。如果一開始覺得有點棘手,別擔心;每個人都是從零開始的,一旦你掌握了其中的邏輯,你一定會對自己能創造出的成果感到驚訝!
11.1 程式設計基礎
在編寫複雜的程式之前,我們需要先了解工具箱裡的基本工具。這些工具能幫助我們儲存資訊並與使用者進行溝通。
變數與常數
想像你有一排紙箱,每個箱子都可以存放一件資訊。
變數(Variable)就像是一個你可以隨時更改內容物的箱子。例如在遊戲中,你的「分數(Score)」就是一個變數,因為它會隨著遊戲進行而改變。
常數(Constant)則像是一個一旦放入物品就被強力膠封死的箱子。當程式執行時,其數值無法改變。例如圓周率 \( \pi \) (3.14159) 或一天中的小時數 (24) 都是常見的例子。
小撇步:請使用有意義的名稱!與其將變數命名為 x,不如命名為 userScore。這樣會讓你的程式碼可讀性大大提升。
賦值、輸入與輸出
為了讓程式運作,我們需要處理資料的流動:
- 賦值(Assignment):這是我們將數值放入變數的方法。在偽代碼(Pseudocode)中,我們使用箭頭表示:myAge ← 17。這代表「變數 myAge 現在儲存了數值 17。」
- 輸入(Input):這是程式從使用者端(通常是鍵盤)獲取資訊的方式。
範例:INPUT userName - 輸出(Output):這是程式向使用者「回話」(通常是在螢幕上)的方式。
範例:OUTPUT "Hello!"
算術與邏輯運算子
電腦非常喜歡數學!你可以使用標準符號如 +、-、*(乘法)和 /(除法)。你也可以使用邏輯運算子(如 AND、OR 和 NOT)來進行數值比較。
使用函式庫常式(字串)
你不必凡事都從零開始編寫!函式庫常式(Library routines)是預先寫好的程式碼片段。在 AS Level 中,你應該要熟悉字串處理(String manipulation)。這些功能讓你能夠拆解文字。
範例:計算字串的 LENGTH(長度),或擷取單字最左側的 3 個字元。
你知道嗎?在程式設計中,一段文字被稱為「字串(String)」,因為它就是由一連串獨立的字元(Character)像繩子一樣串聯在一起的!
重點總結:
變數用於儲存會變動的資料;常數用於儲存固定的資料。我們使用賦值來儲存數值、使用輸入來獲取資料,並使用輸出將結果呈現出來。
11.2 控制結構:控制程式流程
程式並不總是從頭到尾直線執行。有時它需要做出決策或重複執行某些任務,我們稱這些為控制結構(Control structures)。
選擇結構(決策)
這就像道路的分岔口。程式會檢查條件並決定要走哪一條路。
1. IF 敘述:用於簡單的「是/否」或「真/假」決策。
範例:IF score > 50 THEN OUTPUT "You Win!" ELSE OUTPUT "Try Again" ENDIF
2. CASE 敘述:當你有多個特定選項時使用。這比寫十個 IF 敘述要簡潔得多。想像一台自動販賣機:如果使用者按 'A',就給零食;如果按 'B',就給飲料。
迭代結構(迴圈)
有時我們需要重複執行同一項工作。與其把程式碼寫 100 次,我們可以使用迴圈(Loop)。
- FOR 迴圈(計數控制):當你確切知道要重複多少次時使用(例如:「跑 10 圈」)。
- WHILE 迴圈(前測條件):在執行程式碼之前先檢查條件。如果條件一開始就是假的,程式碼可能一次都不會執行!(例如:「只要綠燈亮著,就繼續行駛」)。
- REPEAT...UNTIL 迴圈(後測條件):先執行程式碼,然後才檢查條件。這意味著裡面的程式碼至少會執行一次。
常見錯誤:忘記在 WHILE 迴圈中修改變數。如果不修改,條件會永遠為真,導致無限迴圈(Infinite loop)並讓你的程式崩潰!
快速回顧:該用哪種迴圈?
知道確切次數?使用 FOR。
開始前需要檢查條件?使用 WHILE。
至少要執行一次?使用 REPEAT...UNTIL。
11.3 結構化程式設計
當程式變得龐大時,會變得雜亂無章。結構化程式設計(Structured programming)是一門將巨大且複雜的問題拆解為更小、易於管理之「子任務」的藝術。我們使用程序(Procedures)和函式(Functions)來達成此目的。
程序與函式
兩者都是執行特定任務的「子程式」,但有一個主要的區別:
- 程序(Procedure):執行完任務後就結束了,不會回傳任何數值給主程式。(比喻:叫某人「去整理房間」)。
- 函式(Function):執行完任務後,會回傳一個數值給主程式。(比喻:問某人「外面氣溫幾度?」—他們去檢查後,把答案帶回來給你)。
參數:傳遞資訊
當你呼叫一個程序或函式時,通常需要給它一些「初始資訊」。這些資訊稱為參數(Parameter)。傳遞參數的方式有兩種:
1. 傳值(By Value):程式製作一份資料的副本(Copy)。原始資料會受到保護且保持不變。這就像將你的作業拍照傳給別人——他們可以在照片上塗鴉,但你的原稿依然乾淨完好。
2. 傳址(By Reference):程式將原始資料的記憶體位址(Address)交給子程式。如果子程式更改了資料,原始資料也會隨之改變!這就像把房子的鑰匙交給別人——他們可以進去並移動你的家具。
關鍵術語
- 標頭(Header):程序或函式的第一行,定義了名稱與參數。
- 引數(Argument):呼叫子程式時,實際傳入的數值。
- 回傳值(Return Value):函式執行後發送回來的特定資料。
重點總結:
結構化程式設計讓程式碼更易於閱讀、測試與修正。函式會回傳數值;程序則不會。傳值是複製一份;傳址則是直接操作原始資料。
繼續練習吧!程式設計是一種透過每一行程式碼的累積而不斷進步的技能。如果程式第一次執行失敗,別擔心——這只是稱為「除錯(Debugging)」的過程的一部分。你一定做得到的!