You are on page 1of 15

請在此貼上電腦條碼

香 港 電 腦 教 育 學 會
資 訊 及 通 訊 科 技 科 模 擬 考 試 2022
考生編號

試 卷 二 (D)

軟件開發

考試時間︰上午十一時十五分至下午十二時四十五分
(一小時三十分鐘)
本試卷必須用中文作答 由閱卷員填寫

試題編號 積分
考生須知
(一) 宣佈開考後,考生須在第1頁之適當位置貼上電腦 1
條碼。
2
(二) 只需選答三題。
3
(三) 答案須寫在本試題答題簿所預留的空位內。不可在
各頁邊界以外位置書寫。 4

(四) 如有需要,可要求派發補充答題紙。每一紙張均 總分
須填寫考生編號、試題編號。

(五) 試場主任宣佈停筆後,考生不會獲得額外時間填
寫考生編號及試題編號。

© 香港電腦教育學會 保留版權
THE HONG KONG ASSOCIATION FOR COMPUTER EDUCATION
All Rights Reserved 2021

HKACE-ICT MOCK EXAM 2022-2D 1


只需選答三題。

1. 小明正在編寫「掃炸彈」遊戲程式。遊戲介面以一個二維陣列 board 表示。有 B 個以 -1 表示的炸彈


會被隨機分配在一個有 R 行及 C 欄的介面上。沒有炸彈的位置則會顯示一個數字,以表示附近 1 格範圍
內炸彈的數目(包括上下左右及四角)。

以下例子顯示 B = 10, R = 5, C = 8 的介面。board[1][2]附近有 3 個炸彈。.

a) 在第 4 行填上適當內容。.

R\C 0 1 2 3 4 5 6 7

0 0 0 1 1 3 -1 -1 1

1 1 1 3 -1 4 -1 3 1

2 1 -1 4 -1 5 2 3 1

3 1 1 3 -1 3 -1 3 -1

4 -1

(1 分)

b) board 內所有內容預設數值都是 0。以下是預設的內建子程序:


子程序 描述
random(N) 傳回 0 至 N-1 之間的整數,包括 0 及 N-1。

i) 完成以下子程序的偽代碼以隨機分配 B 個炸彈到 board 中。

設 i 由 0 至 B-1 執行

x  _________________

y  _________________

board[x][y]  -1

ii) 小明發現運行程式後實際的炸彈數量有機會少於預期。簡略說明。

________________________________________________________________________

________________________________________________________________________

HKACE-ICT MOCK EXAM 2022-2D 2


iii) 在下方空格重寫子程序以解決題 a) 提到的邏輯錯誤。

設 i 由 0 至 B-1 執行

board[x][y]  -1 (5 分)

c) 分配炸彈位置後,小明編寫另一子程序在沒有炸彈的位置計算附近炸彈的數目。

完成以下子程序。

設 i 由 0 至 R-1 執行

設 j 由 0 至 C-1 執行

如果 board[i][j] = -1 則

設 m 由 i-1 至 i+1 執行

設 n 由 j-1 至 j+1 執行

(3 分)

HKACE-ICT MOCK EXAM 2022-2D 3


d) 小明決定利用瀑布模型來開發此遊戲。
i) 小明選擇利用瀑布模型,而不是快速應用開發模型(RAD)。舉出一個理由以支持他的選擇。

___________________________________________________________________________________

___________________________________________________________________________________

ii) 可以利用什麼圖來幫助編排日程及管理不同的開發項目?

___________________________________________________________________________________

iii) 有兩份文件會在文件編製階段完成。文件將會包括以下內容:

(A) 用戶要求
(B) 安裝說明
(C) 常見問題
(D) 程序源碼
(E) 流程圖

在以下位置填上 (A) 至 (E):

程序手冊: _____________________________________________________

用戶手冊: _____________________________________________________

iv) 小明在應用程式商店發佈了他的遊戲。一段時間後,他想在應用程式商店發放一個包含新功能的
更新版遊戲。以應用程式商店角度,小明應用了哪種系統轉換策略?簡略說明。

___________________________________________________________________________________

___________________________________________________________________________________

___________________________________________________________________________________

(6 分)

HKACE-ICT MOCK EXAM 2022-2D 4


