111 高普考普通考試 資訊處理 程式設計概要 考古題詳解

111 年・高普考・普通考試・資訊處理
試題代碼 程式設計概要

第 一、(一) 題10 分

以下是完整的 C# 程式碼,請回答程式執行結果為何?

internal class Program { static void Main(string[] args) { float p = 5.5f; int r = calc_square(p); Console.WriteLine(String.Format("Result:{0}", r)); }

static int calc_square(float param)
{
    int result = (int)(param * param);
    return result;
}

}

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

  1. 浮點數運算(Floating-Point Arithmetic):單精準度浮點數(float)的數值相乘與資料型態表現。
  2. 明確型別轉換(Explicit Type Casting):在 C# 中,將浮點數(float、double)強制轉型為整數(int)時,採用向零截斷(Truncation toward zero,即直接捨去小數部分),而非四捨五入。
  3. 字串格式化與標準輸出(String Formatting):String.Format 的複合格式化語法 {0} 替換機制,以及 Console.WriteLine 的換行輸出。

解題方法

本題採程式碼逐步追蹤(Code Tracing)切入分析:

  1. 進入程式進入點 Main:
  • 宣告單精準度浮點數變數 pp 並賦值:float p = 5.5f;。
  • 呼叫靜態方法 calc_square(p),將 pp 的值(5.55.5)以傳值方式(Pass by Value)傳入函式。
  1. 執行方法 calc_square(float param):
  • 參數 param 接收到數值 5.55.5。
  • 執行運算式 (param * param): 5.5×5.5=30.255.5 \times 5.5 = 30.25 運算結果之資料型態為 float(值為 30.25f30.25\text{f})。
  • 執行強制轉型 (int)(param * param): 在 C# 規格中,浮點數型別強制轉換為整數型別時,會自動將小數部分截斷(無條件捨去):
🔒

後續完整解題步驟與【答案】

免費註冊,享 3 天全站完整詳解閱覽。

免費註冊

第 一、(二) 題10 分

以下是完整的 C# 程式碼,請回答程式執行結果為何?

static void Main(string[] args) { float rate = 2.5f; float amount = 10f; computing(rate, ref amount); Console.WriteLine( String.Format("Rate: {0}, Amount: {1}", rate, amount)); }

static void computing(float rate, ref float amt) { rate *= 10; amt *= rate; }

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題的核心考點為 C# 的參數傳遞機制(Parameter Passing Mechanisms) 與 變數作用域(Variable Scope),並輔以基礎的浮點數格式化輸出規則:

  1. 傳值呼叫(Call by Value / Pass by Value):
  • C# 的實值型別(Value Types,如 float、int 等)在預設情況下採用傳值傳遞。
  • 呼叫端(Main)將引數的值複製一份給被呼叫端(computing)的區域參數。被呼叫端在函式內對該參數的修改,僅影響其區域堆疊(Stack)中的複本,不會回傳或影響呼叫端的原始變數。
  1. 傳參考呼叫(Call by Reference / Pass by Reference,ref 關鍵字):
  • 參數前若加上 ref 修飾詞,傳遞的是該變數的記憶體位址(Reference / Alias)。
  • 被呼叫端的參數與呼叫端的引數共用同一個記憶體空間。被呼叫端對該參數的任何運算與修改,會直接同步反映在呼叫端的原始變數上。
  1. C# 浮點數預設字串格式化:
  • float 在未指定小數位數格式(使用預設一般格式 G)轉為字串時,若數值為整數,不會自動補尾隨零(Trailing Zeros)或小數點;例如 250f 轉為字串會呈現 "250",而 2.5f 則呈現 "2.5"。

解題方法

本題為程式追蹤題,採逐步追蹤記憶體狀態法(Trace Table)進行推導:

步驟一:Main 函式初始化變數

  1. float rate = 2.5f;:於 Main 的堆疊配置變數 rate,其值為 2.52.5。
  2. float amount = 10f;:於 Main 的堆疊配置變數 amount,其值為 10.010.0。

