高雄醫學大學 111 年 《計算機概論與程式設計》

📄 試題原卷 免費註冊後即可對照原始考卷 PDF免費註冊

第 1 題2 分

Which one of the following algorithms is NOT a symmetric algorithm?

(A) DES
(B) AES
(C) Caesar Cipher
(D) RSA
(E) Playfair Cipher

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

這一題的完整詳解

核心觀念

本題考查**對稱式加密(symmetric encryption)與非對稱式加密(asymmetric encryption)**的分類。

1. 對稱式加密

對稱式加密使用同一把秘密金鑰進行加密與解密:

C=EK(P)C=E_K(P) P=DK(C)P=D_K(C)

其中:

  • PP:明文(Plaintext)
  • CC:密文(Ciphertext)
  • KK:共享秘密金鑰
  • EKE_K:使用金鑰 KK 加密
  • DKD_K:使用金鑰 KK 解密

加密者與解密者必須事先安全地共享金鑰。其特點是速度快,適合大量資料加密,但金鑰配送與管理較困難。

2. 非對稱式加密

非對稱式加密使用一對不同的金鑰:

  • 公開金鑰(Public Key)
  • 私密金鑰(Private Key)

公開金鑰可公開,私密金鑰必須保密。以保密傳輸為例:

C=EKpublic(P)C=E_{K_{\text{public}}}(P) P=DKprivate(C)P=D_{K_{\text{private}}}(C)

這兩把金鑰在數學上相關,但不能視為同一把共享秘密金鑰。RSA 即屬於非對稱式加密演算法。


解題方法

判斷各選項所屬的加密類型即可:

  1. DES:對稱式分組加密。
  2. AES:對稱式分組加密。
  3. Caesar Cipher:使用同一個位移量加密與解密,屬於對稱式加密。
  4. RSA:使用公開金鑰與私密金鑰,屬於非對稱式加密。
  5. Playfair Cipher:使用同一個密鑰方格進行加密與解密,屬於對稱式加密。

因此,不是對稱式演算法的是 RSA。


選項分析

(A) DES

DES(Data Encryption Standard)是對稱式分組加密演算法。

DES 將資料切成固定大小的區塊,使用同一把秘密金鑰進行加密與解密。其核心架構為 Feistel network,標準金鑰長度為 56 位元。

因此,DES 是對稱式演算法,選項正確但不是本題答案。


(B) AES

AES(Advanced Encryption Standard)是對稱式分組加密演算法。

AES 使用相同的秘密金鑰進行加密與解密,支援 128、192、256 位元金鑰長度,資料區塊大小固定為 128 位元。

因此,AES 是對稱式演算法,選項正確但不是本題答案。


(C) Caesar Cipher

Caesar Cipher(凱薩密碼)是古典的對稱式替換加密法。

假設英文字母以 00 到 2525 編號,加密位移量為 kk,則:

C=(P+k) mod 26C=(P+k)\bmod 26

解密時使用相反方向的位移:

P=(C−k) mod 26P=(C-k)\bmod 26

加密與解密所使用的是同一個位移密鑰 kk,因此屬於對稱式加密。

🔒

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

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

免費註冊

第 2 題2 分

Ping is a computer network administration utility used to test the reachability of a host on the Internet. Ping is implemented by which of the following protocols?

(A) IGMP
(B) XMPP
(C) RCTP
(D) ICMP
(E) SIP

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

這一題的完整詳解

核心觀念

本題考「ping 工具所使用的網路協定」。

ping 用來測試目的主機是否可達,以及估算封包往返時間。其運作機制是:

  1. 本機送出 ICMP Echo Request。
  2. 目的主機收到後回傳 ICMP Echo Reply。
  3. 本機根據回覆封包計算往返時間(Round-Trip Time, RTT),並判斷封包是否遺失。

因此,ping 使用的是 ICMP(Internet Control Message Protocol,網際網路控制訊息協定)。

ICMP 位於網路層,通常搭配 IP 使用;它不像 TCP 或 UDP 一樣透過連接埠(port)傳輸應用程式資料。

解題方法

看到題目問「Ping implemented by which protocol」,直接聯想到 ICMP 的兩種訊息:

  • Echo Request:回應請求
  • Echo Reply:回應封包

其基本流程可表示為:

主機 A→ICMP Echo Request主機 B\text{主機 A} \xrightarrow{\text{ICMP Echo Request}} \text{主機 B} 主機 B→ICMP Echo Reply主機 A\text{主機 B} \xrightarrow{\text{ICMP Echo Reply}} \text{主機 A}

若主機 B 成功回覆,主機 A 便可確認目的地具有網路可達性,並計算:

RTT=t收到回覆−t送出請求\text{RTT} = t_{\text{收到回覆}} - t_{\text{送出請求}}

所以正確協定為 ICMP。

選項分析

(A) IGMP

IGMP(Internet Group Management Protocol,網際網路群組管理協定)用於管理主機與 IPv4 多播群組之間的關係,例如:

  • 主機加入多播群組
  • 主機離開多播群組
  • 路由器查詢群組成員

IGMP 的用途是多播群組管理,不是測試單一主機是否可達,因此錯誤。

🔒

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

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

免費註冊

第 3 題2 分

For a specific CPU design, there are three instruction classes as depicted in Table 1 and run at a clock rate of 100 MHz.

Table 1 CPU Design

Instruction ClassABC
CPI132

For a given program, a compiler can produce the following executed instruction counts as depicted in Table 2. Please calculate the average CPI of this compiler.

Table 2 Given Program

Instruction ClassABC
Instruction Counts1011

(A) 4
(B) 2
(C) 1.25
(D) 0.5
(E) All of the above are wrong.

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

這一題的完整詳解

核心觀念

本題考查 平均 CPI(Average Cycles Per Instruction) 的計算。

CPI 是每一類指令平均需要的時脈週期數。由於不同指令類別的 CPI 不同,平均 CPI 必須按照各類別的實際執行次數加權平均:

平均 CPI=總時脈週期數總指令數\text{平均 CPI} = \frac{\text{總時脈週期數}}{\text{總指令數}}

其中:

總時脈週期數=∑i(第 i 類指令數×第 i 類 CPI)\text{總時脈週期數} = \sum_i \left(\text{第 }i\text{ 類指令數}\times\text{第 }i\text{ 類 CPI}\right)

題目給出的 100 MHz100\text{ MHz} 時脈率,是計算程式執行時間時使用的資訊;計算平均 CPI 時不需要使用。

解題方法

各類指令的執行資訊如下:

指令類別CPI執行次數所需時脈週期
A11010×1=1010\times1=10
B311×3=31\times3=3
C211×2=21\times2=2

因此,總指令數為:

10+1+1=1210+1+1=12

總時脈週期數為:

10+3+2=1510+3+2=15

平均 CPI 為:

平均 CPI=1512=1.25\text{平均 CPI} = \frac{15}{12} = 1.25

所以正確選項為 (C)。

選項分析

  • (A) 4:錯誤。
    44 並非依據加權平均公式計算出的平均 CPI,也不是各類 CPI 的正確合併結果。
🔒

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

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

免費註冊

第 4 題2 分

Which one MAX_VALUE of primitive data type in C is greater than others?

(A) int
(B) unsigned int
(C) signed int
(D) double
(E) long

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

這一題的完整詳解

核心觀念

本題考查 C 語言基本資料型態的「可表示最大值」以及整數型態與浮點型態的差異。

主要比較:

  • int:有號整數
  • signed int:與 int 相同
  • unsigned int:無號整數
  • long:長整數,通常為有號整數
  • double:雙精度浮點數,可表示非常大的數值

在一般 C 語言實作與考試常見環境中:

  • 整數型態的最大值通常落在 10910^9 或 101810^{18} 的量級。
  • double 的最大有限值約為 1.8×103081.8 \times 10^{308}。

因此,double 的最大可表示值遠大於其他選項。


解題方法

先區分資料型態:

1. 整數型態

對一個使用 nn 位元儲存的有號整數,通常有 11 位元作為符號位元,因此最大值為:

2n−1−12^{n-1}-1

對相同位元數的無號整數,所有位元皆用於表示數值,最大值為:

2n−12^n-1

所以在位元數相同時:

unsigned int>int=signed int\text{unsigned int} > \text{int} = \text{signed int}

2. 浮點型態

double 通常採用 IEEE 754 雙精度格式,使用:

  • 1 位元符號位元
  • 11 位元指數欄位
  • 52 位元有效數字欄位

其最大有限值約為:

1.7976931348623157×103081.7976931348623157 \times 10^{308}

這個數值遠超過一般整數型態的最大值。

例如常見的 64 位元 long 最大值為:

263−1=9,223,372,036,854,775,807≈9.22×10182^{63}-1 = 9,223,372,036,854,775,807 \approx 9.22 \times 10^{18}

比較數量級:

10308≫101810^{308} \gg 10^{18}

所以最大值最大的是 double。


選項分析

(A) int

int 是有號整數型態。

若 int 使用 32 位元,最大值為:

231−1=2,147,483,6472^{31}-1=2,147,483,647

即約為:

2.1×1092.1 \times 10^9

小於 double 的最大值,因此錯誤。


(B) unsigned int

unsigned int 是無號整數型態。若使用 32 位元,最大值為:

232−1=4,294,967,2952^{32}-1=4,294,967,295

雖然它比同樣位元數的 int 大,但仍只有約 4.3×1094.3 \times 10^9,遠小於 double 約 1.8×103081.8 \times 10^{308} 的

🔒

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

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

免費註冊

第 5 題2 分

Unsupervised learning is a type of algorithm that learns patterns from untagged data. Which of the following learning techniques is an unsupervised learning technique?

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

這一題的完整詳解

核心觀念

機器學習依訓練資料是否具有標籤,可分為:

  • 監督式學習(Supervised Learning):訓練資料包含輸入資料與正確答案標籤,模型學習輸入與輸出之間的關係,常見任務為分類與迴歸。
  • 非監督式學習(Unsupervised Learning):訓練資料沒有標籤,模型自行從資料中找出群組、結構或分布特徵,常見任務為分群與降維。

本題問的是「從未標記資料中學習模式」的技術,因此應判斷各選項是否屬於非監督式學習。