2. 工廠內的機械臂可以自動化部分工作。工廠內某機械臂在輸送帶系統內搬運貨物。

一組程序會控制機械臂進行不同的動作。在程序中,整數變量 pos 被用作表示機械臂正在存取的貨物所在的


索引。例如當機械臂正在存取第 5 個貨物,pos 的值會是 5。程序以陣列 loading[i]儲存第 i 個貨物的重
量。例如 loading[5]的值是 20, 代表第 5 個貨物的重量是 20kg。

a) 下圖顯示輸送帶及機械臂現時的情況:

(i) 堆疊數據結構是否能夠用於處理此輸送帶系統?簡略說明。

_________________________________________________________________________________

_________________________________________________________________________________

(ii) 寫上 pos 及 loading[] 現在的內容:


pos: ______________

i 1 2 3 4 5 6 7 8 9 …

loading[] …

(2 分)

HKACE-ICT MOCK EXAM 2022-2D 5


b) 程序內有一個訊號模組用作監察輸送帶系統的狀況。程序利用 3 個常數 N, CGLMT and BELTLMT 來表示
輸送帶系統的各種限制。
每條輸送帶只能夠處理 N 件貨物,如出現以下任何一種情況輸送帶將會過重:
- 每件貨物的重量不應超過 CGLMT kg。
- 每條輸送帶的承重不應超過 BELTLMT kg。

i) 舉出兩個使用常數而不是實際數值的優點。

_________________________________________________________________________________

_________________________________________________________________________________

_________________________________________________________________________________

ii) 函數 HeaviestLoading() 傳回最重的貨物的重量。完成以下 HeaviestLoading()的偽代


碼。

函數 HeaviestLoading()

max  ______________

設 i 由 1 至 N 執行

如果 __________________________ 則

max  loading[i]

傳回 max

iii) 另一個函數 FindTotalWeight() 用作找出輸送帶上所有貨物的總重量。完成以下


FindTotalWeight()的偽代碼。

函數 FindTotalWeight()

weight  ______________

設 i 由 1 至 N 執行

__________________________

傳回 weight

HKACE-ICT MOCK EXAM 2022-2D 6


iv) 另一個函數 isOverload()用作偵察輸送帶是否過重。完成以下 isOverload()偽代碼。

函數 isOverload()

如果 _________________________________________________________________________ 則

傳回 TRUE

否則

傳回 FALSE

(7 分)

c) i) 此訊號模組在完成後便立即進行了測試。寫出這種測試的名稱及其目的。

_________________________________________________________________________________

_________________________________________________________________________________

ii) 程序內一個馬達模組包含數個用作移動輸送帶上的貨物的子程序。舉出一個利用模組化方式編寫程
序的優點。

_________________________________________________________________________________

_________________________________________________________________________________
(3 分)

HKACE-ICT MOCK EXAM 2022-2D 7


d) 子程序 SortDesc()用作以降序方式按重量排列貨物的次序。

子程序內包含一個內置函數 insert(i,j),其中 i > j。 insert(i,j)會進行 3 個動作:


1. 暫時從輸送帶移除第 i 件貨物以及儲存在另一個地方。
2. 把位置 j 及其右方並在位置 i 前的所有貨物向右移一個單位。
3. 把於步驟 1 中被暫時移離輸送帶的貨物放到位置 j。

完成以下 SortDesc()偽代碼。

子程序 SortDesc()

設 i 由 2 至 N 執行

inserted  _________

j  1

當 j < i 與 not inserted 執行

如果 _____________________________________ 則

_____________________

inserted  __________

j  j + 1

HKACE-ICT MOCK EXAM 2022-2D 8


3. 小俊是一間診所的系統分析員。

於診所的醫療室外有一行 N 個等候座位。診所系統會以先到先得的形式安排病人與醫生會面。

...

N 個座位
小俊假設病人在等候時不會自行離座或移動。系統使用以下變量及子程序操作:

變量 描述

Q 索引由 0 至 N-1 的陣列

start 儲存首位輪候病人的索引

end 儲存最新加入輪侯的病人的索引

pid 以 PNNN 格式表示的病人 ID。 (例: P021)

子程序 描述

add(pid) 加入新病人的病人 ID 到 Q 內

