109 國安局特考三等 資訊組(選試英文) 計算機概論 考古題詳解
第 一 題15 分
本題有關二元樹與算術運算式。
(一) 某一個算術運算式(arithmetic expression)利用二元樹(binary tree)做後序拜訪(postorder traversal),轉換成後序式(postfix)為:,其中 、、、、、、 代表運算元(operand),(加)、(減)、(乘)、(除)代表運算子(operator)。如果該算術運算式帶入 、、、、、、,則計算結果的值是多少?
(二) 已知某二元樹有 3 個節點,且該二元樹經後序拜訪的輸出結果依序是 、、。請列出所有滿足上述條件的二元樹。
登入後即可作答並保存紀錄。
核心觀念
本題評量資料結構中「運算式樹(Expression Tree)與後序式求值」以及「二元樹走訪(Binary Tree Traversal)之樹形還原」兩大核心主題:
- 算術運算式與後序拜訪(Postorder Traversal / Postfix Expression):
- 運算式樹(Expression Tree)的內部節點(Internal Node)皆為運算子(Operator),外部節點/葉節點(Leaf Node)皆為運算元(Operand)。
- 對二元運算式樹進行後序拜訪(左子樹 右子樹 根節點),所得即為後序式(Postfix Expression,又稱逆波蘭表示法 Reverse Polish Notation, RPN)。
- 後序式的求值本質上依賴堆疊(Stack):由左至右逐一讀取符號,遇運算元則推入(Push)堆疊;遇雙元運算子則依序彈出(Pop)兩個運算元,先彈出者為「右運算元」、後彈出者為「左運算元」,進行計算後再將結果推回堆疊。
- 二元樹後序走訪與結構決定性:
- 後序走訪順序為「左子樹 右子樹 樹根」。因此,任一子樹走訪序列的最後一個節點必定是該子樹的根節點(Root)。
- 僅憑單一走訪序列(無中序走訪輔助)無法唯一決定二元樹。3 個節點所能構成相異二元樹的總數符合卡特蘭數(Catalan Number):
- 只要分配節點使後序走訪維持 ,即可枚舉出所有合法的二元樹形態。
解題方法
(一) 後序式數值計算推導
後序運算式為: 代入數值:,運算式轉化為:
使用堆疊(Stack)進行模擬追蹤(由左至右讀取):
| 步驟 | 讀入符號 | 動作說明 | 運算過程 | 堆疊內容(底 頂) |
|---|---|---|---|---|
| 1 | 運算元入棧 | Push(5) | ||
| 2 | 運算元入棧 | Push(6) | ||
| 3 | 運算元入棧 | Push(2) | ||
| 4 | 遇到運算子,彈出兩數相除 | ,Push(3) | ||
| 5 | 運算元入棧 | Push(3) | ||
| 6 | 遇到運算子,彈出兩數相減 | ,Push(0) | ||
| 7 | 運算元入棧 | Push(2) | ||
| 8 | 遇到運算子,彈出兩數相乘 | ,Push(0) | ||
| 9 | 遇到運算子,彈出兩數相加 | ,Push(5) | ||
| 10 | 運算元入棧 | Push(9) | ||
| 11 | 運算元入棧 | Push(3) | ||
| 12 | 遇到運算子,彈出兩數相除 | ,Push(3) | ||
| 13 | 遇到運算子,彈出兩數相減 | ,Push(2) |
最後留在堆疊頂端的數值即為計算結果,值為 。
(二) 後序走訪為 之所有二元樹推導
後序拜訪的走訪定義為:「左子樹 右子樹 根節點」。 已知後序走訪輸出依序為 :
- 確定根節點:最後輸出的節點必為整棵樹的根節點,故根節點為 。
- 分配其餘節點():
- 根據後序走訪規則,左子樹所有節點必在右子樹所有節點之前輸出。
第 二 題15 分
請回答下列問題:
(一) 下列 Figure-1 的 C 程式的功用是什麼?如果執行該程式,且輸入兩個整數依序是 及 ,則輸出的結果是什麼?
Figure-1:
#include <stdio.h> #include <stdlib.h>
int f(int p, int q);
int main() { int a, n, c; scanf("%d,%d", &a, &n); c = f(a, n); printf("c = %d", c); system("pause"); return 0; }
int f(int p, int q) { if(q != 0)return p*f(p, q-1); else return 1; }
(二) 如果執行 Figure-2 的 C 程式,則輸出的結果是什麼?
Figure-2:
#include <stdio.h> #include <stdlib.h>
int main(void) { char e = 0x3c; char f = 0x03; char r; r = ~e; printf("%d\n", r & 0xff); printf("%d\n", (f<<2)); system("PAUSE"); return 0; }
登入後即可作答並保存紀錄。
核心觀念
- 遞迴函式(Recursive Function):函式在執行過程中直接或間接呼叫自身。遞迴通常包含兩個關鍵要素:
- 終止條件(Base Case):結束遞迴呼叫的條件,避免無窮遞迴(本題為 時返回 )。
- 遞迴關係(Recursive Step):將大問題化簡為結構相同但規模較小的子問題(本題為 )。
- 次方/冪次運算(Exponentiation):利用數學遞迴定義:
解題方法
- 分析函式功用:
觀察函式
int f(int p, int q):
- 當 時,回傳值為 。
- 當 時,回傳值為 。
- 由數學歸納法可知:
- 因此,此程式的功用為:計算並印出整數 的 次方(即 )。
- 追蹤執行結果(Trace):
- 題目給定輸入整數依序為 及 ,即變數 、。
- 呼叫
c = f(2, 8),展開遞迴呼叫過程: - 回溯計算:
- 主程式印出敘述為
printf("c = %d", c);(字串格式中無換行字元\n)。 - 螢幕最終輸出為:
c = 256。
解題技巧
- 輸出格式細節:作答時須注意
printf格式字串是"c = %d",不可只寫數字256,應完整寫出前綴c =。 - 輸入格式注意:
scanf("%d,%d", &a, &n);格式字串中有逗號,實務執行時輸入的兩數間必須鍵入逗號;題目已給定依序輸入 與 ,直接代入計算即可。
(二)
核心觀念
- 位元補數運算子(Bitwise NOT,
~):將變數的每個二進位位元進行反向( 變 , 變 )。 - 位元左移運算子(Bitwise Left Shift,
<<):將二進位位元向左平移指定的位元數,右側空出位元補 。在未發生溢位的情況下,向左平移 位相當於數值乘以 。 - 整數提升(Integer Promotion)與遮罩(Masking):在 C 語言中,
char參與算術或位元運算時會自動提升為int型別。
第 三 題15 分
有關記憶體管理及數字系統轉換,請回答下列問題:
(一) 有某多程式(multiprogramming)作業系統採用分頁(paging)記憶體管理,可用記憶體 ,分割成 15 個分頁。今有 2 個程式要執行,程式 A 需要 ,程式 B 需要 。試問程式 A、程式 B 各需要幾個分頁?總共有多少個分頁未被使用?
(二) 將十進位數字 轉換為二進位,並寫出轉換過程。
登入後即可作答並保存紀錄。
核心觀念
- 分頁記憶體管理(Paging Memory Management):
- 作業系統將實體記憶體分割成固定大小的區塊,稱為頁框(Page Frame);邏輯記憶體則分割成相同大小的區塊,稱為分頁(Page)。
- 分頁大小公式:
- 分頁配置原則:記憶體配置必須以「整頁」為最小配置單位。若程式大小無法被分頁大小整除,不足一頁的部分仍必須配置完整的一頁,此時會產生內部碎裂(Internal Fragmentation)。因此,程式所需分頁數應採用無條件進位(天花板函數,Ceiling Function):
- 十進位轉二進位(Radix Conversion):
- 整數部分:採用連除法(除以 2 取餘數)。將十進位整數連續除以 2,記錄每次的餘數,直到商數為 0,最後將餘數「由下往上」(由最低有效位 LSB 排至最高有效位 MSB)反向讀取。
- 小數部分:採用連乘法(乘以 2 取整數)。將十進位小數連續乘以 2,取出乘積的整數部分,再將剩餘的小數部分繼續乘以 2,重複此步驟直到小數部分為 0 或達到所需精確度,最後將整數「由上往下」依序順向讀取。
解題方法
(一) 分頁需求量與未被使用分頁數計算
-
計算單一分頁大小:
-
計算程式 A 所需分頁數: 程式 A 大小為 : (配置 ,其中內部碎裂為 )
-
計算程式 B 所需分頁數: 程式 B 大小為 : (配置 ,其中內部碎裂為 )
第 四 題15 分
請回答下列問題:
(一) 說明何謂間諜軟體(spyware)與釣魚軟體(phishing)。並說明電腦要如何防衛釣魚軟體?
(二) 某甲在上班的途中使用手機傳送一張 的照片檔案給同事,他花了 20 秒的時間。試問他的手機網路的傳輸速率是多少 Kbps?
登入後即可作答並保存紀錄。
核心觀念
本題涵蓋「資訊安全」與「網路傳輸計量」兩大計算機概論核心主題:
- 惡意程式與威脅防禦:
- 間諜軟體(Spyware):未經使用者知情或授權,秘密安裝於主機並監控、竊取使用者隱私與機敏資料的惡意程式。
- 釣魚軟體/網路釣魚(Phishing):運用社交工程(Social Engineering)手法,偽裝成合法、可信任的實體(如金融機構、入口網站),誘騙使用者交出憑證或個資;「釣魚軟體」則指用以展示偽冒介面、竊取憑證或傳遞釣魚訊息的惡意程式與釣魚工具包(Phishing Kit)。
- 縱深防禦(Defense-in-Depth):針對釣魚攻擊,防護手段應涵蓋端點安全軟體、網路與瀏覽器過濾、多因素驗證機制及使用者安全意識。
- 網路傳輸速率計算:
- 資料量單位換算:。
- 傳輸速率公式:
- 常見單位標準:儲存容量與網路速率常涉及二進制()與十進制()的慣用定義。
解題方法
(一) 間諜軟體與釣魚軟體之說明及電腦防衛作法
- 間諜軟體(Spyware)
- 定義:在使用者未同意或不知情的情況下,秘密植入系統並在背景持續運行的惡意軟體。
- 行為特徵:記錄鍵盤輸入(Keylogger)、側錄螢幕畫面、蒐集瀏覽紀錄、竊取帳號密碼與信用卡等機敏隱私資料,並透過背景網路通道傳送給攻擊者,常伴隨系統資源耗損或設定被竄改(如瀏覽器首頁被綁架)。
- 釣魚軟體(Phishing)
- 定義:利用偽裝技術進行社交工程詐欺的威脅手段。狹義指用於釣魚攻擊的惡意應用程式(如偽冒的行動網銀 App、彈出式假登入視窗軟體);廣義泛指配合釣魚信件或假網站,用以誘騙使用者輸入憑證之惡意載具。
- 行為特徵:高仿真仿冒合法網站或應用程式介面,誘騙使用者主動提供帳號、密碼、一次性驗證碼(OTP)或個人機敏資料。
- 電腦防衛釣魚軟體的具體對策
- 部署終端防護與反釣魚工具:安裝防毒/EDR 軟體,並啟用瀏覽器內建的反釣魚防護技術(如 Google Safe Browsing、Microsoft SmartScreen),即時阻擋已知惡意網址與仿冒頁面。
- 啟用多因素驗證(MFA / 2FA):對重要帳號全面啟用基於 FIDO2 / WebAuthn 或 Authenticator App 的雙因子驗證;即使密碼遭釣魚軟體竊取,攻擊者仍無法突破登入防線。
- 落實系統與軟體修補(Patching):定期更新作業系統、瀏覽器及其擴充外掛,修補安全漏洞,防止釣魚連結觸發驅動式下載(Drive-by Download)。
- 郵件過濾與連結檢查機制:配置郵件伺服器的 SPF、DKIM、DMARC 認證技術,並教育使用者於點擊連結前務必仔細檢視網址(URL)之網域名稱與 TLS 憑證真偽,切勿點擊來源不明的附件與超連結。
(二) 手機網路傳輸速率計算
- 已知條件:
- 檔案大小
- 傳輸時間
- 目標單位:(Kilobits per second)
- 推導步驟:
步驟 1:位元轉換(Byte 至 bit)
步驟 2:計算傳輸速率 依據傳輸速率公式: