110 專技高考高等考試 資訊技師 程式設計 考古題詳解

110 年・專技高考・高等考試・資訊技師
試題代碼 程式設計

第 一 題20 分

假設有一家新成立不久的 L 公司,欲進行員工基本資料的建立。其基本資料包括有 ID(所有員工一旦被招募進入公司的第一天,就會給予一個 ID(數字))、姓(Last name)、名(First name)、年齡和月薪。

請利用 Java 或 C++ 實作一完整程式,可以在命令行(command line)依序傳入一系列的所有員工基本資料,並將其存入一個文字檔中(例如「salary.txt」)。最後,也能夠算印出當月所有員工薪水加總之後的總平均、最低薪水和最高薪水(三者均為浮點數,取到小數第一位)。

請適當地加入例外處理,讓使用者能夠依其需求,連續地在控制台輸入資料。亦即若其中有資料格式不符,可以印出例如「Invalid input! Try again!」或「輸入資料格式不符,請重新輸入!」的警示語,隨後程式還可以繼續進行到所有的資料輸入正確為止(例如使用者可以到最後才打入結束指標(end-of-file indicator)結束繼續輸入)。

一旦輸入結束,即提示或告知檔案已關閉(File Close),並進行「總員工人數」、「總平均薪水」、「最低薪水」和「最高薪水」的印出顯示。

以下是利用 Java 實作時的執行範例。請使用 Java 或 C++ 的語法撰寫程式碼。

假如未有任何的輸入:

Enter Employee ID, Last name, First name, and Monthly-salary
(Enter end-of-file indicator(CTRL+Z) to end input.)
?
close file
Silly! Nothing input!

正確輸入及最後執行的結果:

Enter Employee ID, Last name, First name, and Monthly-salary
(Enter end-of-file indicator(CTRL+Z) to end input.)
? 羅 ○華 56789
Invalid input.Try again!
? 1 羅 ○華 56789
? 2 林 ○曾 3456a
Invalid input.Try again!
? 2 林 ○曾 34567
? 3 劉 ○俊 23488
? 4 林 ○君 56789
? 5 方 ○滿 55555
?
close file
There are 5 employees considered
Average Salary in this month: 45437.6
Highest Salary in this month: 56789.0
Lowest Salary in this month: 23488.0

存到「salary.txt」裡的內容為:

1 羅 ○華 56789.0
2 林 ○曾 34567.0
3 劉 ○俊 23488.0
4 林 ○君 56789.0
5 方 ○滿 55555.0

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

這一題的完整詳解

核心觀念

本題考查命令列輸入、資料驗證、文字檔輸出、例外處理與統計計算:

  • 逐筆輸入與結束條件:每筆資料包含員工 ID、姓、名、月薪;使用者輸入 EOF(例如 Windows 控制台的 Ctrl+Z,再按 Enter)結束輸入。
  • 資料驗證:ID 與月薪須為數字。格式錯誤時顯示警告,略過該筆並繼續讀取。
  • 檔案輸出:每筆有效資料寫入 salary.txt。
  • 統計公式:若有效員工數為 nn,薪水總和為 SS,則平均薪水為 S/nS/n;另以逐筆比較求最高與最低薪水。三個薪水統計值均格式化至小數第一位。

題目範例沒有輸入年齡;因此依範例欄位,程式以 ID、姓、名、月薪作為輸入資料。每筆資料以空白分隔。

解題方法

採用「逐行讀取、逐筆驗證、有效才寫檔並更新統計」的流程:

  1. 用 BufferedReader 逐行讀取控制台輸入。輸入空白行時忽略;遇到 EOF 時結束。
  2. 每行必須恰有四個欄位,並確認 ID、月薪可解析為數字;月薪須為非負數。
  3. 欄位不符時顯示錯誤訊息,不寫入檔案,也不計入統計。
  4. 有效資料寫入檔案,同時累加薪水總和並更新最高、最低薪水。
  5. 輸入結束後關閉檔案,再依有效員工數決定輸出統計值或「沒有輸入資料」訊息。

Java 參考程式

🔒

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

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

免費註冊

第 二 題30 分

假設臺灣 XX 食品技師協會欲針對各類「生鮮食材新鮮度」的判定,能夠依據較科學性的方法,乃打算研發出一套能夠應用「色彩計畫」進行食材「自然顏色與光澤外觀」和「新鮮度」關係等級的對照表資料庫。

為達到此目標,乃擬定先期先發展出一套色彩轉換雛型系統程式。此系統得符合下列幾項基本的使用要求和程序:

  1. 輸入所收集到「用相機所拍攝到的食材的 RGB 值」(所使用的相機已被精確校正,其所拍攝到 RGB 即代表真實色);
  2. RGB 的 3 個頻道值範圍均在 0~255 之間;
  3. 為了讓此系統的使用者能對色澤外觀有較直觀的感覺和判別,得將 RGB 值轉成和「人眼視覺三層性(Hue 色相、Saturation 飽和度、Value 明暗度)」相關的 HSV 色彩空間的表示法;
  4. 可以輸入每筆建築相關顏色 RGB;隨後,即進行計算轉換成 HSV 值後,再將相關的 RGB 和 HSV 值輸出顯示。

