113 一般警察特考三等 警察資訊管理人員 物件導向程式設計 考古題詳解

113 年・一般警察特考・三等・警察資訊管理人員
試題代碼 物件導向程式設計

第 一 題15 分

請寫出下列 Python 程式碼的執行結果,並解析程式碼內容,說明如何得到執行結果。

class X: def init(self, a): self.a = a

def fun(self):
    self.a *= 3

class Y(X): def init(self, b): super().init(3) self.b = b

def fun(self):
    self.a += 2

obj = Y(21) obj.fun() print(obj.a, obj.b)

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

這一題的完整詳解

核心觀念

本題考查 Python 的繼承、建構子呼叫、方法覆寫與實例屬性。

  • class Y(X) 表示 Y 繼承 X。
  • super.__init__(3) 呼叫父類別 X 的建構子,將 self.a 設為 3。
  • Y 自行定義的 fun 覆寫了 X.fun。呼叫 obj.fun 時,會執行 Y.fun。
  • self.a 與 self.b 是物件的實例屬性。

解題方法

依照程式執行順序追蹤屬性值:

  1. 執行 obj = Y(21),呼叫 Y.__init__(21)。
  2. super.__init__(3) 呼叫 X.__init__(3),因此 self.a = 3。
  3. 回到 Y.__init__,執行 self.b = 21。
🔒

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

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

免費註冊

第 二 題15 分

請寫出下列 C++ 程式碼的執行結果,並解析程式碼內容,說明如何得到執行結果。

#include <stdio.h> #include <stdlib.h>

#define NUM 10

void fun1(int *, int);

int main(void) { int a[NUM] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

fun1(a, 5);
printf("\n");

return 0;

}

void fun1(int *b, int size) { if (size > 0) { fun1(b + 1, size - 1); printf("%d_", *b); } }

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

這一題的完整詳解

核心觀念

本題考遞迴函式的呼叫順序,以及陣列名稱作為函式引數時轉換成首元素指標的特性。

呼叫 fun1(a, 5) 時,a 傳入函式後成為指向 a[0] 的指標。每次遞迴呼叫都以 b + 1 傳入下一個陣列元素的位置,並將 size 減 1。size 降至 0 時停止遞迴;之後函式返回,才執行 printf,因此元素會以遞迴呼叫的反向順序輸出。

解題方法

程式的停止條件是 size > 0 不成立。從初始呼叫開始,各層參數如下:

呼叫層次b 指向的元素size後續動作
1a[0],值為 15先呼叫下一層
2a[1],值為 24先呼叫下一層
3a[2],值為 33先呼叫下一層
🔒

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

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

免費註冊

第 三 題40 分

請以物件導向語言設計一個簡易文字模式介面的班級成績計算程式。程式需包含學生(Student)與班級(Class)二個類別。

學生類別內資料需包含:

  1. 學生姓名。
  2. 中、英、數三科個別成績。
  3. 平均成績(三科成績加總除以 33)。

學生類別函數需包含:

  1. 輸入學生姓名。
  2. 輸入學生各科成績。
  3. 顯示學生姓名與成績(各科成績與平均成績)。
  4. 計算學生平均成績。

班級類別內資料需包含:

  1. 班級名稱。
  2. 學生類別資料。
  3. 班級各科平均成績與總平均成績。
  4. 總平均成績為各科平均成績加總除以 33。
  5. 班級各科成績最高分同學的姓名及成績。

班級類別函數需包含:

  1. 計算班級各科平均成績與總平均成績。
  2. 計算與顯示各科成績最高分學生的姓名及成績。

作答內容除程式碼外,亦須繪製統一塑模語言(UML)之類別圖。程式語言可採用 C++、C#、Java 或 Python。程式內變數與函數的命名必須具有可讀性,另須撰寫完整的程式碼,以驗證程式執行的正確性。

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

這一題的完整詳解

核心觀念