解題方法

逐一判斷各演算法的訓練方式:

  1. 是否需要事先提供正確答案標籤?
  2. 主要用途是分類、迴歸,還是分群?
  3. 是否由模型自行發現資料中的群組結構?

其中,若演算法將資料分成數個群組,且不需要事先知道每筆資料所屬類別,通常就是非監督式學習。


選項分析

(A) Decision tree

Decision tree(決策樹)通常是監督式學習方法。

在分類問題中,決策樹利用具有標籤的訓練資料,依據特徵切分資料。例如,根據體溫、咳嗽與年齡等特徵,判斷病人是否感染某種疾病。每筆訓練資料都必須有已知答案,模型才能學習切分規則。

決策樹也可用於迴歸問題,同樣需要已知的目標值。因此本選項不符合題目所問的非監督式學習。


(B) K-means clustering

K-means clustering(K 平均分群)是典型的非監督式學習方法,故為正確答案。

K-means 不需要資料標籤,只需指定欲分成的群數 KK。演算法會依據資料點之間的距離,自動將相似資料分到同一群。

基本流程如下:

  1. 指定群數 KK。
  2. 隨機選取 KK 個初始群中心。
  3. 將每筆資料分配至距離最近的群中心。
  4. 分別計算每一群資料的平均值,更新群中心。
  5. 重複步驟 3 與步驟 4,直到群組分配穩定或群中心變化很小。

其最佳化目標通常是最小化群內平方距離:

J=∑i=1K∑x∈Ci∥x−μi∥2J=\sum_{i=1}^{K}\sum_{x\in C_i}\|x-\mu_i\|^2

其中:

  • KK:群組數量
  • CiC_i:第 ii 群的資料集合
  • μi\mu_i:第 ii 群的中心
  • ∥x−μi∥2\|x-\mu_i\|^2:資料點與群中心之間的平方距離

因為訓練資料不需要預先提供類別標籤,而是由演算法自行找出資料群組,所以 K-means 屬於非監督式學習。

🔒

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

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

免費註冊

第 6 題2 分

Given a prefix expression “+ + (9) × (8) (7) × + × (6) (5) (4) (3)”, please calculate the result.

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

這一題的完整詳解

核心觀念

本題考「前序表示法」(prefix expression,也稱 Polish notation)。

前序表示法的規則是:

  • 運算子寫在運算元之前。
  • 本題所有運算子皆為二元運算子。
  • 每個運算子必須搭配其後的兩個完整子運算式。
  • 符號 ×\times 表示乘法,符號 ++ 表示加法。

題目中的前序式為:

++9×87×+×6543+ \quad + \quad 9 \quad \times \quad 8 \quad 7 \quad \times \quad + \quad \times \quad 6 \quad 5 \quad 4 \quad 3

解題方法

由最外層的第一個 ++ 開始解析:

+  [左子式]  [右子式]+ \; [\text{左子式}] \; [\text{右子式}]

左子式從第二個 ++ 開始:

+9×87+ \quad 9 \quad \times \quad 8 \quad 7

因此:

9+(8×7)=9+56=659+\left(8\times 7\right) =9+56 =65

右子式為:

×+×6543\times \quad + \quad \times \quad 6 \quad 5 \quad 4 \quad 3

先解析其中的加法子式:

+×654+ \quad \times \quad 6 \quad 5 \quad 4

其結果為:

(6×5)+4=30+4=34(6\times 5)+4 =30+4 =34

再乘以 33:

34×3=10234\times 3=102

最後計算最外層加法:

65+102=16765+102=167

所以完整的中序表示為:

[9+(8×7)]+[((6×5)+4)×3]\left[9+(8\times 7)\right] + \left[\left((6\times 5)+4\right)\times 3\right]

逐步追蹤(Trace)

也可以由右至左掃描前序式,遇到運算元就放入堆疊,遇到運算子就取出最靠近的兩個值計算:

掃描內容動作堆疊結果
33放入[3][3]
44放入[3,4][3,4]
55放入[3,4,5][3,4,5]
66放入[3,4,5,6][3,4,5,6]
×\times6×5=306\times5=30[3,4,30][3,4,30]
++30+4=3430+4=34[3,34][3,34]
×\times34×3=10234\times3=102[102][102]
🔒

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

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

免費註冊

第 7 題2 分

Which type of memory or storage components has the shortest response time?

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

這一題的完整詳解

核心觀念

本題考查電腦儲存階層(memory hierarchy)中,各類記憶體或儲存裝置的存取速度與反應時間。

一般而言,距離 CPU 越近、容量越小、成本越高的儲存元件,反應時間越短。由快至慢可排列為:

Processor registers  >  CPU cache  >  Main memory  >  Solid-state drive  >  Floppy disk drive\text{Processor registers} \;>\; \text{CPU cache} \;>\; \text{Main memory} \;>\; \text{Solid-state drive} \;>\; \text{Floppy disk drive}

此處的「反應時間」可理解為 CPU 或系統提出資料需求後,元件開始提供資料所需的時間,也就是存取延遲(access latency)。

解題方法

判斷此題時,依據各元件與 CPU 的距離及其硬體功能進行比較:

  1. Processor registers 位於 CPU 內部,直接供算術邏輯單元與控制單元使用。
  2. CPU cache 位於 CPU 內部或緊鄰 CPU,但仍須經由快取控制機制搜尋資料。
  3. Main memory 通常指 RAM,位於 CPU 外部,需透過記憶體匯流排存取。
  4. Solid-state drive 使用非揮發性快閃記憶體,需經由儲存控制器與輸入輸出介面存取。
  5. Floppy disk drive 使用機械式磁碟與讀寫磁頭,機械移動造成很大的延遲。

因此,反應時間最短的是直接位於 CPU 內部的處理器暫存器。

選項分析

(A) Main memory

Main memory 主要是 RAM,用於存放目前執行中的程式與資料。它的速度比 SSD 與軟碟快,但位於 CPU 外部,CPU 必須透過記憶體控制器與匯流排存取,因此反應時間長於 CPU 內部的暫存器。

所以此選項錯誤。

(B) CPU cache

CPU cache 使用速度較快的記憶體技術,存放 CPU 最近使用或預測即將使用的資料,以減少存取主記憶體的次數。

雖然快取比主記憶體快,但 CPU 仍須依照快取階層進行標籤比對與資料搜尋。處理器暫存器直接位於 CPU 的運算路徑中,存取時間通常更短。

所以此選項錯誤。

(C) Processor registers

🔒

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

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

免費註冊

第 8 題2 分

Given a C code as follows, which random range initializes the array myList?

for (int i = 0; i < ARRAY_SIZE; i++)
{
    myList[i] = rand() % 100;
}

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

這一題的完整詳解

核心觀念

本題考查 C 語言中:

  1. rand 產生的亂數範圍。
  2. %(取餘數)運算子的結果範圍。
  3. 迴圈如何將亂數依序存入陣列。

在 C 語言中,rand 會產生介於 00 與 RAND_MAX 之間的非負整數:

0≤rand≤RAND_MAX0 \leq \texttt{rand} \leq \texttt{RAND\_MAX}

本題的指定運算為:

rand % 100

對任何非負整數取 100100 的餘數,結果只能是:

0,1,2,…,990,1,2,\ldots,99

因此,myList[i] 的亂數範圍為 00 到 9999。


解題方法

令:

r=randr=\texttt{rand}

則:

r % 100

代表 rr 除以 100100 後的餘數。根據餘數定義:

0≤r mod 100<1000 \leq r \bmod 100 < 100

因為餘數必須小於除數 100100,所以:

0≤rand%100≤990 \leq \texttt{rand} \% 100 \leq 99

程式會將這些數值依序指定給:

myList[0], myList[1], ..., myList[ARRAY_SIZE - 1]

因此陣列中的每個元素都會被初始化為 00 到 9999 之間的整數。


程式逐步追蹤(Trace)

假設某次執行時,rand 依序產生下列數值:

rand 的結果計算myList[i] 的值
135135 mod 100=35135 \bmod 100=3535
802802 mod 100=2802 \bmod 100=22
9999 mod 100=9999 \bmod 100=9999
10001000 mod 100=01000 \bmod 100=00

可見結果包含 00,也包含 9999,但不會出現 100100。

程式中的迴圈:

for (int i = 0; i < ARRAY_SIZE; i++)
{
 myList[i] = rand % 100;
}

其執行流程為:

  1. i=0,將一個 0∼990\sim99 的亂數存入 myList[0]。
  2. i=1,將一個 0∼990\sim99 的亂數存入 myList[1]。
  3. 持續執行至 i=ARRAY_SIZE-1。
🔒

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

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

免費註冊

第 9 題2 分

Which one of the following sections is shared by the threads in the same multithreaded process?

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

這一題的完整詳解

核心觀念

本題考查「多執行緒行程(multithreaded process)」的記憶體配置與資源共享方式。

同一個 process 內可以包含多個 threads。這些 threads 通常共享 process 的資源,但每個 thread 仍須保有自己的執行狀態,才能獨立執行。

典型區分如下:

資源或區段同一 process 內的 threads 是否共享
Code section共享
Data section共享
Heap通常共享
Stack不共享,各 thread 擁有自己的 stack
Registers不共享,各 thread 擁有自己的 registers
Program counter不共享,各 thread 擁有自己的 program counter

解題方法

判斷本題可採用「process 共用資源、thread 個別執行狀態」的切入方式。

同一個 process 中的 threads:

  1. 共同執行同一份程式,因此共享 code section。
  2. 各自可能執行到不同指令,因此必須擁有自己的 program counter。
  3. 各自需要保存不同的暫存資料,因此必須擁有自己的 registers。
  4. 各自擁有函式呼叫與區域變數所需的執行堆疊,因此通常各自擁有自己的 stack。
  5. 動態配置的記憶體通常位於 heap,同一 process 內的 threads 可以共同存取。

依本題官方公布答案,命題者欲測驗的標準答案是「threads 共享同一份程式碼」,因此選擇 (A) code。


選項分析

(A) code:正確

Code section 儲存程式的指令內容。同一個 process 中的多個 threads 通常執行同一份程式碼,因此共享相同的 code section。