假設你就是此套系統的雛型開發師,請利用 Java 或 C++ 撰寫一個以「圖形使用者介面」(Graphical User Interface, GUI)設計,並以 RGBbase 為超類別(Superclass)和 HSV_ColorSpace 為繼承的子類別之系統程式。(30 分)

以下是利用 Java 和 JFrame 實作時的執行範例。

提示:

  1. 在此作答中,RGB 轉換成 HSV 的方法(Method)或函式(Function)不需要實踐,僅以黑箱的方式處理即可,例如:

Public void RGB_to_HSV(double rValue, double gValue, double bValue){...}

  1. Target Color 的顯示以及其他元件(例如 labels 文字)全部就用 Default 的顏色(或文字字型和大小)設定,在此只是用來直觀視覺式的 Demo 輔助,你不需要實踐程式碼。

🖼️【此處有附圖,請對照原卷】

圖中初始畫面包含:

R Value:50
G Value:50
B Value:190
Target Color

輸入錯誤時顯示視窗:

Input Error in RGB Values

For input string: "a"

正確執行後顯示:

RGB Values = (50.0, 50.0, 190.0)
HSV Values = (240.0, 73.7, 74.5)

介面包含 Compute & Show、Clear All 及 Close 按鈕。

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

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

這一題的完整詳解

核心觀念

本題主要考三件事:Java 類別繼承、Swing 圖形介面與事件處理,以及輸入資料的解析和範圍檢查。

RGBbase 儲存 RGB 三個頻道值;HSV_ColorSpace 繼承 RGBbase,負責提供 RGB 轉 HSV 的方法。題目允許將轉換方法視為黑箱,因此程式只需安排呼叫方法及顯示轉換結果。

RGB 轉 HSV 常用的定義為:令 R′=R/255R'=R/255、G′=G/255G'=G/255、B′=B/255B'=B/255,並令 M=max⁡(R′,G′,B′)M=\max(R',G',B')、m=min⁡(R′,G′,B′)m=\min(R',G',B')、Δ=M−m\Delta=M-m,則明度 V=100MV=100M,飽和度在 M≠0M\ne 0 時為 S=100Δ/MS=100\Delta/M。色相 HH 依最大頻道決定;題目範例中藍色頻道最大,因此 H=60∘((R′−G′)/Δ+4)H=60^\circ((R'-G')/\Delta+4)。

解題方法

介面提供三個文字欄位輸入 RGB,按下 Compute & Show 後依序解析數值、檢查是否在 00 至 255255 範圍、設定目標色,呼叫 RGB 轉 HSV 方法,最後顯示 RGB 與 HSV。若輸入不是整數,使用 NumberFormatException 捕捉並顯示錯誤訊息。

以下程式將轉換方法保留為黑箱,與題目提示相符;實際 HSV 數值由該黑箱程序設定。以題目範例輸入 R=50R=50、G=50G=50、B=190B=190 時,顯示結果為 H=240.0H=240.0、S=73.7S=73.7、V=74.5V=74.5。

🔒

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

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

免費註冊

第 三 題25 分

請使用 Java 或 C++ 語法撰寫「Switch 敘述流程控制」為主的水果超商計價程式碼。

這個程式會列出四種(例如蘋果、木瓜、香蕉和西瓜)所銷售的水果名稱做選擇,並同時要求輸入其量秤所得的磅重。每輸入一筆資料(水 果名稱代碼和量秤磅重)後,即會印出該筆售價。隨後會再要求使用者繼續輸入下一筆不同的水果資料,直到此相關購買資料全部輸入完成。最後,再列出該交易的總售價金額。

以下是利用 Java 實作時的執行範例。(25 分)

🖼️【此處有附圖,請對照原卷】

執行範例:

Type the end-of-file indicator to terminate input:
On UNIX/Linux/macOS type <Ctrl> d then press Enter
On Windows type <Ctrl> z then press Enter

1)Enter the fruit type Chosen (integer values in the range 1-4) AND 2)Pounds weighted
1:Apple(20/pound) 2:Banana(10/pound) 3:Papaya(30/pound) 4:Watermelon(10/pound)
? 1 10
Apple price:200.0

1)Enter the fruit type Chosen (integer values in the range 1-4) AND 2)Pounds weighted
1:Apple(20/pound) 2:Banana(10/pound) 3:Papaya(30/pound) 4:Watermelon(10/pound)
? 3 20
Papaya price:600.0