本題考查物件導向程式設計的類別設計、資料封裝、物件組合,以及陣列或集合的統計計算。

  • Student 負責保存一位學生的姓名、三科成績與平均成績,並提供輸入、計算及顯示功能。
  • Class 負責保存班級名稱及多位 Student 物件,並計算班級各科平均、總平均,以及各科最高分學生。
  • 班級「總平均」依題意是三科班級平均的平均:
總平均=國文平均+英文平均+數學平均3\text{總平均} = \frac{\text{國文平均}+\text{英文平均}+\text{數學平均}}{3}

這也等於所有學生三科成績總和除以學生人數再除以 33。

解題方法

採用 Python 設計兩個類別。Class 以學生串列保存多個 Student 物件,形成「一個班級包含多位學生」的組合關係。

計算流程如下:

  1. 逐一輸入學生姓名及三科成績,建立 Student 物件。
  2. 每位學生計算個人平均:三科成績加總除以 33。
  3. Class 分別加總全班各科成績,再除以學生人數,得到各科平均。
  4. 將三科班級平均加總後除以 33,得到班級總平均。
  5. 各科最高分學生以該科成績的最大值判定;若有同分最高,列出所有最高分學生。

UML 類別圖

┌──────────────────────────────────┐
│ Student │
├──────────────────────────────────┤
│ - name: str │
│ - chinese_score: float │
│ - english_score: float │
│ - math_score: float │
│ - average_score: float │
├──────────────────────────────────┤
│ + input_name: None │
│ + input_scores: None │
│ + calculate_average: float │
│ + display: None │
└──────────────────────────────────┘
 ▲
 │ 0..*
┌──────────────────────────────────┐
│ Class │
├──────────────────────────────────┤
│ - class_name: str │
│ - students: list[Student] │
│ - subject_averages: dict │
│ - overall_average: float │
│ - top_students: dict │
├──────────────────────────────────┤
│ + calculate_averages: None │
│ + calculate_and_display_tops: │
│ None │
└──────────────────────────────────┘

完整程式碼

🔒

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

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

免費註冊

第 四 題

物件導向程式設計中的單例(Singleton)設計模式,目的在確保整個系統中只有一個此類別的實例化物件,以保障在多使用者環境下關鍵資料唯一性的資料安全。請依下列類別圖實作出一個在單執行緒環境下的單例模式程式碼,且 Main 函數執行結果如下:

產品編號:1
產品名稱:個人電腦

作答可選用 C++、C#、Java 或 Python,但副檔名須依使用的程式語言來命名。

(一) 請撰寫 Program 程式碼。(15 分)

(二) 請撰寫 ProductManager 程式碼。(15 分)

(此題原卷文字擷取不全,請參考原卷)

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

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

這一題的完整詳解

核心觀念

本題考查 Singleton(單例)設計模式,要求 ProductManager 在整個程式中只建立一個實例。

實作重點如下:

  • 建構子設為 private,禁止外部使用 new ProductManager。
  • 使用 static 欄位保存唯一實例。
  • 提供公開的 Instance 屬性,讓外部取得唯一的 ProductManager 物件。
  • 使用 pid 管理產品編號,每新增一項產品便遞增 1。
  • AddProduct 建立並回傳 Product 物件。
  • 題目指定單執行緒環境,因此不需額外實作執行緒同步機制。

解題方法

類別關係如下:

  1. Program.Main 透過 ProductManager.Instance 取得管理者實例。
  2. 呼叫 AddProduct("個人電腦")。
  3. ProductManager 將產品編號由 0 遞增為 1。
  4. 建立產品物件並回傳。
  5. Program 印出產品編號與產品名稱。

(一)Program.cs 程式碼

using System;

class Program
{
 static void Main(string[] args)
 {
 ProductManager manager = ProductManager.Instance;

 Product product = manager.AddProduct("個人電腦");

 Console.WriteLine("產品編號:" + product.Id);
 Console.WriteLine("產品名稱:" + product.Name);
 }
}

(二)ProductManager.cs 程式碼

🔒

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

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

免費註冊

其他考古題