例如,一個 process 中有多個 threads 執行同一個函式,各 thread 可以位於該函式的不同執行位置,但所使用的指令仍來自同一份 code。

因此依官方答案,(A) 為正確選項。


(B) registers:錯誤

Registers 用來保存 thread 當下執行所需的資料,例如:

  • 運算中的暫存值
  • 函式參數
  • 暫存器位址
  • 執行狀態資訊

每個 thread 必須有自己的 registers 狀態。若所有 threads 共用同一組 registers,thread 切換時就無法保存各自的執行進度。

🔒

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

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

免費註冊

第 10 題2 分

Given a C code as follows, which one of the following is the return value of f(12, -20)?

int f(int a, int b)
{
    return a - ((a - b) & ((a - b) >> 31));
}

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

這一題的完整詳解

核心觀念

本題考查:

  • C 語言的整數減法
  • 位元運算 &
  • 有號整數右移 >>
  • 二補數表示法
  • 位元技巧判斷兩數大小

在一般考試所採用的 32 位元整數、二補數系統中:

  • 正整數右移 31 位後為 00
  • x & 0 的結果一定為 00

解題方法與逐步追蹤

題目函式為:

int f(int a, int b)
{
 return a - ((a - b) & ((a - b) >> 31));
}

代入 a=12a=12、b=−20b=-20。

先計算:

a−b=12−(−20)=32a-b=12-(-20)=32

因此原式變為:

return 12 - (32 & (32 >> 31));

將 3232 寫成二進位:

32=(00000000 00000000 00000000 00100000)232=(00000000\ 00000000\ 00000000\ 00100000)_2

因為 3232 是正數,右移 31 位後:

32>>31=032>>31=0

所以:

32 & 0=032\ \&\ 0=0

最後:

f(12,−20)=12−0=12f(12,-20)=12-0=12

因此正確選項為:

(D) 12\boxed{\text{(D) }12}

這段程式的位元意義

令:

d=a−bd=a-b

在 32 位元二補數系統中:

  • 若 d≥0d\geq 0,則 d>>31=0d>>31=0
  • 若 d<0d<0,則 d>>31=−1d>>31=-1,其二進位通常為全 11

因此:

  • d≥0d\geq 0 時,d & 0=0d\ \&\ 0=0,函式回傳 aa
  • d<0d<0 時,d & (−1)=dd\ \&\ (-1)=d,函式回傳 a−d=ba-d=b

本題中:

12>−2012>-20

因此函式回傳較大的數 1212。這也是官方答案為 D 的原因。


選項分析

  • (A) -32:錯誤
🔒

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

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

免費註冊

第 11 題2 分

Consider the following C code. Please indicate the values of xx and yy after execution.

int a = 10, b = 5;
int x, y;

x = (a++) + (a++) + (b++);
y = (++a) + (++a) + (++b);

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

這一題的完整詳解

核心觀念

本題考查 C 語言的:

  • 後置遞增運算子 a++、b++
  • 前置遞增運算子 ++a、++b
  • 遞增運算後,變數值如何改變
  • 運算式中各項的計算與累加

定義如下:

  • a++:先取出 a 的原值參與運算,再將 a 加 11。
  • ++a:先將 a 加 11,再以新值參與運算。

依本題官方答案採用的命題慣例,將同一行的運算項依由左至右順序追蹤。


解題方法與逐步追蹤

初始值為:

a=10,b=5a=10,\qquad b=5

一、計算 xx

程式碼為:

x = (a++) + (a++) + (b++);

依序計算:

運算項參與運算的值運算後變數值
第一個 a++1010a=11a=11
第二個 a++1111a=12a=12
b++55b=6b=6

因此:

x=10+11+5=26x=10+11+5=26

執行完第一行後:

a=12,b=6,x=26a=12,\qquad b=6,\qquad x=26

二、計算 yy

程式碼為:

y = (++a) + (++a) + (++b);

此時從 a=12a=12、b=6b=6 開始。

依序計算:

運算項先遞增後取值運算後變數值
第一個 ++aa=13a=13a=13a=13
第二個 ++aa=14a=14a=14a=14
++bb=7b=7b=7b=7

因此:

y=13+14+7=34y=13+14+7=34

最後結果為:

x=26,y=34x=26,\qquad y=34
🔒

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

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

免費註冊

第 12 題2 分

Which one is the actual execution order of the following statements in SQL?

[1] SELECT [DISTINCT]
[2] FROM
[3] WHERE
[4] GROUP BY
[5] ORDER BY

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

這一題的完整詳解

核心觀念

本題考查 SQL 的「邏輯查詢處理順序」。SQL 語句的書寫順序,與資料庫處理查詢時的邏輯順序不同。

題目列出的各階段,在一般考試規範下可排列為:

FROM→WHERE→GROUP BY→SELECT [DISTINCT]→ORDER BY\text{FROM} \rightarrow \text{WHERE} \rightarrow \text{GROUP BY} \rightarrow \text{SELECT [DISTINCT]} \rightarrow \text{ORDER BY}

各階段功能如下:

  1. FROM:決定資料來源,建立初步資料集合。
  2. WHERE:篩選資料列,移除不符合條件的 records。
  3. GROUP BY:依指定欄位分組,形成群組。
  4. SELECT [DISTINCT]:決定輸出哪些欄位;DISTINCT 負責去除重複結果。
  5. ORDER BY:將最後產生的結果排序。

因此,官方答案為 (B)。


解題方法

判斷 SQL 邏輯處理順序時,可依「資料由來源逐步變成最後輸出」的流程思考:

第一步:先決定資料從哪裡來

必須先執行 FROM,才能知道要查詢哪些資料表。

FROM Student

此時資料庫先取得 Student 資料表的資料。

第二步:篩選資料列

接著執行 WHERE,只保留符合條件的資料。

WHERE score >= 60

此條件會先排除不及格資料,因此後續分組只針對篩選後的資料進行。

第三步:進行分組

若查詢包含 GROUP BY,資料會依指定欄位分成不同群組。

GROUP BY department

例如依系所分組後,才能計算各系所的平均成績、筆數或總和。

第四步:決定輸出欄位

SELECT 負責指定最後要顯示的欄位或運算結果。

SELECT department, AVG(score)

此時才形成查詢結果的欄位內容。若使用 DISTINCT,還會去除重複的輸出列。

第五步:排序最後結果

ORDER BY 通常作用在已經產生的結果上。

ORDER BY AVG(score) DESC

因此排序位於最後。

綜合以上流程:

FROM→WHERE→GROUP BY→SELECT [DISTINCT]→ORDER BY\boxed{\text{FROM} \rightarrow \text{WHERE} \rightarrow \text{GROUP BY} \rightarrow \text{SELECT [DISTINCT]} \rightarrow \text{ORDER BY}}

對應選項為 (B)。


範例說明

考慮以下 SQL:

SELECT department, AVG(score) AS average_score
FROM Student
WHERE score >= 60
GROUP BY department
ORDER BY average_score DESC;

其邏輯處理流程如下:

  1. 從 Student 資料表取得資料。
  2. 保留 score >= 60 的資料列。
  3. 依 department 分組。
  4. 對每組計算 AVG(score),並輸出 department 與平均分數。
  5. 按照 average_score 由大到小排序。

若將 SELECT 放在 FROM 之前理解,便無法正確說明資料來源、篩選與分組的先後關係。


選項分析

(A) SELECT, WHERE, GROUP BY, FROM, ORDER BY

錯誤。

🔒

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

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

免費註冊

第 13 題2 分

Given a binary tree as follows, please indicate the result of pre-order traversal.

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

本題附圖正在準備中,以下為原卷對應頁面:
原卷第 5 頁

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

這一題的完整詳解

核心觀念

本題考查二元樹的前序走訪(pre-order traversal)。

前序走訪順序固定為:

根節點→左子樹→右子樹\text{根節點} \rightarrow \text{左子樹} \rightarrow \text{右子樹}

每個節點都依照「先訪問自己,再完整走訪左子樹,最後走訪右子樹」的規則處理。

解題方法

依圖可讀出二元樹結構:

  • 根節點為 4343
  • 4343 的左子樹根為 1212,右子樹根為 9999
  • 1212 的左子節點為 55,右子節點為 3636
  • 55 的右子節點為 77
  • 3636 的左、右子節點分別為 2828、4040
  • 9999 的左子節點為 8181
  • 8181 的左、右子節點分別為 4949、9696
  • 4949 的右子節點為 5050
  • 5050 的右子節點為 7979
  • 9696 的左子節點為 8686

依前序走訪逐步排列:

  1. 先訪問根節點:4343
  2. 走訪 4343 的左子樹:
  • 1212
  • 1212 的左子樹:5→75 \rightarrow 7
  • 1212 的右子樹:36→28→4036 \rightarrow 28 \rightarrow 40
  1. 走訪 4343 的右子樹:
  • 9999
  • 9999 的左子樹:8181
  • 8181 的左子樹:49→50→7949 \rightarrow 50 \rightarrow 79
  • 8181 的右子樹:96→8696 \rightarrow 86

因此前序走訪結果為:

🔒

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

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

免費註冊

第 14 題2 分

Given two prime numbers “3” and “7” and a private key “23”, what is a public key derived by RSA?

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

這一題的完整詳解

核心觀念

RSA 使用兩個質數 p,qp,q 建立:

n=pqn=pq

並計算歐拉函數:

φ(n)=(p−1)(q−1)\varphi(n)=(p-1)(q-1)

公開金鑰指數 ee 與私密金鑰指數 dd 必須滿足:

ed≡1(modφ(n))ed\equiv 1\pmod{\varphi(n)}

本題給定:

p=3,q=7,d=23p=3,\quad q=7,\quad d=23

要求公開金鑰中的指數 ee。

解題方法

先計算模數與歐拉函數:

n=3×7=21n=3\times 7=21 φ(n)=(3−1)(7−1)=2×6=12\varphi(n)=(3-1)(7-1)=2\times6=12

因此 ee 必須滿足:

23e≡1(mod12)23e\equiv1\pmod{12}

因為:

23≡11(mod12)23\equiv11\pmod{12}

所以改寫為:

11e≡1(mod12)11e\equiv1\pmod{12}

觀察選項中的 e=11e=11:

11×11=12111\times11=121

而:

121=12×10+1121=12\times10+1

因此:

121≡1(mod12)121\equiv1\pmod{12}

符合 RSA 的互為模反元素條件,所以:

e=11e=11

嚴格而言,RSA 公開金鑰是 (e,n)(e,n),本題選項只列出公開金鑰指數,因此公開金鑰為:

(e,n)=(11,21)(e,n)=(11,21)

選項分析

  • (A) 3:錯誤

23×3=6923\times3=69

69≡9(mod12)69\equiv9\pmod{12}

🔒

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

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

免費註冊

第 15 題2 分

Consider the following C code. Please indicate the value of xx after execution.

int i, j;
int x = 5;

for (i = 1; i < 3; i++)
{
    for (j = 1; j < i * 2; j++)
        x += 3;
}

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

這一題的完整詳解

核心觀念

本題考查 C 語言的巢狀 for 迴圈,以及迴圈條件的判斷方式。

外層迴圈:

for (i = 1; i < 3; i++)

因此 ii 依序取 1、21、2。

內層迴圈:

for (j = 1; j < i * 2; j++)
 x += 3;

在每一個固定的 ii 值下,jj 都會從 11 開始,持續執行到 j<2ij < 2i 不成立為止。每執行一次內層迴圈,xx 增加 33。


解題方法:逐步追蹤

初始值為:

x=5x=5

當 i=1i=1

內層條件為:

j<i×2=1×2=2j < i \times 2 = 1 \times 2 = 2

此時 jj 的執行狀況如下:

jj條件 j<2j<2執行結果
11成立x=5+3=8x=5+3=8
22不成立離開內層迴圈

因此,i=1i=1 時,內層迴圈執行 11 次。

當 i=2i=2

內層條件為:

j<i×2=2×2=4j < i \times 2 = 2 \times 2 = 4

此時 jj 的執行狀況如下:

jj條件 j<4j<4執行結果
11成立x=8+3=11x=8+3=11
22成立x=11+3=14x=11+3=14
33成立x=14+3=17x=14+3=17
44不成立離開內層迴圈

因此,i=2i=2 時,內層迴圈執行 33 次。

總共執行次數為:

1+3=4 次1+3=4\text{ 次}

所以:

x=5+4×3=17x=5+4\times 3=17

關鍵程式碼的執行流程可簡寫為:

🔒

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

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

免費註冊

第 16 題2 分

Consider a series of matrices A2×3A_{2\times3}, B3×7B_{3\times7}, C7×2C_{7\times2}, D2×9D_{2\times9}, E9×4E_{9\times4}. Concerning the most efficient way to multiply this sequence of matrices, how many multiplication operations does it need?

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

這一題的完整詳解

核心觀念

本題考的是「矩陣鏈乘法最佳化」(Matrix Chain Multiplication)。

矩陣乘法具有結合律:

(AB)C=A(BC)(AB)C=A(BC)

但不同括號化方式,所需的「純量乘法次數」不同。若矩陣 XX 為 p×qp\times q、矩陣 YY 為 q×rq\times r,則計算 XYXY 需要:

pqrpqr

次純量乘法,結果矩陣大小為 p×rp\times r。

本題矩陣大小如下:

A2×3,B3×7,C7×2,D2×9,E9×4A_{2\times3},\quad B_{3\times7},\quad C_{7\times2},\quad D_{2\times9},\quad E_{9\times4}

因此維度序列為:

2,3,7,2,9,42,3,7,2,9,4

解題方法:動態規劃

令 m[i,j]m[i,j] 表示從第 ii 個矩陣乘到第 jj 個矩陣所需的最少純量乘法次數。

若最後一次分割在第 kk 個矩陣之後,則:

m[i,j]=min⁡i≤k<j{m[i,k]+m[k+1,j]+pi−1pkpj}m[i,j] = \min_{i\le k<j} \left\{ m[i,k]+m[k+1,j]+p_{i-1}p_kp_j \right\}

其中 p=(2,3,7,2,9,4)p=(2,3,7,2,9,4)。

第一層:兩個矩陣相乘

m[1,2]=2×3×7=42m[1,2]=2\times3\times7=42 m[2,3]=3×7×2=42m[2,3]=3\times7\times2=42 m[3,4]=7×2×9=126m[3,4]=7\times2\times9=126 m[4,5]=2×9×4=72m[4,5]=2\times9\times4=72

第二層:三個矩陣

對 ABCABC:

(AB)C:42+2×7×2=70(AB)C: 42+2\times7\times2=70 A(BC):42+2×3×2=54A(BC): 42+2\times3\times2=54

所以:

m[1,3]=54m[1,3]=54

對 BCDBCD:

(BC)D:42+3×2×9=96(BC)D:42+3\times2\times9=96 B(CD):126+3×7×9=315B(CD):126+3\times7\times9=315

所以:

m[2,4]=96m[2,4]=96

對 CDECDE:

(CD)E:126+7×9×4=378(CD)E:126+7\times9\times4=378 C(DE):72+7×2×4=128C(DE):72+7\times2\times4=128

所以:

m[3,5]=128m[3,5]=128

第三層:四個矩陣

對 ABCDABCD:

A(BCD):0+96+2×3×9=150A(BCD):0+96+2\times3\times9=150 (AB)(CD):42+126+2×7×9=294(AB)(CD):42+126+2\times7\times9=294 (ABC)D:54+0+2×2×9=90(ABC)D:54+0+2\times2\times9=90

此處需注意括號化成本應為:

(ABC)D=54+2×2×9=90(ABC)D=54+2\times2\times9=90

所以:

m[1,4]=90m[1,4]=90

對 BCDEBCDE:

B(CDE):128+3×7×4=212B(CDE):128+3\times7\times4=212 (BC)(DE):42+72+3×2×4=138(BC)(DE):42+72+3\times2\times4=138 (BCD)E:96+3×9×4=204(BCD)E:96+3\times9\times4=204

所以:

m[2,5]=138m[2,5]=138

第四層:五個矩陣

計算 ABCDEABCDE 的四種分割方式:

  1. A(BCDE)A(BCDE)
0+138+2×3×4=1620+138+2\times3\times4=162
  1. (AB)(CDE)(AB)(CDE)
42+128+2×7×4=22642+128+2\times7\times4=226
  1. (ABC)(DE)(ABC)(DE)
54+72+2×2×4=14254+72+2\times2\times4=142
  1. (ABCD)E(ABCD)E
90+0+2×9×4=16290+0+2\times9\times4=162
🔒

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

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

免費註冊

第 17 題2 分

Consider five processes as follows. They arrived in the order of P1, P2, P3, P4, and P5 at time 0. What is the total turnaround time of all processes by using the shortest-job-first (SJF) scheduling algorithm?

ProcessBurst timePriority
P1103
P211
P323
P414
P552

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

這一題的完整詳解

核心觀念

本題考查作業系統的 Shortest-Job-First(SJF,最短工作優先)排程演算法。

SJF 的規則是:CPU 每次從已到達、尚未執行的程序中,選擇 Burst time 最短者 執行。本題所有程序皆在時間 00 到達,因此一開始即可比較五個程序的 Burst time。

本題採用非搶先式 SJF,因為題目未提及程序執行期間會被中斷。非搶先式 SJF 一旦選定程序,就會讓該程序執行完畢。

各程序的周轉時間定義為:

Turnaround Time=Completion Time−Arrival Time\text{Turnaround Time} = \text{Completion Time} - \text{Arrival Time}

由於所有程序的到達時間皆為 00,所以:

Turnaround Time=Completion Time\text{Turnaround Time} = \text{Completion Time}

Priority 欄位不是 SJF 的判斷依據,因此本題不使用 Priority 排序。

解題方法

1. 依 Burst time 排列執行順序

各程序資料如下:

ProcessBurst timeArrival time
P1100
P210
P320
P410
P550

依 Burst time 由小到大排序:

P2(1)→P4(1)→P3(2)→P5(5)→P1(10)P2(1) \rightarrow P4(1) \rightarrow P3(2) \rightarrow P5(5) \rightarrow P1(10)

P2 與 P4 的 Burst time 同為 11,因此依題目給定的到達順序,P2 先於 P4。

2. 繪製甘特圖

0  1  2  4  9  190 \quad\ \ 1 \quad\ \ 2 \quad\ \ 4 \quad\ \ 9 \quad\ \ 19 P2 ∣ P4 ∣ P3 ∣ P5 ∣ P1\boxed{P2}\ |\ \boxed{P4}\ |\ \boxed{P3}\ |\ \boxed{P5}\ |\ \boxed{P1}

各程序的完成時間如下:

ProcessBurst time執行區間Completion timeTurnaround time
P210∼10 \sim 111−0=11-0=1
P411∼21 \sim 222−0=22-0=2
P322∼42 \sim 444−0=44-0=4
P554∼94 \sim 999−0=99-0=9
🔒

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

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

免費註冊

第 18 題2 分

All 10.0.0.0/2410.0.0.0/24 datagrams leaving local network have same single source IP address 138.76.29.7138.76.29.7, different source port numbers. What technology does such a mechanism rely on?

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

這一題的完整詳解

核心觀念

本題考查網路位址轉換(NAT, Network Address Translation),更精確地說,是 NAT 中的連接埠位址轉換(PAT, Port Address Translation),也常稱為 NAT overload。

內部網路使用私有 IP 位址,例如:

  • 10.0.0.0/2410.0.0.0/24
  • 可用位址範圍通常為 10.0.0.110.0.0.1 至 10.0.0.25410.0.0.254

這些私有 IP 位址不能直接在公 Internet 上路由。當封包離開區域網路時,NAT 路由器會將內部來源 IP 位址轉換成公有 IP 位址。

本題描述所有封包離開區域網路時:

  • 來源 IP 都變成 138.76.29.7138.76.29.7
  • 來源埠號各不相同

其轉換概念如下:

10.0.0.2:5000⟶138.76.29.7:6000110.0.0.2:5000 \longrightarrow 138.76.29.7:60001 10.0.0.3:5000⟶138.76.29.7:6000210.0.0.3:5000 \longrightarrow 138.76.29.7:60002