步驟二:呼叫 computing(rate, ref amount)

  • 第一個引數 rate:以**傳值(By Value)**傳入,被呼叫端建立獨立複本參數 rate = 2.5。
  • 第二個引數 ref amount:以**傳參考(By Reference)**傳入,參數 amt 成為 Main 中 amount 的別名(共用同一記憶體位址)。

步驟三:執行 computing 函式內部敘述

  1. rate *= 10;
  • 將區域參數 rate 乘以 1010: rate=2.5×10=25.0\text{rate} = 2.5 \times 10 = 25.0
  • 注意:此變更僅存在於 computing 函式的區域複本中。
  1. amt *= rate;
  • 將 amt 乘以當前區域變數 rate(即 25.025.0):
🔒

後續完整解題步驟與【答案】

免費註冊,享 3 天全站完整詳解閱覽。

免費註冊

第 二、(一) 題10 分

目前以瀏覽器為主的應用程式大多以 JavaScript 進行前端程式的設計,請閱讀以下各列程式碼,並回答每一列程式碼的意義。

  1. let iconList = [];

  2. for (const extId of fs.ls("/extension")) {

  3.   let extension = fs.read(/extension/${extId}/extension.js);

  4.   ext = eval(extension);

  5.   iconList.push(fs.read(/extension/${extId}/${ext.icon}));

  6. }

  7. for (const [index, element] of Object.entries($("span .treeIcon"))) {

  8.   if (typeof element === "object") {

  9.     (element).append(‘<imgsrc="(element).append(`<img src="{iconList[index]}">`);

  10.   }

  11. }

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題為典型的 JavaScript 與前端 DOM 操作之綜合語法試題,涵蓋以下核心觀念:

  1. 變數宣告與資料結構:使用 let、const 進行區塊作用域(Block Scope)宣告,以及動態陣列(Array)與物件(Object)之建立與操作(如 push 方法)。
  2. ES6+ 迭代語法與物件拆解:
  • 樣板字面值(Template Literals):以反引號(‘\text{`})與 ${} 進行動態字串內插。
  • for...of 迴圈:遍歷可迭代物件(Iterable)。
  • Object.entries 與解構賦值(Destructuring Assignment):將物件的鍵值對(Key-Value pairs)拆解為 [key, value] 陣列形式。
  1. 動態程式碼執行:內建全域函式 eval 的運作機制,將字串解析並作為 JavaScript 程式碼即時執行。
  2. 類檔案系統 API(Mock / Extension FileSystem):透過虛擬或自定義檔案系統物件 fs 進行目錄走訪(ls)與檔案讀取(read)。
  3. jQuery DOM 選取與渲染機制:
  • jQuery 選擇器語法(層級選擇器 $("span .treeIcon"))。
  • jQuery 物件的「類陣列(Array-like)」特性與屬性過濾(透過 typeof 篩選真正的 DOM 物件)。
  • .append 於指定節點動態插入 HTML 元素。

解題方法

解答「逐列說明程式碼意義」題型時,評分重點在於精確指出關鍵語法機制、API 輸入輸出、變數狀態變化,以及該列在整體演算法流程中的功能定位,切忌僅提供字面直譯。

解題架構切入分為兩大處理階段:

  • 階段一(第 1 至 7 列):外掛程式掃描與圖示載入 走訪 /extension 根目錄下的所有外掛資料夾,讀取其設定檔 extension.js,透過 eval 解析出外掛物件以取得圖示檔案路徑,最後將讀取到的圖示資料依序彙整至全域陣列中。
  • 階段二(第 9 至 13 列):DOM 節點過濾與圖示動態渲染 以 jQuery 選取所有具備 .treeIcon 類別的 DOM 節點,利用 Object.entries 展開其內部屬性,經型別檢查排除非 DOM 元素之內建屬性後,依序將對應的圖示以 <img> 標籤動態附加至畫面上。

選項分析

本題為非選擇題(程式碼逐行釋義簡答題),無選項需進行是非辨析。評分關鍵在於能否精準識別各行程式碼之語言特性與邊界陷阱(詳見【答案】中的逐列完整解析)。


解題技巧

  1. 掌握第 10 列的「過濾陷阱」: jQuery 物件 `
🔒

後續完整解題步驟與【答案】

免費註冊,享 3 天全站完整詳解閱覽。

免費註冊

第 二、(二) 題10 分

以下程式碼請依執行先後說明執行的結果。

  1. <button onclick="dialog()">Confirm</button>

  2. <p id="result"></p>
  3. <script>
  4.   window.addEventListener('load', function () {

  5.     alert('Hello!');

  6.   })

  7.   function dialog() {

  8.     var message;

  9.     if (confirm("Press a button!")) {

  10.       message = "You pressed OK!";

  11.     } else {

  12.       message = "You pressed Cancel!";

  13.     }

  14.     document.getElementById("result").innerHTML = message;

  15.   }

  16. </script>

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題屬於 Web 前端技術(HTML 與 JavaScript)的程式追蹤題,核心在於測驗考生對 JavaScript 執行時序(Execution Order)、事件驅動模型(Event-Driven Model) 與 DOM 操作 的理解:

  1. 網頁載入生命週期與 load 事件:window.addEventListener('load', ...) 會在整份網頁資源(含 DOM 結構、樣式表、圖片等)載入完成後自動觸發回呼函式(Callback Function)。
  2. 瀏覽器原生對話方塊(Dialogs):
  • alert(message):顯示提示訊息視窗,僅有「確定」按鈕,使用者確認後程式方繼續往下執行。
  • confirm(message):顯示確認訊息視窗,提供「確定」與「取消」按鈕;按下「確定」回傳布林值 true,按下「取消」回傳 false。
  1. DOM 操作與事件綁定:按鈕透過 HTML 屬性 onclick="dialog" 綁定點擊事件;document.getElementById("result").innerHTML 則用於將字串寫入指定 id 的 HTML 標籤內。

解題方法

本題必須依照時間先後順序與使用者的操作行為進行階段式推導:

階段一:網頁初始載入(Page Load)

  1. 瀏覽器解析 HTML 標籤,在畫面上建立:
  • 一個顯示文字為 Confirm 的按鈕。
  • 一個內容為空的段落元素 <p id="result"></p>。
  1. 執行 <script> 內的程式碼:註冊 load 事件監聽器並宣告 dialog 函式。
  2. 當網頁完全載入完成時,觸發 load 事件,立即執行匿名函式:
  • 瀏覽器跳出警告視窗(Alert),顯示文字:Hello!。
  • 使用者按下「確定」關閉視窗後,頁面停留於初始畫面。

階段二:使用者點擊按鈕(Button Click)

當使用者點擊畫面上的 Confirm 按鈕時,觸發 onclick 事件並呼叫 dialog 函式:

  1. 執行 confirm("Press a button!"):
  • 瀏覽器跳出確認視窗,顯示訊息 Press a button!,並提供「確定(OK)」與「取消(Cancel)」按鈕。
  1. 根據使用者在確認視窗中的選擇,產生兩種分支結果:
  • 分支 A(點擊「確定 / OK」):
  • confirm 回傳 true,進入 if 區塊。
  • 變數 message 被賦值為 "You pressed OK!"。
  • 分支 B(點擊「取消 / Cancel」):
🔒

後續完整解題步驟與【答案】

免費註冊,享 3 天全站完整詳解閱覽。

免費註冊

第 三 題20 分

請使用 C、C++、C#、Java 或 Python 程式語言撰寫一支完整的程式,將班級學生的百分制成績轉換為等第制成績,轉換的規則如下:

百分制成績等第制成績
成績 ≥\geq(平均數 ++ 2 個標準差)A
(平均數 ++ 1 個標準差)≤\leq 成績 <<(平均數 ++ 2 個標準差)B
平均數 ≤\leq 成績 <<(平均數 ++ 1 個標準差)C
(平均數 −- 1 個標準差)≤\leq 成績 << 平均數D
(平均數 −- 2 個標準差)≤\leq 成績 <<(平均數 −- 1 個標準差)E
成績 <<(平均數 −- 2 個標準差)F

程式執行需讓使用者輸入班級所有學生的百分制成績,成績以空白格隔開;程式再將班級的平均成績、變異數與標準差、每位學生的編號、百分制成績與等第制成績列印出。

程式可使用所採用之程式語言的統計函數、模組或套件來求算平均成績、變異數與標準差。以下為程式執行之參考範例。

備註:斜體加外框線之整數為使用者所輸入,其餘皆為程式執行的輸出。

請輸入班級修課學生的百分制成績(以空白格隔開):100 90 80 70 60 50 40 30 20 10

班級平均成績=55

班級變異數成績=825

班級標準差成績=28.72

第 1 位學生的百分制成績=100,等第制成績=B

第 2 位學生的百分制成績=90,等第制成績=B

第 3 位學生的百分制成績=80,等第制成績=C

第 4 位學生的百分制成績=70,等第制成績=C

第 5 位學生的百分制成績=60,等第制成績=C

第 6 位學生的百分制成績=50,等第制成績=D

第 7 位學生的百分制成績=40,等第制成績=D

第 8 位學生的百分制成績=30,等第制成績=D

第 9 位學生的百分制成績=20,等第制成績=E

第 10 位學生的百分制成績=10,等第制成績=E

🖼️ 本題原卷含圖表。基於試題來源之版權考量,本站不轉載原卷影像; 題目文字已完整轉錄,圖表請自行參閱考選部公告之試題原檔。

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考查輸入資料處理、描述統計量計算,以及依門檻進行分級判斷。

令班級有 nn 位學生,成績為 x1,x2,…,xnx_1,x_2,\ldots,x_n,班級平均數、變異數與標準差定義如下:

μ=1n∑i=1nxi,σ2=1n∑i=1n(xi−μ)2,σ=σ2\mu=\frac{1}{n}\sum_{i=1}^{n}x_i,\qquad \sigma^2=\frac{1}{n}\sum_{i=1}^{n}(x_i-\mu)^2,\qquad \sigma=\sqrt{\sigma^2}

範例的變異數使用母體變異數,分母為 nn;若使用樣本變異數,分母會是 n−1n-1,計算結果便不符合題目範例。

解題方法

先將使用者輸入的空白分隔成績轉為數值,再計算平均數、母體變異數與標準差。接著依照各區間的上下界,逐一判定每位學生的等第。程式使用 Python statistics 模組的 mean、pvariance 與 pstdev 函數。

以題目輸入的 10 筆成績為例:

μ=100+90+80+70+60+50+40+30+20+1010=55\mu=\frac{100+90+80+70+60+50+40+30+20+10}{10}=55 σ2=(100−55)2+(90−55)2+⋯+(10−55)210=825\sigma^2=\frac{(100-55)^2+(90-55)^2+\cdots+(10-55)^2}{10}=825 σ=825≈28.72\sigma=\sqrt{825}\approx28.72

因此,各級距的分界為:

  • μ+2σ≈112.44\mu+2\sigma\approx112.44
  • μ+σ≈83.72\mu+\sigma\approx83.72
  • μ=55\mu=55
  • μ−σ≈26.28\mu-\sigma\approx26.28
  • μ−2σ≈−2.44\mu-2\sigma\approx-2.44

例如,100 分落在 83.72≤成績<112.4483.72\leq成績<112.44,所以是 B;80 分落在 55≤成績<83.7255\leq成績<83.72,所以是 C。

Python 程式

🔒

後續完整解題步驟與【答案】

免費註冊,享 3 天全站完整詳解閱覽。

免費註冊

第 四 題20 分

問卷常被使用來進行服務滿意度調查,以下數據是某單位資訊中心新系統使用的滿意度調查結果,數值為人次。請以 Python 程式製作一張圓餅圖,圖上須顯示出百分比及標籤。

非常滿意:65

滿意:97

普通:103

不滿意:45

非常不滿意:51

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題評量 Python 在「資料視覺化」(Data Visualization)領域的基礎應用能力,屬於公職考試資訊處理類科近年極為常見的實務應用題型。

  1. 核心套件:Python 資料視覺化主流標準函式庫 matplotlib.pyplot。
  2. 核心函式:plt.pie 圓餅圖繪製函式。
  3. 關鍵參數:
  • 數值串列(x):代表各扇區大小的人次資料。
  • 標籤參數(labels):對應各扇區的文字標籤。
  • 百分比顯示格式(autopct):格式化字串(Format String),由系統自動依數值佔總和之比例計算百分比並格式化輸出。

解題方法

本題解題切入點為運用最簡潔且具備高可讀性的 Python 程式碼滿足題目要求的「圓餅圖」、「顯示百分比」與「顯示標籤」三大要件。

  1. 模組匯入:匯入 matplotlib.pyplot 並命名為標準慣用別名 plt。
  2. 資料結構建立:
  • 定義滿意度分類標籤串列:labels = ['非常滿意', '滿意', '普通', '不滿意', '非常不滿意']。
  • 定義對應人次數值串列:sizes = [65, 97, 103, 45, 51]。
  1. 百分比計算邏輯: 總人次 N=65+97+103+45+51=361N = 65 + 97 + 103 + 45 + 51 = 361。 各項目百分比公式為: Pi=xi∑k=1nxk×100%P_i = \frac{x_i}{\sum_{k=1}^{n} x_k} \times 100\% 在 matplotlib 中,設定參數 autopct='%1.1f%%' 即可由系統自動完成上述計算,並將浮點數格式化保留至小數點後第一位,結尾顯示 % 符號。
  2. 圖表繪製與顯示:
  • 呼叫 plt.pie(sizes, labels=labels, autopct='%1.1f%%') 繪圖。
  • 加入圖表標題 plt.title 提升圖表完整度。
  • 呼叫 plt.show 輸出圖形。

選項分析

本題為非選擇題(程式撰寫題),無選項。針對評分標準中必備的程式碼核心組成元件逐一分析如下:

  • import matplotlib.pyplot as plt:必備。若漏寫套件匯入,程式無法執行,必遭扣分。
  • labels=labels 參數:必備。題旨明定「圖上須顯示出標籤」,若未設定此參數,圖形將僅有色塊而無類別文字。
  • autopct='%1.1f%%' 參數:必備。
🔒

後續完整解題步驟與【答案】

免費註冊,享 3 天全站完整詳解閱覽。

免費註冊

第 五、(一) 題10 分

以下為 Python 完整程式碼,請回答執行的結果為何?

class Employee: all = []

def __init__(self, idno, first_name, last_name):
    self.id = idno
    self.first_name = first_name
    self.last_name = last_name
    Employee.all.append(self)

def __repr__(self):
    return f"ID={self.id}, Name={self.first_name} {self.last_name}"

if name == "main": e1 = Employee('001', 'Peter', 'Lee') e2 = Employee('002', 'Ann', 'Lo') print(Employee.all)

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題主要測驗 Python 物件導向程式設計(Object-Oriented Programming, OOP)的核心機制,包含以下重點:

  1. 類別屬性(Class Attribute)與實例共用性: 在類別本體內、方法外宣告的變數(如 all = [])為類別屬性,由該類別所建立的所有實例(Instances)共同享有同一份記憶體參照,而非每個實例獨立擁有。
  2. 初始化方法(__init__ Constructor): 每當透過 Employee(...) 產生物件實例時,Python 會自動呼叫 __init__ 方法。利用 Employee.all.append(self),可將當前建立的實例(self)自動註冊至類別層級的清單中。
  3. 物件表現形式(__repr__ 魔術方法): __repr__ 用於定義物件的「官方字串表示形式」。當印出包含物件的容器(例如本題的 list)時,Python 內部會逐一呼叫容器內各元素的 __repr__ 來呈現內容。
  4. 格式化字串常值(f-string): 以 f"..." 語法進行變數字串替換,將物件屬性值直接內插至字串中。

解題方法

按照程式執行流程逐步追蹤(Trace):

  1. 類別載入階段: 解析 class Employee,初始化類別屬性 Employee.all = [](指向一個空的串列)。

  2. 主程式進入點(if __name__ == "__main__":):

  • 建立物件 e1: 執行 e1 = Employee('001', 'Peter', 'Lee')。
  • 傳入參數:idno = '001', first_name = 'Peter', last_name = 'Lee'。
  • 物件屬性賦值:e1.id = '001', e1.first_name = 'Peter', e1.last_name = 'Lee'。
  • 執行 Employee.all.append(self):將 e1 加入清單。
  • 此時 Employee.all 內容為 [e1]。
  • 建立物件 e2: 執行 e2 = Employee('002', 'Ann', 'Lo')。
🔒

後續完整解題步驟與【答案】

免費註冊,享 3 天全站完整詳解閱覽。

免費註冊

第 五、(二) 題10 分

以下為 C# 的類別程式碼,類別 Employee 內的欄位不可以由非繼承的類別讀取或寫入,請檢視此程式是否可以正確執行?若無法正確執行的話,請寫出正確的程式碼。

public abstract class Employee { private string id; private string name; private int age;

public Employee()
{
}

}

public class Staff : Employee { public Staff(string _id, string _name, int _age) { this.id = _id; this.name = _name; this.age = _age; } }

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題的核心考點為物件導向程式設計(OOP)中的**封裝性(Encapsulation)與存取修飾詞(Access Modifiers)的可見度範圍,以及類別繼承(Inheritance)**時子類別對父類別成員的存取權限。

在 C# 語言中,常用的成員存取修飾詞定義如下:

  • private(私有):僅能在宣告該成員的類別本體內部存取。即使是繼承該類別的子類別(衍生類別),亦無法直接讀取或寫入。
  • protected(受保護):僅限於宣告該成員的類別本身,以及其「衍生類別(子類別)」內部存取;其他非繼承的類別皆無法讀取或寫入。
  • public(公開):完全開放存取,不受任何類別或組件限制。

解題方法

  1. 檢驗程式碼之執行性:
  • 在原始程式碼中,基底類別 Employee 將欄位宣告為私有成員:
private string id;
private string name;
private int age;
  • 子類別 Staff 繼承自 Employee,並於建構子中嘗試直接存取並指派這些欄位:
this.id = _id;
this.name = _name;
this.age = _age;
  • 依據 C# 語法規則,衍生類別不可直接存取基底類別的 private 成員。因此,此程式在編譯時期就會產生錯誤(例如:CS0122: 'Employee.id' is inaccessible due to its protection level),無法通過編譯,更無法正確執行。
  1. 修正切入點:
  • 題目明確規範:「類別 Employee 內的欄位不可以由非繼承的類別讀取或寫入」。
  • 該條件即為存取修飾詞 protected 的標準定義(僅自身與繼承類別可存取,非繼承類別皆阻擋)。
  • 將 Employee 類別內 id、name、age 的存取修飾詞由 private 改為 protected,即可同時滿足題目設定的存取權限限制,並使子類別 Staff 能合法存取該欄位,讓建構子指派敘述編譯成功。

選項分析(程式碼診斷與錯誤追蹤)

  • 基底類別宣告 public abstract class Employee:
  • 正確。宣告為抽象類別(abstract),代表不可直接實例化,專門作為衍生類別繼承使用,語法與設計語意皆合規。
  • 基底類別欄位宣告 private string id; private string name; private int age;:
  • 錯誤。
🔒

後續完整解題步驟與【答案】

免費註冊,享 3 天全站完整詳解閱覽。

免費註冊

其他考古題