remove() 傳回 Q 內首位輪候病人的病人 ID,及將此 ID 從 Q 中移除。

isEmpty() 當座位是空的時候,傳回 TRUE,否則傳回 FALSE。

isFull() 當座位是滿時傳回 TRUE,否則傳回 FALSE。

例如: 假設 N=5,而且醫療室外沒有任何病人正在輪候。
start 0 end -1

索引 0 1 2 3 4
Q

圖 A 顯示進行以下程序後 Q 的內容。
add(P024) ➔ add(P014) ➔ add(P245) ➔ add(P357) ➔
remove() ➔ remove() ➔ add(P198) ➔ add(P324)

start 2 end 0

索引 0 1 2 3 4
Q P324 P245 P357 P198
圖 A

HKACE-ICT MOCK EXAM 2022-2D 9


a) 參照圖 A,
i) 圖 A 所示運用了何種數據結構?

______________________________________________________________________________
ii) 根據圖 A,在下列填寫順序進行以下動作後的值。
add(P954) ➔ remove() ➔ remove() ➔ add(P147)

start end

索引 0 1 2 3 4
Q

iii) 小美建議「N 應該設定為全日所有病人的總數」。


小俊並不同意並堅持以其他數字作為 N 的值。小俊可能會以什麼來作為 N 的值?

______________________________________________________________________________

______________________________________________________________________________
(3 分)

b) 完成以下偽代碼,Q 的大小以 N 表示:

子程序 add(pid)

如果 isFull()=FALSE 則

end  ________________________________

Q[end]  ________________________________

子程序 remove()

如果 isEmpty()=FALSE 則

id  ________________________________

Q[start]  “”

start  ________________________________

傳回 ________________________________

(5 分)

HKACE-ICT MOCK EXAM 2022-2D 10


c) 診所進行擴張,將會有兩名醫生分別於兩間醫療室接見病人。兩名醫生的 ID did 分別為 1 及 2。
每間醫療室門外都會有 N 個座位。系統的子程序進行了以下修改。

... ...

醫生 1 醫生 2
N 個座位 N 個座位

修改後的子程序 描述

add(pid, did) 加入病人 ID pid 到醫生 did 的等候隊伍中。

remove(did) 傳回醫生 did 門外首位輪候病人的病人 ID,及將此 ID 移除。

length(did) 傳回醫生 did 的門外正在輪候的病人數目。

由於兩名醫生的聽診速度並不一樣,隨著時間兩間醫療室門外的病人數目亦不會相同。
子程序 balance()利用以上已修改的子程序來平衡兩間醫療室的人數分配,以減少兩間醫療室門
外輪候病人數目的差距至相差 1 或以內。

i) 完成以下 balance()偽代碼。

子程序 balance()

當 length(1) 及 length(2) 的差距_________ 執行

如果 ________________________________ 則

________________________________

否則

________________________________

ii) 已知 balance()沒有任何程式錯誤,但小俊在實行 balance()後收到很多有關輪候時間的


投訴。解釋子程序 balance()的不足之處。

_________________________________________________________________________________

_________________________________________________________________________________

_________________________________________________________________________________
(6 分)

HKACE-ICT MOCK EXAM 2022-2D 11


4. 大部分文書處理器支援兩種編輯模式:插入模式及覆寫模式。在插入模式中,用戶所輸入的文字會被加
入到遊標的位置。在覆寫模式中,用戶所輸入的文字會取代遊標位置的下一個文字。不論何種模式,在
用戶輸入文字後遊標都會移到下一個文字的位置。

例如,假設遊標在一行文字的最開頭,以下顯示該行文字。(符號^代表遊標的位置)

ictisfun.
^

模式 輸入的文字 結果 (符號^代表遊標的位置)

插入 x xictisfun.
^
插入 xyz xyzictisfun.
^
覆寫 x xctisfun.
^
覆寫 xyz xyzisfun.
^

編輯模式可以透過按下鍵盤上的 Insert 鍵來切換。當編輯器是插入模式時,按下 Insert 鍵會啟用覆寫模


式。當編輯器是覆寫模式時,按下 Insert 鍵則會啟用插入模式。