雖然多台內部主機共用同一個公有 IP 位址,但透過不同的來源埠號,NAT 路由器仍能辨識各個連線,並將回傳封包送回正確的內部主機。


解題方法

判斷本題可抓住兩個關鍵特徵:

  1. 內部來源位址屬於 10.0.0.0/2410.0.0.0/24,是私有 IP 網段。
  2. 對外使用相同的公有 IP 138.76.29.7138.76.29.7,再以不同來源埠號區分連線。

這正是 PAT 的典型運作方式。NAT 路由器會維護轉換表,例如:

內部來源對外來源目的地
10.0.0.2:500010.0.0.2:5000138.76.29.7:60001138.76.29.7:60001Web Server A
10.0.0.3:500010.0.0.3:5000138.76.29.7:60002138.76.29.7:60002Web Server A

收到回應封包時,路由器根據目的埠號查表:

  • 目的地為 138.76.29.7:60001138.76.29.7:60001,轉回 10.0.0.2:500010.0.0.2:5000
  • 目的地為 138.76.29.7:60002138.76.29.7:60002,轉回 10.0.0.3:500010.0.0.3:5000

因此,本題所描述的機制屬於 NAT,精確名稱是 PAT。


選項分析

(A) NAT:正確

NAT 會將私有 IP 位址轉換成公有 IP 位址,使內部多台主機能共用一個或少數幾個公有 IP。

🔒

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

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

免費註冊

第 19 題2 分

Consider the following C code:

int x = 5;

for (int a = 1; a < 6; a++)
{
    int b = 1;

    while (b < 9)
    {
        x += 2;
        b += 2;
    }
}

printf("%d", x);

After the code is executed, what is the output?

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

這一題的完整詳解

核心觀念

本題考查:

  • for 迴圈的執行次數
  • while 迴圈的執行次數
  • 區域變數 b 每次外層迴圈重新初始化
  • 變數 x 的累加運算

程式中:

int x = 5;

初始值為 x=5x=5。


解題方法與逐步追蹤

1. 計算外層 for 迴圈次數

for (int a = 1; a < 6; a++)

變數 a 依序為:

1,2,3,4,51,2,3,4,5

因此外層迴圈共執行 55 次。

2. 計算內層 while 迴圈次數

每次進入外層迴圈時,皆會執行:

int b = 1;

因此 b 每次都重新從 11 開始。

while (b < 9)
{
 x += 2;
 b += 2;
}

b 的變化如下:

執行前的 b是否滿足 b < 9執行後的 bx 增加量
1是32
3是52
5是72
7是92
9否,停止——

內層迴圈共執行 44 次,因此每次外層迴圈中:

x 增加 4×2=8x \text{ 增加 } 4\times 2=8

3. 計算總累加結果

外層迴圈執行 55 次,每次使 xx 增加 88:

x=5+5×8x=5+5\times 8
🔒

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

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

免費註冊

第 20 題2 分

Consider an infix expression: (A+B)∗C+D∗(E−F)(A+B)*C+D*(E-F).

What is its prefix expression?

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

這一題的完整詳解

核心觀念

本題考查中序表示法(infix)轉前序表示法(prefix)。

  • 中序:運算子位於兩個運算元之間,例如 A+BA+B
  • 前序:運算子放在兩個運算元之前,例如 +AB+AB
  • 前序表示式的根運算子必須最先出現,接著依序排列左子樹與右子樹。

原式為:

(A+B)∗C+D∗(E−F)(A+B)*C+D*(E-F)

依運算優先順序與括號,可寫成:

((A+B)∗C)+(D∗(E−F))\bigl((A+B)*C\bigr)+\bigl(D*(E-F)\bigr)

最外層運算子是加法 ++。


解題方法

先將中序表示式依照運算結構分成左右兩部分:

((A+B)∗C)+(D∗(E−F))\bigl((A+B)*C\bigr)+\bigl(D*(E-F)\bigr)

最外層為:

+左子式:(A+B)∗C右子式:D∗(E−F)+\quad \text{左子式:}(A+B)*C \quad \text{右子式:}D*(E-F)

左子式 (A+B)∗C(A+B)*C 的運算樹為:

  • 根運算子:∗*
  • 左子樹:A+BA+B
  • 右子樹:CC

因此其前序表示式為:

∗+ABC*+ABC

右子式 D∗(E−F)D*(E-F) 的運算樹為:

  • 根運算子:∗*
  • 左子樹:DD
  • 右子樹:E−FE-F

因此其前序表示式為:

∗D−EF*D-EF

最後,將最外層的 ++ 放在最前面:

+∗+ABC∗D−EF\boxed{+*+ABC*D-EF}

所以正確選項為:

(C)\boxed{\text{(C)}}

運算樹表示

整個運算樹如下:

 +
 / \
 * *
 / \ / \
 + C D -
 / \ / \
 A B E F

按照前序走訪順序「根 → 左 → 右」:

+ ,∗ ,+ ,A ,B ,C ,∗ ,D ,− ,E ,F+\ , *\ , +\ , A\ , B\ , C\ , *\ , D\ , -\ , E\ , F

串接後得到:

+*+ABC*D-EF

選項分析

(A) **A++BC-DEF

錯誤。

前序表示式的第一個運算子可以是 ++、−-、∗* 等,但此選項開頭為兩個連續的乘法運算子:

* *

依前序結構,第一個 ∗* 的左子樹會以第二個 ∗* 開始,後續運算元排列無法形成原式的結構。原式最外層應為加法 ++,不是乘法 ∗*。


(B) ++A*BC-*DEF

錯誤。

此選項開頭為:

+ + A ...

表示最外層加法的左子樹又是一個加法,但原式的最外層結構是:

((A+B)∗C)+(D∗(E−F))\bigl((A+B)*C\bigr)+\bigl(D*(E-F)\bigr)
🔒

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

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

免費註冊

第 21 題2 分

Consider the following C code:

int array[5] = {100, 215, 321, 254, 165};
int *k = &array[1];

*k-- += 5;
*(++k) += 9;
*(k++) += 7;
*k++ -= 15;

for (int i = 0; i < 5; i++)
    printf("%d ", array[i]);

What is the output of the above program?

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

這一題的完整詳解

核心觀念

本題考查 C 語言中的:

  • 指標運算。
  • 前置遞增 ++k 與後置遞增、遞減 k++、k-- 的差異。
  • 運算子優先順序。
  • 複合指定運算子,如 +=、-=。

關鍵解析如下:

  • *k-- 會解讀為 *(k--),因為後置遞減 -- 的優先順序高於解參照運算子 *。
  • *(++k) 先將指標 k 遞增,再存取新位置。
  • *(k++) 先存取目前位置,再將指標遞增。

初始狀態為:

array={100,215,321,254,165}\texttt{array} = \{100,215,321,254,165\}

且:

k=&array[1]k = \&array[1]

解題方法:逐行追蹤

第 1 行

*k-- += 5;

等價於:

*(k--) += 5;

先使用原本的 k,因此修改 array[1]:

array[1]=215+5=220array[1] = 215 + 5 = 220

完成存取後,k 後置遞減:

k=&array[0]k = \&array[0]

目前狀態:

array = {100, 220, 321, 254, 165}
k = &array[0]

第 2 行

*(++k) += 9;

先執行前置遞增,使:

k=&array[1]k = \&array[1]

再修改 array[1]:

array[1]=220+9=229array[1] = 220 + 9 = 229

目前狀態:

array = {100, 229, 321, 254, 165}
k = &array[1]

第 3 行

*(k++) += 7;

先使用目前的 k,所以修改 array[1]:

array[1]=229+7=236array[1] = 229 + 7 = 236

完成存取後,k 後置遞增:

k=&array[2]k = \&array[2]

目前狀態:

array = {100, 236, 321, 254, 165}
k = &array[2]

第 4 行

*k++ -= 15;

等價於:

*(k++) -= 15;

先修改目前 k 所指向的 array[2]:

array[2]=321−15=306array[2] = 321 - 15 = 306

完成存取後,k 遞增至:

k=&array[3]k = \&array[3]

最終陣列為:

🔒

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

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

免費註冊

第 22 題2 分

Which one of the following terms is NOT the advantages of paging in memory management?

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

這一題的完整詳解

核心觀念

本題考查作業系統的 paging(分頁)記憶體管理及其優點。

分頁的基本機制如下:

  • 將程序的邏輯記憶體切成固定大小的 page(頁)。
  • 將實體記憶體切成相同大小的 frame(框)。
  • 程序的各個 page 可以配置到不連續的 frame。
  • 透過 page table(頁表) 將邏輯位址中的 page number 轉換為 frame number。

分頁的主要效果包括:

  1. 固定大小的 page 與 frame 便於配置。
  2. 不需要連續的實體記憶體,因此可避免外部碎裂。
  3. 頁表項目可加入權限位元,實現記憶體保護。
  4. 多個程序可共用相同的唯讀頁或共享函式庫,實現記憶體共享。
  5. 由於配置單位固定,最後一頁未完全使用時可能產生內部碎裂。

其中:

  • 外部碎裂(external fragmentation):可用記憶體分散在許多不連續的小區塊,總空間足夠但無法配置連續區域。
  • 內部碎裂(internal fragmentation):已分配的記憶體區塊內部有未被使用的空間。

解題方法

判斷每個選項是否為 paging 的優點即可。

分頁將記憶體切成固定大小的 frame,程序也切成固定大小的 page。由於 page 可以放入任意可用的 frame,程序不必佔據連續的實體記憶體,因此能消除外部碎裂。

但是,固定大小的分頁配置也可能使最後一頁只使用一部分,剩餘空間仍被保留給該程序,形成內部碎裂。因此「防止內部碎裂」不是 paging 的優點。


選項分析

(A) same page size

正確。Paging 採用固定大小的 page,而實體記憶體也切成相同大小的 frame。page 與 frame 大小相同,才能進行直接配置與位址轉換。

固定大小的配置單位能簡化:

  • 記憶體配置與回收;
  • 頁表設計;
  • 邏輯位址到實體位址的轉換;
  • 頁面置換與磁碟交換。

因此,使用相同大小的 page 與 frame 是 paging 的重要設計優點。

(B) preventing internal fragmentation

錯誤。這是本題答案。

