112 關務特考四等 資訊處理 程式設計概要 考古題詳解

112 年・關務特考・四等・資訊處理
試題代碼 程式設計概要

第 一 題20 分

試回答下列有關程式設計領域的問題。(每小題 5 分,共 20 分)

(一) 撰寫程式時皆要取變數名稱(variable name)與其資料型態(data type),試問這兩項的用意為何?

(二) 程式敘述有時會以陣列(array)或串列(list)來表示,試問其功用為何?

(三) 物件導向程式設計中的多型(polymorphism)的功用為何?

(四) 何謂多載函式(overloading function)?

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

這一題的完整詳解

核心觀念

本題考查程式設計的基本概念:變數名稱與資料型態、陣列與串列、多型,以及函式多載。作答時,應說明各概念如何協助程式表達資料與操作,而不只列出名詞定義。

解題方法與作答要點

(一)變數名稱與資料型態的用意

變數名稱用來識別資料在程式中的位置或意義,使程式可以透過名稱存取、修改資料,也讓程式碼較容易閱讀與維護。例如,score 比單純的 x 更能表達資料代表分數。

資料型態用來界定資料的種類、可表示的範圍,以及可執行的運算。例如果數值型態適合計算,字串型態適合儲存文字;型態資訊也能讓語言或編譯器進行記憶體配置、運算處理及型態檢查,降低不適當運算造成錯誤的機會。

(二)陣列或串列的功用

陣列(array)或串列(list)可將多筆相關資料集合在一個資料結構中,並以索引或位置存取其中的元素。程式可用迴圈逐筆處理資料,避免為每筆資料各自宣告一個變數,並使資料的儲存、查找與處理更有組織。

例如,若要記錄多位考生的分數,可將分數放在同一個陣列或串列,再逐項計算總分或平均分數。陣列通常具有固定長度;串列則常可依語言提供的功能增刪元素,具體特性依程式語言而異。

(三)多型的功用

多型(polymorphism)使不同類別的物件可以透過共同的介面或操作方式使用,而各物件依其實際類別執行相應的行為。如此可將共通操作寫成一致的呼叫方式,降低程式對個別類別的依賴,並提升程式的擴充性與維護性。

🔒

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

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

免費註冊

第 二 題24 分

下列是 C 程式語言所撰寫的兩數對調程式,它使用傳址呼叫來完成,試修正下列程式錯誤的地方。程式在 main() 函式中先輸入兩個整數,並印出對調前的兩數,再呼叫 swap() 對調函式,最後印出對調後的兩數。輸出結果如下:

Enter two numbers:100 200

a = 100, b = 200

a = 200, b = 100

兩數對調程式:

#include <stdio.h>

void swap(int , int);

int main() { int a, b;

printf("enter two numbers:");
scanf("%d %d", a, b);
printf("a = %d, b = %d\n", a, b);
swap(a, b);
printf("a = %d, b = %d\n", a, b);

return 0;

}

void swap(int x, int y) { int temp;

temp = x;
x = y;
y = temp;

}

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

這一題的完整詳解

核心觀念

本題考查 C 語言的指標、位址運算子與函式參數傳遞。

C 語言的函式呼叫採用傳值:呼叫函式時,會把引數的值複製給形參。若要讓函式修改呼叫端的變數,必須把變數的位址傳入,並以指標參數接收。函式內透過指標取值運算子 *,即可讀取或修改該位址所指向的變數。

此外,scanf 要把輸入值存入變數,也必須傳入變數位址,因此整數變數前要加上位址運算子 &。

解題方法

原程式有兩個錯誤:

  1. scanf("%d %d", a, b); 傳入的是 a、b 的值,應改為 scanf("%d %d", &a, &b);。
  2. swap(int x, int y) 的參數是一般整數,函式只會交換區域副本,無法改變 main 中的 a、b。應將參數改為指標,並傳入 a、b 的位址。

修正後的程式如下:

🔒

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

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

免費註冊

第 三 題30 分

下列是以 Python 程式語言撰寫的片段程式,試回答每一小題的輸出結果。每一小題是獨立運作的。注意,若迴圈無法停止,則以無窮迴圈作答。(每小題 3 分,共 30 分)

(一) total = 0 for i in range(1, 100): total += i print('total =', total)