小偉編寫子程序 doEdit()模擬編輯過程。除了 Insert 鍵(以 I 表示)外,用戶亦可以按下 Delete 鍵(以


D 表示)來刪除遊標後的下一個文字。如果遊標的位置處於該行文字的最末端,Delete 鍵則不會進行任
何動作。子程序會接收一個字串參數及兩個廣域變量,如下所示。

參數 數據類型 描述 例子
sKPS 字串 記錄曾被按下的按鈕,可包括細階英文 "IxyzI345I23"
字、數字及 I 及 D 按鈕。I 表示 Insert 鍵
被按下,D 表示 Delete 鍵被按下。

預設的輸入模式為插入模式。

廣域變量 數據類型 描述
aT 字元陣列 代表將會被編輯的原始文字(只包含細階英文及數字)。陣列大小為
2000。
lT 整數 代表被儲存於 aT 的文字的實際長度。

HKACE-ICT MOCK EXAM 2022-2D 12


遊標位置在原始文字的開頭位置。以下例子表示 aT 和 lT 在執行 doEdit()前和執行後的內容。.

例子 1:
執行 doEdit()前:
aT i 0 1 2 3 4 5 6 7 8 9 10 11 …
aT[i] i c t i s f u n .
lT 9
sKPS xyIdse
執行 doEdit()後:
aT i 0 1 2 3 4 5 6 7 8 9 10 11 …
aT[i] x y d s e i s f u n .
lT 11

例子 2:
執行 doEdit()前:
aT i 0 1 2 3 4 5 6 7 8 9 10 11 …
aT[i] i c t i s f u n .
lT 9
sKPS IxyIdseDDDDD
執行 doEdit()後:
aT i 0 1 2 3 4 5 6 7 8 9 10 11 …
aT[i] x y d s e n .
lT 7

(a) 假設 aT 的內容如下所示。
aT i 0 1 2 3 4 5 6 7 8 9 10 11 …
aT[i] g d l u c k d s e !
lT 10

寫上在以下各個 sKPS 個案的情況下執行 doEdit()後 aT 及 lT 的內容。假設以下每個個案都是分別


獨立地執行。

(i) 個案 1 - sKPS: "abcIcd34DDDDDDIc"


執行 doEdit()後:
i 0 1 2 3 4 5 6 7 8 9 10 11 …
aT
aT[i]

lT

HKACE-ICT MOCK EXAM 2022-2D 13


(ii) 個案 2 - sKPS: "DDDDDDDDDabc"
執行 doEdit()後:
i 0 1 2 3 4 5 6 7 8 9 10 11 …
aT
aT[i]

lT

(4 分)

(b) 完成以下 doEdit()的偽代碼。

01 doEdit( sKPS ):
02 isI ← True
03 len ← sKPS 的長度

04 c ← 0
05 設 i 由 0 至 len-1 執行
06 a ← sKPS 的第 i 個字母
07 如果 a = 'I' 則
08 isI ← not isI
09 否則如果 a = 'D' 則
10 如果 lT > 0 則
11 設 j 由 c 至 lT – 1 執行
12 aT[j] ← aT[j+1]
13 aT[lT] ← ‘’
14 lT ← lT - 1
15 否則如果 isI = FALSE 則
16
aT[c] ← a
17
c ← c + 1
18 如果 c > lT 則

19 lT ← lT + 1

20 否則
21 設 j 由 lT-1 降至 c
22 aT[j+1] ← aT[j]

23 aT[c] ← a

24 c ← c + 1
(6 分)
25 lT ← lT + 1

(c) 第 11 及 12 行的作用是什麼?

_________________________________________________________________________________

_________________________________________________________________________________
(1 分)

HKACE-ICT MOCK EXAM 2022-2D 14


(d) 小偉編寫子程序 doPrint()以輸出儲存在 aT 的文字。寫上 doPrint()的偽代碼。

doPrint():

(2 分)

(e) 仔細閱讀第 20-25 行。


(i) 舉出一個會造成運行時期錯誤的例子。

_________________________________________________________________________________

_________________________________________________________________________________

(ii) 重寫第 20 行以避免該錯誤發生。

_________________________________________________________________________________

_________________________________________________________________________________
(2 分)

全卷完

HKACE-ICT MOCK EXAM 2022-2D 15

You might also like