Paging 使用固定大小的 frame。若程序大小不是 page size 的整數倍,最後一頁通常無法完全填滿。例如 page size 為 4 KB4\text{ KB},程序需要 10 KB10\text{ KB},必須配置:

⌈104⌉=3 pages\left\lceil \frac{10}{4} \right\rceil = 3\text{ pages}

實際配置空間為:

3×4=12 KB3 \times 4 = 12\text{ KB}

其中有:

12−10=2 KB12 - 10 = 2\text{ KB}
🔒

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

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

免費註冊

第 23 題2 分

Which one of the following protocols is implemented on top of SSL/TLS?

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

這一題的完整詳解

核心觀念

本題考「應用層協定與 SSL/TLS 的關係」。

SSL/TLS 位於應用層協定與傳輸層 TCP 之間,主要提供:

  • 加密,保護資料機密性
  • 身分驗證,確認伺服器身分
  • 完整性驗證,防止資料遭竄改

HTTPS 的全名是 HTTP Secure,本質上就是:

HTTPS=HTTP over SSL/TLS\text{HTTPS}=\text{HTTP over SSL/TLS}

也就是將 HTTP 訊息交由 SSL/TLS 加密後,再透過 TCP 傳送。現代標準主要使用 TLS,SSL 已屬過時技術,但考題常以「SSL/TLS」合稱。

解題方法

看到題目問「哪一個協定實作在 SSL/TLS 之上」,直接尋找明確由「HTTP + SSL/TLS」組成的協定名稱。

  • HTTP:未加密的網頁傳輸協定
  • HTTPS:在 HTTP 之上加入 SSL/TLS 安全層的協定

因此:

HTTPS=HTTP+SSL/TLS\boxed{\text{HTTPS}=\text{HTTP}+\text{SSL/TLS}}

故官方答案為 (B) HTTPS。

選項分析

(A) HTTP

HTTP 是用於傳送網頁資料的應用層協定,傳統 HTTP 通常透過 TCP 第 80 埠傳輸,內容以明文形式傳送。

HTTP 本身不包含 SSL/TLS 加密,因此不是本題所問的答案。當 HTTP 加上 SSL/TLS 後,才稱為 HTTPS。

(B) HTTPS

HTTPS 是 HTTP over SSL/TLS,表示 HTTP 訊息先經過 SSL/TLS 保護,再透過網路傳送,通常使用 TCP 第 443 埠。

因此 HTTPS 正是「實作在 SSL/TLS 之上」的協定。

此選項正確。

(C) POP3

POP3 是 Post Office Protocol version 3,用於電子郵件接收,通常使用 TCP 第 110 埠。

POP3 原本並非建立在 SSL/TLS 之上。若使用加密版本,常見形式包括:

🔒

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

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

免費註冊

第 24 題2 分

Refer to Table 3 and Table 4. Please indicate the CORRECT SQL statement that can output as depicted in Table 5.

Table 3: movies

idmovieyearactor
m_001The Matrix1999a_002
m_002Iron Man2008a_010
m_003Doctor Strange2016a_003

Table 4: actors

idnamesalary
a_001Brad Pitt250M
a_002Keanu Reeves200M
a_003Benedict Cumberbatch150M

Table 5: output

moviename
The MatrixKeanu Reeves

(A) SELECT * FROM movies

(B)

SELECT TOP 1 movies.movie, actors.name
FROM movies
INNER JOIN actors ON movies.actor = actors.id
ORDER BY actors.salary DESC

(C)

SELECT movies.movie, actors.name
FROM movies
INNER JOIN actors ON movies.actor = actors.id
ORDER BY actors.salary

(D) All of the above can output the same results, as shown in Table 5.

(E) None of the above can output the same results, as shown in Table 5.

校方公布看官方參考答案 ▾
官方參考答案B校方公布

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

這一題的完整詳解

核心觀念

本題考查 SQL 的三個基本機制:

  1. INNER JOIN:依照指定條件,合併兩個資料表中能互相匹配的資料。
  2. ORDER BY:依指定欄位排序;DESC 代表遞減排序,由大到小。
  3. TOP 1:只擷取排序後的第一筆資料。

題目要求輸出:

moviename
The MatrixKeanu Reeves

也就是必須同時做到:

  • 從 movies 取得電影名稱;
  • 從 actors 取得演員姓名;
  • 依演員薪資由高到低排序;
  • 只保留薪資最高的第一筆。

解題方法與資料追蹤

movies.actor 對應 actors.id,因此連接條件為:

movies.actor = actors.id

逐筆比對:

movies.moviemovies.actor是否在 actors.id 找到對應姓名薪資
The Matrixa_002是Keanu Reeves200M
Iron Mana_010否無無
Doctor Strangea_003是Benedict Cumberbatch150M

由於是 INNER JOIN,Iron Man 沒有對應的演員資料,因此會被排除。

連接後的結果為:

movienamesalary
The MatrixKeanu Reeves200M
Doctor StrangeBenedict Cumberbatch150M

接著依 actors.salary DESC 由高到低排序:

  1. Keanu Reeves:200M
  2. Benedict Cumberbatch:150M

最後使用 TOP 1 只取第一筆:

moviename
The MatrixKeanu Reeves

因此正確 SQL 為:

SELECT TOP 1 movies.movie, actors.name
FROM movies
INNER JOIN actors ON movies.actor = actors.id
ORDER BY actors.salary DESC

選項分析

(A) SELECT * FROM movies

錯誤。

此指令只查詢 movies 資料表,不會連接 actors 資料表,因此:

  • 無法取得演員姓名;
  • 會輸出 id、movie、year、actor 等欄位;
  • 會列出 movies 中的所有三筆資料。

輸出欄位與資料內容都不符合 Table 5。


(B)

SELECT TOP 1 movies.movie, actors.name
FROM movies
INNER JOIN actors ON movies.actor = actors.id
ORDER BY actors.salary DESC

正確。

此指令的執行順序可概念化為:

🔒

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

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

免費註冊

第 25 題2 分

Consider a graph as follows. Starting from node D, what is the visiting sequence of all nodes by using depth-first search? If you have multiple choices, just follow the alphabetical order.

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

本題附圖正在準備中,以下為原卷對應頁面:
原卷第 8 頁

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

這一題的完整詳解

核心觀念

本題考查圖形的深度優先搜尋(Depth-First Search, DFS)。

DFS 的規則是:

  1. 從指定起點開始拜訪。
  2. 查看目前節點的相鄰節點。
  3. 若有尚未拜訪的相鄰節點,依字母順序選擇最前者,立即深入搜尋。
  4. 目前節點沒有尚未拜訪的相鄰節點時,回溯至上一個節點。
  5. 重複上述流程,直到所有節點都拜訪完畢。

圖上的邊權重只代表數值,與 DFS 的拜訪順序無關。

解題方法

從節點 DD 開始。其相鄰節點依字母排序為:

B, F, GB,\ F,\ G

因此先拜訪 BB。

依照 DFS 並採字母順序追蹤:

  1. D→BD \rightarrow B
  • BB 的未拜訪相鄰節點中,AA 最先,因此拜訪 AA。
  1. B→AB \rightarrow A
  • AA 的未拜訪相鄰節點為 CC,因此拜訪 CC。
  1. A→CA \rightarrow C
  • CC 的未拜訪相鄰節點為 EE,因此拜訪 EE。
  1. C→EC \rightarrow E
  • EE 的未拜訪相鄰節點依字母排序為 F、HF、H,先拜訪 FF。
  1. E→FE \rightarrow F
  • FF 的未拜訪相鄰節點為 GG,因此拜訪 GG。
  1. F→GF \rightarrow G
  • GG 的未拜訪相鄰節點依字母排序為 H、IH、I,先拜訪 HH。
  1. G→HG \rightarrow H
  • HH 的未拜訪相鄰節點為 II,因此拜訪 II。
  1. II 的相鄰節點皆已拜訪,搜尋結束。

因此拜訪順序為:

D, B, A, C, E, F, G, H, ID,\ B,\ A,\ C,\ E,\ F,\ G,\ H,\ I

選項分析

🔒

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

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

免費註冊

第 26 題2 分

Which one of the following has the best time complexity?

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

這一題的完整詳解

核心觀念

本題考查演算法的「時間複雜度」比較,通常以漸近分析(asymptotic analysis)判斷輸入規模 nn 增大時,執行時間的成長速度。

比較時間複雜度時,重點是觀察函數的成長階:

log⁡n<n<nlog⁡n\log n < n < n\log n

其中常數倍不影響漸近複雜度:

n2=Θ(n),2n=Θ(n)\frac{n}{2}=\Theta(n),\qquad 2n=\Theta(n)

因此,本題的「best time complexity」是指成長速度最慢、效率最佳的時間複雜度。


解題方法

將各選項依成長速度分類:

  • 對數時間:log⁡n\log n
  • 線性時間:n/2n/2、nn、2n2n
  • 線性對數時間:nlog⁡nn\log n

當 nn 持續增大時,對數函數的成長速度遠低於線性函數;線性函數又低於線性對數函數。因此:

log⁡n<n2, n, 2n<nlog⁡n\log n < \frac{n}{2},\ n,\ 2n < n\log n

所以成長最慢、時間複雜度最佳的是 log⁡n\log n。


選項分析

(A) log⁡n\log n:正確

其時間複雜度為對數時間:

O(log⁡n)O(\log n)

輸入規模增加很多倍時,執行步數只會緩慢增加。例如二分搜尋每次將搜尋範圍縮小為原來的一半,因此需要約 log⁡2n\log_2 n 次操作。

對數函數的底數只會造成常數倍差異:

log⁡an=log⁡bnlog⁡ba\log_a n=\frac{\log_b n}{\log_b a}

在 Big-O 分析中,常數倍會被忽略,因此不同底數的對數具有相同的漸近複雜度。此選項成長最慢,效率最佳。

(B) n/2n/2:錯誤

雖然 n/2n/2 比 nn 小,但常數係數 1/21/2 不影響漸近成長階:

n2=Θ(n)\frac{n}{2}=\Theta(n)

因此它仍屬於線性時間,而非對數時間。當 nn 很大時,n/2n/2 的成長速度仍遠高於 log⁡n\log n。

🔒

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

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

免費註冊