(二) total = 0 i = 1 while i <= 100: total += i i += 1 print('total =', total)

(三) total = 0 i = 1 while i <= 100: i += 1 total += i print('total =', total)

(四) total = 0 for i in range(2, 100, 2): total += i print('total =', total)

(五) total = 0 i = 1 while i <= 100: total += 1 i += 1 print('total =', total)

(六) total = 0 i = 1 while i <= 100: total += i i += 2 print('total =', total)

(七) total = 0 for i in range(100, 1, -1): total += i print('total =', total)

(八) total = 0 i = 100 while i > 0: total += i i -= 1 print('total =', total)

(九) 下列的程式,若依序輸入的數值是 1、2、3、4、5、6:

total = 0 i = 1 while i <= 5: num = eval(input('Enter a number: ')) if num % 5 == 0: break else: total += num i += 1 print('total =', total)

(十) 下列的程式,若依序輸入的數值是 1、2、3、4、5、6:

total = 0 i = 1 while i <= 5: num = eval(input('Enter a number: ')) if num % 5 == 0: continue else: total += num i += 1 print('total =', total)

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

這一題的完整詳解

核心觀念

本題考查 Python 的 range 範圍、while 迴圈條件與更新順序,以及 break、continue 對迴圈流程的影響。

  • range(起點, 終點, 間距) 包含起點、不包含終點;省略間距時為 11。
  • while 每次先判斷條件,條件成立才執行迴圈本體。
  • break 立即結束整個迴圈;continue 立即跳到下一輪,略過本輪剩餘程式。
  • 迴圈變數若沒有在迴圈本體中更新,且條件持續成立,迴圈就不會停止。

解題方法

依程式執行順序追蹤每輪的迴圈變數與 total。遇到連續整數或偶數加總,可用等差級數公式驗算:

1+2+⋯+n=n(n+1)21+2+\cdots+n=\frac{n(n+1)}{2}

(一)

range(1, 100) 依序產生 11 到 9999,不包含 100100。

total=1+2+⋯+99=99×1002=4950\text{total}=1+2+\cdots+99=\frac{99\times100}{2}=4950

輸出:total = 4950

(二)

每輪先將 ii 加入 total,再令 ii 加 11。因此累加的是 11 到 100100:

total=1+2+⋯+100=100×1012=5050\text{total}=1+2+\cdots+100=\frac{100\times101}{2}=5050

輸出:total = 5050

(三)

每輪先執行 i += 1,再把更新後的 ii 加入 total。條件在每輪開始時檢查,因此被加總的是 22 到 101101:

total=2+3+⋯+101=(2+101)×1002=5150\text{total}=2+3+\cdots+101 =\frac{(2+101)\times100}{2} =5150

輸出:total = 5150

(四)

range(2, 100, 2) 產生 2,4,…,982,4,\ldots,98,不包含 100100,共有 4949 個偶數。

total=2+4+⋯+98=2(1+2+⋯+49)=2×49×502=2450\text{total}=2+4+\cdots+98 =2(1+2+\cdots+49) =2\times\frac{49\times50}{2} =2450

輸出:total = 2450

(五)

每輪只執行 total += 1,共執行 100100 輪,所以 total 等於 100100。

輸出:total = 100

(六)

🔒

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

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

免費註冊

第 四 題26 分

利用 Python、C、C++、Java、C# 五種程式語言的任何一種程式語言,撰寫一程式用以模擬大樂透的電腦選號(6 個介於 1 到 49 之間不同的號碼)。輸出時要由小至大排列。

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

這一題的完整詳解

核心觀念

本題考查亂數產生、集合去重與排序。大樂透選號須從 11 至 4949 中選出 66 個互不相同的整數,並依由小至大輸出。題目沒有指定亂數種子或特定程式語言,因此以下以 Python 示範。

解題方法

使用 Python 標準函式庫 random 的 sample 函式,從整數範圍中不重複抽取 6 個號碼,再以 sort 排序:

import random

numbers = random.sample(range(1, 50), 6)
numbers.sort

print(*numbers)

range(1, 50) 會產生 11 至 4949 的整數,因為 Python 的範圍上界不包含在內。

🔒

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

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

免費註冊

其他考古題

資訊處理《程式設計概要》其他年度