歡迎來到程式設計的世界!

你好!歡迎來到電腦科學旅程中最令人興奮的部分之一。可以把程式設計(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!"

算術與邏輯運算子

電腦非常喜歡數學!你可以使用標準符號如 +-*(乘法)和 /(除法)。你也可以使用邏輯運算子(如 ANDORNOT)來進行數值比較。

使用函式庫常式(字串)

你不必凡事都從零開始編寫!函式庫常式(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)」的過程的一部分。你一定做得到的!