第 27 題2 分

Machine learning can be divided into supervised learning and unsupervised learning. The two problems most commonly dealt with in supervised learning are regression and classification. When you predict the target to be a continuous numerical value, we call it regression; if the target is discrete, we call it classification. Which one of the following common algorithms is NOT a classification algorithm?

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

這一題的完整詳解

核心觀念

監督式學習(supervised learning)利用已標記的資料訓練模型,主要任務分為:

  • 迴歸(regression):預測連續數值,例如身高、房價、溫度。
  • 分類(classification):預測離散類別,例如疾病/健康、是/否、良性/惡性。

本題要求找出「不是分類演算法」的選項,因此判斷重點是:該方法的典型用途是否為預測離散類別。

解題方法

逐一辨認各演算法的主要用途:

  • SVM:常用於分類。
  • Linear:通常指 Linear Regression(線性迴歸),用來預測連續數值。
  • Decision trees:可建立分類樹。
  • KNN:可用多數決進行分類。
  • Naive Bayes:典型的分類方法。

因此,不屬於分類演算法的是線性迴歸,選擇 (B)Linear。

選項分析

(A)SVM

SVM(Support Vector Machine,支援向量機)常用於分類問題。

二元分類時,SVM 尋找一個決策超平面:

wTx+b=0\mathbf{w}^{T}\mathbf{x}+b=0

使不同類別的資料被分隔,並最大化分類邊界與最近資料點之間的間隔(margin)。這些最接近決策邊界的資料點稱為支援向量。

SVM 也能透過 kernel trick 處理非線性分類,因此屬於分類演算法。本選項錯誤。

典型訓練複雜度依實作與資料特性而異,常見最佳化方法約為 O(n2)O(n^2) 至 O(n3)O(n^3);預測單筆資料通常與支援向量數量及特徵數有關。空間複雜度通常至少為 O(n)O(n)。

(B)Linear

本題中的「Linear」依考試慣例是指 Linear Regression(線性迴歸),其目標是預測連續數值。

線性迴歸模型可表示為:

y^=w0+w1x1+w2x2+⋯+wdxd\hat{y}=w_0+w_1x_1+w_2x_2+\cdots+w_dx_d

其中 y^\hat{y} 是預測結果,通常為連續數值。模型常以最小平方法最小化平方誤差:

MSE⁡=1n∑i=1n(yi−y^i)2\operatorname{MSE} = \frac{1}{n}\sum_{i=1}^{n}(y_i-\hat{y}_i)^2

例如根據年齡、血壓與體重預測血糖值,輸出可能是 105.6105.6,而非「第 1 類」或「第 2 類」。

因此,Linear Regression 是迴歸演算法,不是典型的分類演算法,故為本題答案。

以最小平方法直接求解時,若特徵數為 dd,常見矩陣計算複雜度約為 O(d3)O(d^3),儲存資料與設計矩陣約需 O(nd)O(nd) 空間;使用梯度下降時,單次迭代約為 O(nd)O(nd)。

(C)Decision trees

Decision Tree(決策樹)可用於分類,也可用於迴歸。

分類樹會根據特徵逐層切分資料,例如:

  • 年齡是否大於 50 歲?
  • 檢驗值是否超過某個門檻?
  • 是否具有某項症狀?

最後的葉節點輸出類別,因此屬於分類演算法。

🔒

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

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

免費註冊

第 28 題2 分

Which of the following terms is NOT included in 5 V’s of Big Data?

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

這一題的完整詳解

核心觀念

本題考查 Big Data(大數據)的「5 V」特徵。高雄醫學大學本題採用的標準組合為:

  1. Volume:資料量
  2. Variety:資料多樣性
  3. Velocity:資料產生與處理速度
  4. Veracity:資料真實性與可信度
  5. Value:資料價值

因此,Volatility 並不列入本題所採用的 5 V。

解題方法

判斷各選項是否屬於大數據的 5 V,逐一對照標準名詞:

Volume, Variety, Velocity, Veracity, Value\text{Volume, Variety, Velocity, Veracity, Value}

選項中只有 Volatility 不在上述五項之內,因此選擇 (E)。

選項分析

  • (A) Volume:正確

Volume 指資料的數量與規模非常龐大,例如社群網站文章、影像、交易紀錄、感測器資料等,均可能在短時間內累積大量資料。這是 Big Data 的核心特徵之一。

  • (B) Variety:正確

Variety 指資料來源與格式多樣,包含:

  • 結構化資料:資料庫表格、交易紀錄
  • 半結構化資料:JSON、XML
  • 非結構化資料:文字、圖片、影音、語音

大數據不只處理傳統表格資料,也必須整合多種格式,因此 Variety 屬於 5 V。

  • (C) Value:正確

Value 指資料經過分析後所能產生的實際價值,例如協助醫療診斷、預測疾病風險、改善商業決策。若資料只能大量累積,卻無法產生有用資訊,其應用價值便有限,因此 Value 是重要的大數據特徵。

  • (D) Velocity:正確
🔒

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

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

免費註冊

第 29 題2 分

Regarding the evaluation of machine learning, a confusion matrix contains TP (true positive) = 500, FN (false negative) = 100, FP (false positive) = 50, and TN (true negative) = 550 is proposed. Please indicate the value of recall for this model.

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

這一題的完整詳解

核心觀念

本題考查分類模型評估指標中的 Recall(召回率,也稱 Sensitivity 或 True Positive Rate)。

Recall 用來衡量:

在所有實際為正類的樣本中,模型成功預測為正類的比例。

公式為:

Recall=TPTP+FN\text{Recall}=\frac{TP}{TP+FN}

其中:

  • TP=500TP=500:實際為正類,且預測為正類
  • FN=100FN=100:實際為正類,但預測為負類

因此,所有實際為正類的樣本數為:

TP+FN=500+100=600TP+FN=500+100=600

解題方法

將題目數值代入 Recall 公式:

Recall=TPTP+FN=500500+100=500600\text{Recall} =\frac{TP}{TP+FN} =\frac{500}{500+100} =\frac{500}{600}

所以答案為:

500600\boxed{\frac{500}{600}}

Recall 的分母只計算「實際為正類」的樣本,也就是 TP+FNTP+FN,不包含 FPFP 或 TNTN。


選項分析

(A) 10501200\frac{1050}{1200}

錯誤。

分子:

TP+TN=500+550=1050TP+TN=500+550=1050

分母:

TP+FN+FP+TN=500+100+50+550=1200TP+FN+FP+TN=500+100+50+550=1200

因此此選項代表的是 Accuracy(準確率):

Accuracy=TP+TNTP+FN+FP+TN=10501200\text{Accuracy} =\frac{TP+TN}{TP+FN+FP+TN} =\frac{1050}{1200}

它不是 Recall。


(B) 500600\frac{500}{600}

正確。

Recall=TPTP+FN=500500+100=500600\text{Recall} =\frac{TP}{TP+FN} =\frac{500}{500+100} =\frac{500}{600}

因此本題官方答案為 B。


(C) 500550\frac{500}{550}

錯誤。

分母 550550 等於:

TP+FP=500+50=550TP+FP=500+50=550

這是所有被模型預測為正類的樣本數,因此此選項代表 Precision(精確率):

🔒

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

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

免費註冊

第 30 題2 分

Which of the following subnets does NOT include IP address 192.168.30.57192.168.30.57?

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

這一題的完整詳解

核心觀念

本題考查 CIDR(Classless Inter-Domain Routing)子網路表示法,以及判斷某一個 IP 位址是否落在指定子網路的範圍內。

表示法:

IP 位址/n\text{IP 位址}/n

其中 nn 表示網路前綴長度,也就是子網路遮罩中連續的 11 的數量。主機所在子網路的範圍,可由「網路位址」與「廣播位址」判斷:

網路位址≤目標 IP≤廣播位址\text{網路位址} \leq \text{目標 IP} \leq \text{廣播位址}

題目要找的是「不包含 192.168.30.57192.168.30.57」的子網路。


解題方法

針對每個選項,計算該子網路的位址區間,再檢查 192.168.30.57192.168.30.57 是否落在其中。


選項分析

(A) 192.168.30.26/24192.168.30.26/24

//24 的子網路遮罩為:

255.255.255.0255.255.255.0

因此第三個八位元組以前固定,主機範圍為:

192.168.30.0∼192.168.30.255192.168.30.0 \sim 192.168.30.255

目標 IP:

192.168.30.57192.168.30.57

落在此範圍內,因此此選項包含目標 IP,並非答案。


(B) 192.168.28.73/22192.168.28.73/22

//22 的子網路遮罩為:

255.255.252.0255.255.252.0

第三個八位元組的區塊大小為:

256−252=4256-252=4

因此子網路會以第三個八位元組的 44 的倍數為起點。2828 是 44 的倍數,所以此子網路的範圍為:

192.168.28.0∼192.168.31.255192.168.28.0 \sim 192.168.31.255

目標 IP 的第三個八位元組為 3030,落在 2828 至 3131 之間;第四個八位元組 5757 也在合法範圍內。

因此:

192.168.30.57∈192.168.28.73/22192.168.30.57 \in 192.168.28.73/22

此選項包含目標 IP,並非答案。


(C) 192.168.30.125/30192.168.30.125/30

//30 的子網路遮罩為:

255.255.255.252255.255.255.252

第四個八位元組的區塊大小為:

256−252=4256-252=4

因此子網路區塊為:

…,120–123,124–127,128–131,…\ldots, 120\text{--}123,\quad 124\text{--}127,\quad 128\text{--}131,\ldots

125125 落在 124124 至 127127 的區塊,因此此子網路範圍為:

🔒

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

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

免費註冊

第 1 題10 分

Please explain the five states that a process may be in.

校方公布看官方參考答案 ▾
官方參考答案D校方公布

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

這一題的完整詳解

核心觀念

本題考查作業系統中「行程(process)」的五狀態模型。行程在生命週期中,會依照建立、CPU 分配、I/O 等待及執行結束等事件,在下列五種狀態間轉換:

  1. New(新建立):行程正在被建立,尚未進入可執行狀態。
  2. Ready(就緒):行程已具備執行條件,只等待被排程器分配 CPU。
  3. Running(執行中):行程目前正在 CPU 上執行。
  4. Waiting/Blocked(等待/阻塞):行程等待 I/O 完成、資源取得或某項事件發生,因此暫時無法執行。
  5. Terminated/Exit(結束):行程已完成執行,或因錯誤、系統指令而被終止。

