110 關務特考三等 電機工程 計算機概論 考古題詳解
第 一 題20 分
給定一個 IEEE 754 單精確度浮點數 為一個 32 位元表示,其中 表示符號位元(sign bit), 表示偏移指數(biased exponent), 表示尾數(或稱小數部分,mantissa)。
給予 2 個 IEEE 754 單精確度浮點數表示的數值如下:
(一) 請將 兩個數值轉換成 2 進制數值。(7 分)
(二) 請將 兩個數值轉換成 2 進制數值。(7 分)
(三) 請計算 並以 2 進制數值表示。(6 分)
登入後即可作答並保存紀錄。
核心觀念
IEEE 754 單精確度浮點數的欄位分為符號位元 、8 位元偏移指數 ,以及 23 位元小數部分 。對正規化數,實際數值為
其中 的最高位 是隱含位元,不儲存在 中。本題的 、 指數欄位皆不為全 或全 ,所以使用正規化數公式。
解題方法
先將每個 32 位元表示切成 ,將指數減去偏移值 ,再把小數欄位接在隱含的 之後。計算 時,先用相同的 次方表示兩數,再相減。
(一) 轉換為二進制數值
- ,所以數值為正。
- ,故實際指數 。
- ,故有效數字為 。
因此
(二) 轉換為二進制數值
第 二 題20 分
對於 IPv4 位址,假設一個子網路的位址區段定義為 ,則:
(一) 其子網路遮罩為何?請解釋。(10 分)
(二) 請列出這個子網路的 IP 位址範圍。(10 分)
登入後即可作答並保存紀錄。
核心觀念
IPv4 位址由 32 個位元組成。CIDR 表示法中的 /25 表示前 25 位元是網路位元,剩下 位元是主機位元。子網路遮罩中,網路位元設為 1、主機位元設為 0。
解題方法
(一)求子網路遮罩
將前 25 位設為 1,可分成四個 8 位元組:
每組轉換為十進位:
因此,子網路遮罩為 255.255.255.128。
(二)求 IP 位址範圍
題目給定網路位址為 140.113.235.0/25。遮罩的最後一個位元組為 128,因此每個 /25 子網路在最後一個位元組的區塊大小為:
第 三 題30 分
下圖為一個尺寸(即節點數)為 7 的二元搜尋樹(binary search tree)。
🖼️【此處有附圖,請對照原卷】
(一) 依序插入 16、10、21 三個值,使得每次插入結果仍為二元搜尋樹,並保持原來在二元搜尋樹裡的數值位置不變。請畫出三次插入結果,尺寸分別為 8、9、10 的二元搜尋樹。(15 分)
(二) 請將原來的二元搜尋樹(下圖)改變成為另外三個不同結構但包含一樣的數值之二元搜尋樹,且這三個二元搜尋樹的高度分別為 2、3、4。(15 分)
登入後即可作答並保存紀錄。
核心觀念
二元搜尋樹(BST)中的每個節點都符合:左子樹的值小於節點值,右子樹的值大於節點值。插入新值時,從根節點開始逐一比較,直到找到空的位置,再將新值放入該處。
本題的「高度」以根節點到最深葉節點的邊數計算。例如,路徑 有 3 條邊,因此原樹高度為 3。
(一)依序插入 16、10、21
原樹如下:
14
/ \
7 25
/ /
3 18
\ \
5 22
插入 16: 比較路徑為 、、,因此將 16 放在 18 的左子節點。
14
/ \
7 25
/ /
3 18
\ / \
5 16 22
接著插入 10: 比較路徑為 、,因此將 10 放在 7 的右子節點。
14
/ \
7 25
/ \ /
3 10 18
\ / \
5 16 22
最後插入 21: 比較路徑為 、、、,因此將 21 放在 22 的左子節點。
14
/ \
7 25
/ \ /
3 10 18
\ / \
5 16 22
/
21
三次插入後的節點數依序為 8、9、10,原有節點的位置均未改變。
第 四 題10 分
假設甲和乙兩人要以「非對稱性加密法」(或稱公開金鑰密碼系統)互相傳送「加密」文件。
(一) 請問收到密文的一方,是否能確認送件者是誰?為什麼?(5 分)
(二) 若是改用「對稱性加密法」互相傳送「加密」文件,請問收到密文的一方,是否能確認送件者是誰?為什麼?(5 分)
登入後即可作答並保存紀錄。
核心觀念
本題考的是加密能提供的「機密性」與「來源認證」並不相同:密文能否被解讀,取決於解密金鑰;能否確認傳送者,則取決於傳送者是否以只有自己掌握的憑證產生可驗證的身分證明。
公開金鑰密碼系統中,每人有一對金鑰:公開金鑰可公開,私密金鑰由本人保管。使用收件者的公開金鑰加密,主要是確保只有持有對應私密金鑰的收件者能解密;這本身不會證明文件來自誰。
對稱式加密中,傳送者與收件者共用同一把祕密金鑰。持有這把金鑰的人都能加密及解密,因此單靠密文及成功解密,也不能判定究竟是哪一方製作密文。
解題方法
分別檢查加密所使用的金鑰:
- 若使用收件者的公開金鑰加密,任何人都可能取得該公開金鑰並產生密文。因此收件者解密成功,只能確認密文是以其公開金鑰所對應的私密金鑰解開,不能確認送件者身分。
- 若使用甲、乙共用的對稱金鑰加密,甲、乙都能產生可解密的密文。因此乙收到密文並解密成功,不能排除是乙自己或其他取得共用金鑰者所製作。
第 五 題20 分
以下為一個 C++ 程式,請問:
(一) 其目的為何?(6 分)
(二) 詳述執行流程。(7 分)
(三) 寫出程式的輸出。(7 分)
#include <iostream> #include <iomanip>
int main() { int min = 3, max = 10, d = 4, L = 0, count = 0; int i;
for (i = min; i <= max; i++)
{
int x = i*i;
if (x == (x / d)*d)
{
count++;
if (i > L) { L = i; }
printf("%d\n", i);
}
}
printf("count = %d, L = %d\n", count, L);
return 0;
}
登入後即可作答並保存紀錄。
核心觀念
本題考查 C++ 的 for 迴圈、整數除法與餘數判斷,以及計數器和最大值更新。
條件式
用整數除法判斷 能否被 整除。因為 會捨去小數部分,若 可被 整除,則 ;等價於 。
解題方法
程式設定 min = 3、max = 10、d = 4,讓 i 依序取 至 的整數。每次迴圈計算 ,再檢查 是否為 的倍數。
若符合條件,程式會:
- 將符合條件的數量
count加一。 - 若目前的
i大於L,就以i更新L。 - 輸出
i。
逐次計算如下:
i | x = i*i | 是否為 4 的倍數 | 執行結果 |
|---|---|---|---|
| 3 | 9 | 否 | 不輸出 |
| 4 | 16 | 是 | count = 1、L = 4,輸出 4 |
| 5 | 25 | 否 | 不輸出 |
| 6 | 36 | 是 | count = 2、L = 6,輸出 6 |
| 7 | 49 | 否 | 不輸出 |