1)Enter the fruit type Chosen (integer values in the range 1-4) AND 2)Pounds weighted
1:Apple(20/pound) 2:Banana(10/pound) 3:Papaya(30/pound) 4:Watermelon(10/pound)
? 2 5
Banana price:50.0

1)Enter the fruit type Chosen (integer values in the range 1-4) AND 2)Pounds weighted
1:Apple(20/pound) 2:Banana(10/pound) 3:Papaya(30/pound) 4:Watermelon(10/pound)
? 4 10
Watermelon price:100.0

1)Enter the fruit type Chosen (integer values in the range 1-4) AND 2)Pounds weighted
1:Apple(20/pound) 2:Banana(10/pound) 3:Papaya(30/pound) 4:Watermelon(10/pound)
?
Selling Report:
Total selling price is 950

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

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

這一題的完整詳解

核心觀念

本題主要考查 switch 分支選擇、重複輸入與累計總額。每筆資料包含水果代碼與磅重,依代碼查出單價後計算該筆售價,再加入交易總額。

計算公式為:

該筆售價=單價×磅重\text{該筆售價}=\text{單價}\times\text{磅重} 交易總額=∑每筆售價\text{交易總額}=\sum \text{每筆售價}

題目指定以輸入結束符號表示資料輸入完成;Java 可用 Scanner.hasNextInt 判斷是否還有下一筆水果代碼。

解題方法

程式以迴圈逐筆讀取資料,每次先顯示水果選單,再輸入代碼與磅重。switch 依代碼設定水果名稱及單價,接著計算並輸出該筆售價,並將售價累加至總額。當輸入結束時,離開迴圈並輸出交易總額。

以下程式假設輸入為整數代碼 1 至 4,磅重為數值;遇到無效代碼時會提示並略過該筆。

🔒

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

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

免費註冊

第 四 題25 分

請依據下列 Java 程式碼執行後,回答輸出結果為何?(25 分)

public class CollectionArrayList4Colors { public static void main(String[] args) { String[] colors = { "RED", "Green", "BLUE", "CYAN", "MAGENTA", "YELLOW", "WHITE", "GRAY", "BLACK" }; List<String> list = new ArrayList<String>();

    for (String color : colors) {
        list.add(color);
    }

    System.out.println("ArrayList: ");
    for (int count = 0; count < list.size(); count++) {
        System.out.printf("%s ", list.get(count));
    }

    String[] removeNeutrals = { "GRAY", "BLACK", "WHITE" };
    List<String> removeList = new ArrayList<String>();
    for (String color : removeNeutrals) {
        removeList.add(color);
    }

    removeColors(list, removeList);
    convertToLowercaseStrings(list);

    System.out.printf("%n%nArrayList after converting to Lowercase and calling removeColors:%n");

    for (String color : list) {
        System.out.printf("%s ", color);
    }
}//end main

private static void removeColors(Collection<String> collection1,
                                  Collection<String> collection2) {
    Iterator<String> iterator = collection1.iterator();

    while (iterator.hasNext()) {
        if (collection2.contains(iterator.next())) {
            iterator.remove();
        }
    }
}//end removeColors

private static void convertToLowercaseStrings(List<String> list) {
    ListIterator<String> iterator = list.listIterator();

    while (iterator.hasNext()) {
        String color = iterator.next();
        iterator.set(color.toLowerCase());
    }
}//end convertToLowercaseStrings

}//end class CollectionArrayList4Colors

輸出結果:

ArrayList:
RED Green BLUE CYAN MAGENTA YELLOW WHITE GRAY BLACK

ArrayList after converting to Lowercase and calling removeColors:
red green blue cyan magenta yellow

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

這一題的完整詳解

核心觀念

本題考查 Java 集合框架中 ArrayList 的新增、走訪、刪除與修改:

  • ArrayList 會依新增順序保存元素。
  • Collection.contains(x) 會檢查集合中是否有與 x 相等的元素;字串比較區分大小寫。
  • Iterator.remove 會刪除迭代器最近一次回傳的元素,適合在走訪集合時同步刪除。
  • ListIterator.set(x) 會將最近一次回傳的元素替換為 x。
  • String.toLowerCase 會傳回字串的小寫形式。此程式未指定地區設定;這些英文字母轉成小寫的結果不受影響。

解題方法

先依程式執行順序追蹤 list:

  1. for (String color : colors) 逐一將 colors 的元素加入 list,因此清單內容與原陣列順序相同:

RED, Green, BLUE, CYAN, MAGENTA, YELLOW, WHITE, GRAY, BLACK

  1. 第一段 for 迴圈依索引從 0 到 list.size - 1 取出元素並印出。此時尚未呼叫刪除或轉小寫方法,所以輸出為:

RED Green BLUE CYAN MAGENTA YELLOW WHITE GRAY BLACK

  1. removeList 收入 GRAY、BLACK、WHITE。呼叫 removeColors(list, removeList) 後,方法用迭代器走訪 list;
🔒

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

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

免費註冊

其他考古題