解題方法

判斷本題時,直接套用標準的 process five-state model。完整狀態集合為:

{New, Ready, Running, Waiting/Blocked, Terminated}\{\text{New},\ \text{Ready},\ \text{Running},\ \text{Waiting/Blocked},\ \text{Terminated}\}

常見狀態轉換如下:

New→Ready\text{New} \rightarrow \text{Ready}

行程建立完成後,進入就緒佇列。

Ready→Running\text{Ready} \rightarrow \text{Running}

CPU 排程器選取該行程執行。

Running→Ready\text{Running} \rightarrow \text{Ready}

發生時間片用完、較高優先權行程搶占等情況。

Running→Waiting\text{Running} \rightarrow \text{Waiting}

行程提出 I/O 請求,或等待某項事件與資源。

Waiting→Ready\text{Waiting} \rightarrow \text{Ready}

I/O 或所等待的事件完成,行程重新具備執行資格。

🔒

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

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

免費註冊

第 2 題10 分

Alice writes the following code and expects that the process prints “Hello Kitty” four times. However, the process prints “Hello Kitty” three times only! Please describe the reason why Alice’s code prints “Hello Kitty” three times instead of four.

#include <stdio.h>

int main()
{
    for (double f = 0.0; f <= 0.3; f += 0.1)
    {
        printf("Hello Kitty.\n ");
    }

    return 0;
}
校方公布看官方參考答案 ▾
官方參考答案D校方公布

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

這一題的完整詳解

核心觀念

本題考查:

  1. for 迴圈的執行順序。
  2. double 浮點數的二進位表示與舍入誤差。
  3. 浮點數不適合直接使用 ==、<= 進行精確邊界判斷。

0.1 在十進位中看似簡單,但轉換成二進位浮點數時通常無法精確表示,因此儲存的實際值會是非常接近 0.10.1 的近似值。


解題方法

for 迴圈的執行順序為:

  1. 執行初始化:f = 0.0
  2. 判斷條件:f <= 0.3
  3. 執行迴圈本體
  4. 執行增量:f += 0.1
  5. 回到第 2 步判斷

程式可視為:

double f = 0.0;

while (f <= 0.3)
{
 printf("Hello Kitty.\n ");
 f += 0.1;
}

在一般使用 IEEE 754 double 的環境中,追蹤如下:

次數f 的概念值條件 f <= 0.3是否列印
第 1 次0.00.0成立是
第 2 次約 0.10.1成立是
第 3 次約 0.20.2成立是
第 4 次約 0.300000000000000040.30000000000000004不成立否

關鍵在於,連續執行三次增量後,f 並不一定恰好等於十進位的 0.30.3:

0.0+0.1≈0.10.0 + 0.1 \approx 0.1 0.1+0.1≈0.20.1 + 0.1 \approx 0.2 0.2+0.1≈0.300000000000000040.2 + 0.1 \approx 0.30000000000000004

因此第四次進入迴圈前,實際判斷近似為:

0.30000000000000004 <= 0.3

結果為假,所以迴圈只執行三次。


為什麼官方答案是 D

官方答案 D 所代表的核心原因是:double 浮點數存在表示與累加舍入誤差,使得第三次加上 0.1 後的實際值略大於 0.3,導致條件 f <= 0.3 不成立。

所以程式列印三次,而非預期的四次。


逐步程式追蹤

for (double f = 0.0; f <= 0.3; f += 0.1)

等價於:

🔒

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

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

免費註冊

第 3 題10 分

Consider the following processes. Please draw the schedules (Gantt Chart) and calculate the average waiting time for the Preemptive Shortest Job First and Round Robin (time-quantum = 4 ms) scheduling policies, respectively.

ProcessArrival TimeCPU Burst Time
P10 ms15 ms
P23 ms7 ms
P35 ms2 ms
P47 ms3 ms
校方公布看官方參考答案 ▾
官方參考答案C校方公布

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

這一題的完整詳解

核心觀念

本題考查 CPU 排程中的:

  • Preemptive Shortest Job First(SJF),又稱 Shortest Remaining Time First(SRTF)
  • Round Robin(RR)
  • Gantt Chart
  • Waiting Time(等待時間)
  • Average Waiting Time(平均等待時間)

每一個行程的等待時間可用下式計算:

Waiting Time=Completion Time−Arrival Time−CPU Burst Time\text{Waiting Time} = \text{Completion Time} - \text{Arrival Time} - \text{CPU Burst Time}

平均等待時間為:

Average Waiting Time=∑各行程等待時間行程總數\text{Average Waiting Time} = \frac{\sum \text{各行程等待時間}}{\text{行程總數}}

一、Preemptive Shortest Job First

解題方法

每當有新行程抵達,就比較目前所有可執行行程的「剩餘 CPU 執行時間」,選擇剩餘時間最短者執行。若新行程的剩餘時間更短,便立即搶占目前行程。

排程過程

t=0t=0

只有 P1P1 抵達,因此執行 P1P1。

  • P1P1 執行區間:0∼30\sim3
  • t=3t=3 時,P1P1 尚剩 1212 ms
  • P2P2 抵達,剩餘 77 ms

因此搶占 P1P1,改執行 P2P2。

t=5t=5

此時:

  • P1P1 剩餘 1212 ms
  • P2P2 剩餘 55 ms
  • P3P3 抵達,需 22 ms

P3P3 的執行時間最短,因此搶占 P2P2。

t=7t=7

P3P3 執行完畢,P4P4 抵達。此時:

  • P1P1 剩餘 1212 ms
  • P2P2 剩餘 55 ms
  • P4P4 需 33 ms

選擇 P4P4 執行。

t=10t=10

P4P4 完成,此時 P2P2 剩餘 55 ms,短於 P1P1 剩餘的 1212 ms,因此執行 P2P2。

t=15t=15

P2P2 完成,最後執行 P1P1 至完成。

Gantt Chart

0 3 5 7 10 15 30
| P1 | P2 | P3 | P4 | P2 | P1 |

等待時間計算

ProcessCompletion TimeArrival TimeBurst TimeWaiting Time
P1P13001530−0−15=1530-0-15=15
P2P2153715−3−7=515-3-7=5
P3P37527−5−2=07-5-2=0
P4P4107310−7−3=010-7-3=0

因此:

Average Waiting Time=15+5+0+04=5 ms\text{Average Waiting Time} = \frac{15+5+0+0}{4} = 5\text{ ms}

二、Round Robin,時間量 q=4q=4 ms

解題方法

Round Robin 使用循環佇列:

  1. 每個行程最多執行 44 ms。
  2. 若 44 ms 內完成,便離開佇列。
  3. 若尚未完成,則移至佇列尾端。
  4. 新抵達的行程加入就緒佇列尾端。

排程過程

t=0∼4t=0\sim4

P1P1 先執行 44 ms,剩餘:

15−4=11 ms15-4=11\text{ ms}

P2P2 在 t=3t=3 抵達,因此佇列為 P2,P1P2,P1。

t=4∼8t=4\sim8

執行 P2P2 44 ms,剩餘:

7−4=3 ms7-4=3\text{ ms}

在此期間:

  • P3P3 於 t=5t=5 抵達
  • P4P4 於 t=7t=7 抵達

佇列接續為 P1,P3,P4,P2P1,P3,P4,P2。

t=8∼12t=8\sim12

🔒

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

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

免費註冊

第 4 題10 分

Consider a weighted graph, where the edges show the costs, as follows. Please use the Kruskal Algorithm to get the corresponding minimum-cost spanning tree. Not only the result but also the whole procedure steps should be presented in your answer.

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

本題附圖正在準備中,以下為原卷對應頁面:
原卷第 11 頁
校方公布看官方參考答案 ▾
官方參考答案D校方公布

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

這一題的完整詳解

核心觀念

本題考查 Kruskal Algorithm 求最小成本生成樹(Minimum-Cost Spanning Tree, MST)。

  • 生成樹必須連通所有頂點。
  • 若圖有 nn 個頂點,生成樹必有 n−1n-1 條邊;本圖有 99 個頂點,因此最後需選出 88 條邊。
  • Kruskal 法則是:將所有邊依成本由小到大排序,依序加入目前的邊;若加入後形成 cycle(迴圈),則捨棄該邊。

解題方法與排序

圖中的邊及成本依小到大排列如下:

成本邊
8(0,1)(0,1)、(3,5)(3,5)
9(1,4)(1,4)、(7,8)(7,8)
11(5,7)(5,7)、(6,8)(6,8)
12(0,2)(0,2)、(3,6)(3,6)、(3,7)(3,7)
13(1,2)(1,2)
14(2,3)(2,3)
16(3,8)(3,8)
19(4,5)(4,5)
20(3,4)(3,4)
21(2,6)(2,6)
25(1,3)(1,3)

依 Kruskal Algorithm 逐步判斷:

步驟考慮邊判斷目前選取邊
1(0,1)(0,1),8不形成 cycle,加入(0,1)(0,1)
2(3,5)(3,5),8不形成 cycle,加入(0,1),(3,5)(0,1),(3,5)
3(1,4)(1,4),9不形成 cycle,加入加入 (1,4)(1,4)
4(7,8)(7,8),9不形成 cycle,加入加入 (7,8)(7,8)
5(5,7)(5,7),11不形成 cycle,加入加入 (5,7)(5,7)
6(6,8)(6,8),11不形成 cycle,加入加入 (6,8)(6,8)
7(0,2)(0,2),12不形成 cycle,加入加入 (0,2)(0,2)
8(3,6)(3,6),12已在同一連通分量,形成 cycle,捨棄不加入
9(3,7)(3,7),12已在同一連通分量,形成 cycle,捨棄不加入
10(1,2)(1,2),13連接兩個不同分量,加入加入 (1,2)(1,2)
🔒

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

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

免費註冊

其他考古題

111 年高雄醫學大學的其他科目

高雄醫學大學《計算機概論與程式設計》其他年度

其他學校的《計算機概論與程式設計》