107 高普考普通考試 電信工程 計算機概要 考古題詳解
第 1 題2 分
關於資料容量的單位,下列何者的大小排列順序正確?
核心觀念
本題測驗計算機系統中資料儲存容量單位(Data Capacity Units)之階層關係與倍數進位概念。
在資訊科學中,資料計量的最基本單位為位元組(Byte,簡寫為 ),。為了表示較龐大的資料量,會加上度量衡前綴(Prefixes)。在二進位系統(以 為進位基準)或十進位 SI 制(以 為基準)中,各級前綴的大小先後順序完全一致,定義如下:
- (Kilobyte,千位元組):
- (Megabyte,百萬位元組):
- (Gigabyte,吉位元組/十億位元組):
- (Terabyte,兆位元組):
依據其所代表的數量級,各單位容量由小至大的關係為:
解題方法
本題主要檢驗考生對常用單位前綴大小的熟練度,以及對不等號方向(大於「」與小於「」)的判讀能力。
- 確認階層量級:
- (Kilo)為 或 級別。
- (Mega)為 或 級別。
- (Giga)為 或 級別。
- (Tera)為 或 級別。
- 建立大小排序:
- 若採「由小至大(遞增)」排列,應使用小於符號「」:
第 2 題2 分
下列計算機語言中,何者可用於合成(Synthesize)數位電路?
核心觀念
本題主要測驗硬體描述語言(Hardware Description Language, HDL)之定義及其在數位電路邏輯合成(Logic Synthesis)中的應用。
- 硬體描述語言(HDL):用以描述數位硬體架構、行為、時序以及並行(Concurrency)特性的專用語言。不同於傳統軟體語言描述的是 CPU 循序執行的指令,HDL 描述的是實際的電子線路結構與邏輯轉移。
- 邏輯合成(Logic Synthesis):利用電子設計自動化(EDA)工具,將以暫存器傳輸級(Register-Transfer Level, RTL)撰寫的硬體描述程式碼,轉換為特定製程庫(Cell Library)所支援的閘階層網表(Gate-level Netlist),進而實作於 FPGA(現場可程式化邏輯閘陣列)或 ASIC(特定應用積體電路)中。
解題方法
解題切入點在於區分「通用軟體程式語言」與「硬體描述語言」:
- 目標平台:通用程式語言(如 C++、Java、Python)旨在編譯或直譯為處理器執行的指令集,無法直接對應硬體閘電路;而硬體描述語言則專門用於建立數位邏輯閘與正反器的拓撲結構。
- 關鍵動作「合成(Synthesize)」:在電子工程與計算機架構中,「合成」特指由硬體語法產生數位電路網表的過程。檢視四個選項,唯有 Verilog 屬於標準硬體描述語言(IEEE 1364),具備可合成子集(Synthesizable Subset),能直接用於電路合成。
選項分析
第 3 題2 分
在多媒體的壓縮技術中,為了減少數據所佔空間,多採用 entropy coding 來達成目的。假設有 6 個字母 M、N、O、P、Q、R 出現的頻率為:前兩個字母 ,後四個字母 。請利用 Huffman 編碼計算其 entropy:
核心觀念
- 資訊熵(Shannon Entropy): 在資訊理論中,夏農熵用以量化資訊源平均每個符號所產生的資訊量(不確定性),其定義公式為: 單位通常為位元/符號(bits/symbol)。
- 霍夫曼編碼(Huffman Coding)與平均碼長: 霍夫曼編碼為一種經典的無失真統計熵編碼(Entropy Coding)技術,其建樹原則是「出現頻率高的符號賦予較短的碼長,出現頻率低的符號賦予較長的碼長」,其平均碼長計算公式為: 其中 為符號 的編碼位元長度。
- 夏農第一極限定理(無失真原始碼編碼定理): 任何無失真編碼的平均碼長 。當所有符號的出現機率恰好為 的負整數次方(即機率分佈為二進制冪次 )時,每個符號的最佳碼長剛好等於其自資訊量(),此時霍夫曼編碼的平均碼長精確等於夏農熵(),達到理論極限。
解題方法
本題給定 6 個字母的出現機率如下:
檢驗總機率:,分佈完整。
方法一:直接計算資訊源夏農熵(Entropy)
代入夏農熵公式:
計算各對數項:
代入數值:
方法二:依霍夫曼演算法建樹並求平均碼長(Average Code Length)
- 初始節點集合:
- 第一次合併:取最小的兩節點 與 ,生成新節點 。
第 4 題2 分
以八位元、二進位表示十位數值 的二補數(2's complement)為何?
核心觀念
本題測驗計算機系統中帶號整數(Signed Integer)的二進位表示法,特別是二補數(2's complement)的運算規則與特性:
- 數值範圍:在 位元的二補數系統中,可表示的十進位整數範圍為 。本題 ,範圍為 。 落在可表示範圍內。
- 正負數編碼原則:
- 最高有效位元(MSB)為符號位元:
0代表正數,1代表負數。 - 正整數以一般的無號二進位表示。
- 負整數 之二補數求法:先寫出正整數 的二進位碼,求其一補數(反相)後再加 1,即:
解題方法
將十進位數值 轉換為八位元二補數表示法,依正規步驟推導如下:
-
步驟一:求十進位 的八位元二進位表示 利用 2 的冪次分解:。 補足至 8 位元:
-
步驟二:取一補數(位元反相) 將所有位元反轉(
0變1,1變0): -
步驟三:加 1 得到二補數 在一補數的最低位加 :
因此, 的八位元二補數為 。
選項分析
- (A) :錯誤。 位元數僅有 6 位元,未滿足題目要求的「八位元」;
第 5 題2 分
為了檢查資料是否正確,電腦常在每筆資料後增加一個位元核對,這個位元稱為同位核對位元(Parity Check Bit)。請問當資料為 時,若採用偶數同位核對,則該同位核對位元應為:
核心觀念
本題測驗電腦網路與資料通訊領域中最基礎的錯誤控制技術——同位檢查(Parity Check)。
- 同位位元(Parity Bit):又稱同位核對位元,是附加在原始資料後的額外「單一位元(1 bit)」,用以檢查資料傳輸過程中是否有單一位元發生反轉錯誤(單一位元偵錯)。
- 偶同位檢查(Even Parity Check):傳送端附加同位位元後,必須確保「原始資料位元與同位位元中,『』的總個數為偶數」。
- 若原始資料中的「」已有偶數個,則同位位元填 。
- 若原始資料中的「」為奇數個,則同位位元填 ,使總數補足為偶數。
- 奇同位檢查(Odd Parity Check):傳送端附加同位位元後,必須確保「原始資料位元與同位位元中,『』的總個數為奇數」。
解題方法
步驟一:計算原始資料中「」的個數 題目給定的原始資料為 。 將所有位元中的「」進行累加: 原始資料中共有 個「」,屬於奇數。
步驟二:依據「偶數同位」規則決定同位位元 本題指定採用「偶數同位核對」,設同位位元為 。 傳送時「資料位元加上同位位元」中「」的總個數必須為偶數: 因此,同位位元 必須為 ,使整體「」的總數達到 (偶數)。
選項分析
第 6 題2 分
下列哪一選項不屬於 UNIX 系統呼叫(system call)?
核心觀念
本題的核心考點在於「系統呼叫(System Call)」與「標準函式庫函式(Library Function)」的分層架構與本質差異:
- 作業系統的雙重模式(Dual-Mode Operation): 現代作業系統為保護硬體與核心資料結構,將 CPU 運作劃分為「使用者模式(User Mode)」與「核心模式(Kernel Mode)」。
- 系統呼叫(System Call): 作業系統核心(Kernel)對外提供的標準程式化介面。使用者程式若需存取受保護的硬體資源(如檔案 I/O、行程控制、網路通訊),必須透過引發軟體中斷(Trap)切換至核心模式,由作業系統核心代為執行。
- 標準函式庫函式(Library Function):
由高階語言執行環境(如 C 語言標準函式庫
libc)提供的使用者層級(User Space)函式。主要提供高階資料結構、格式化解析或緩衝區(Buffer)管理。函式本身執行於使用者模式,底層視需要再呼叫對應的系統呼叫以完成硬體操作。
解題方法
判定一個函式是否屬於 UNIX 系統呼叫,切入點為檢視其執行層級與底層封裝關係:
- 判斷是否為直接的 Kernel 介面: UNIX/POSIX 標準中,直接操作核心資源(如依賴檔案描述子 File Descriptor 進行無緩衝 I/O、直接控制行程生命週期)的介面皆為系統呼叫。
- 辨析 C 語言 I/O 函式庫的封裝層次:
高階格式化 I/O 函式(如
printf、scanf)屬於應用層與標準函式庫,負責將變數依照格式字串(Format Specifier)轉為字元陣列並存入緩衝區,其本身不直接與終端機硬體通訊,而是透過呼叫底層的write系統呼叫輸出。因此它屬於「函式庫函式」,非「系統呼叫」。
選項分析
- (A)
printf:正確(本選項不屬於系統呼叫,故選 A)printf是 C 語言標準 I/O 函式庫(<stdio.h>)所提供的使用者層級函式。其功能是解析格式化字串並進行暫存區(Buffer)管理,全程在使用者模式下運作;
第 7 題2 分
關於計算機輔助儲存設備(auxiliary storage devices)之敘述,下列何者正確?
核心觀念
本題測驗電腦硬體架構中「輔助儲存設備(Auxiliary Storage Devices)」的運作原理與技術規格,主要涵蓋以下重點:
- 光學儲存媒體之規格演進:CD、DVD 與 BD(藍光)在雷射波長()、物鏡數值孔徑()與儲存容量的物理限制關係。
- 光碟編碼與錯誤更正架構:CD-DA(紅皮書)與 CD-ROM(黃皮書)在扇區結構、編碼機制(CIRC vs. 額外 EDC/ECC)之差異。
- 可複寫光碟(CD-RW)之相變技術(Phase-Change Technology):利用不同雷射功率產生「非晶質(Amorphous)」與「結晶質(Crystalline)」的相態切換,以完成資料寫入、清除與讀取。
- 光碟與磁碟之實體磁軌結構:光碟的單一連續螺旋軌道(Continuous Spiral Track)與傳統磁碟的同心圓軌道(Concentric Tracks)之結構差異。
解題方法
解答本題需自「物理層(光學系統與材料特性)」與「邏輯/資料層(格式與編碼)」切入判斷:
- 區分 CD 與 DVD 的容量提升成因:光碟容量的增加源於聚焦光點大小(Spot Size )的縮小,屬於光學硬體升級,而非單純的資料壓縮軟體技術。
- 分析 CD-RW 的熱相變機制:寫入與清除皆需加熱材料使其熔化或退火,必須使用較高功率的雷射;讀取僅需感測光線反射率差異,故使用不破壞相態的低功率雷射。
- 比對光碟與磁碟的幾何排列:磁碟磁軌由內而外為獨立封閉的同心圓,光碟則仿效黑膠唱片自內圈向外延伸為單一連續螺旋線,二者儲存幾何格式截然不同。
選項分析
-
(A) 錯誤:
-
音樂光碟(CD-DA,規範於 Red Book)與電腦資料光碟(CD-ROM,規範於 Yellow Book)雖然使用相同的 近紅外線雷射與基礎的八比十四調變(Eight-to-Fourteen Modulation, EFM),但在資料編碼與錯誤更正(Error Correction Code)架構上並不相同。
-
音樂播放對些微暫態位元錯誤容忍度較高,僅採用單層交叉交錯里德-所羅門碼(Cross-Interleaved Reed-Solomon Code, CIRC);而電腦資料不能容忍任何位元錯誤,CD-ROM 額外規劃了扇區(Sector)標頭與第二層錯誤偵測與更正碼(EDC/ECC,即 Layered ECC / Reed-Solomon Product Code),因此兩者之編碼架構不同。
-
(B) 錯誤:
-
DVD 的容量大幅提升(由 CD 的約 提升至單面單層的 )並非透過「壓縮技術」,而是採用了不同的光學雷射技術與更緊密的物理結構。
-
CD 使用波長 的紅外線雷射,物鏡數值孔徑 ;
第 8 題2 分
在記憶體的階層式(memory hierarchy)架構中,下列哪一個存取時間最短?
核心觀念
本題測驗計算機組織中「記憶體階層架構」(Memory Hierarchy)的核心概念與特性。
現代電腦架構受限於製造成本與物理特性,無法兼顧「超大容量」與「極致速度」,因此採用階層式設計,依據局部性原理(Principle of Locality,包含時間局部性與空間局部性)將不同特性的儲存元件分層配置:
- 越靠近 CPU 運算核心的階層:存取速度越快(存取時間 越短)、單位位元成本越高、容量越小。
- 越遠離 CPU 運算核心的階層:存取速度越慢(存取時間 越長)、單位位元成本越低、容量越大。
記憶體階層由頂層至底層的標準排列順序為:
解題方法
題目詢問「存取時間最短」,即代表「存取速度最快」(存取時間與存取速度成反比)。從各儲存元件之實體構造與典型存取時間(Access Time)進行比較:
- CPU 暫存器(Register):直接內建在 CPU 處理器內部,與算術邏輯單元(ALU)緊密相連,存取僅需不到一個或數個時脈週期(Clock Cycle),存取時間通常小於 。
- 快取記憶體(Cache Memory):多採用靜態隨機存取記憶體(SRAM)製作,分為 L1、L2、L3 快取,存取時間約在數奈秒()。
- 主記憶體(Main Memory):主要由動態隨機存取記憶體(DRAM)構成,存取時間約數十奈秒()。
第 9 題2 分
當新產生的程序(Process)進入作業系統時,會先被放在下列何種佇列(Queue)?
核心觀念:作業系統之程序排程佇列(Process Scheduling Queues)
本題測驗作業系統中程序排程(Process Scheduling)的佇列結構與程序生命週期(Process Life Cycle)的初始階段。
依據經典作業系統權威教科書(Silberschatz 等著《Operating System Concepts》,俗稱恐龍書)的經典定義,系統在管理程序時主要維護以下三種排程佇列:
- 工作佇列(Job Queue):當程序剛進入系統時,會先存放於工作佇列中,該佇列包含系統中的所有程序(通常暫存於次級儲存體的 Job Pool 中)。
- 就緒佇列(Ready Queue):已載入主記憶體(Main Memory),且已具備執行所需之所有資源、僅等待配發 CPU 運算時間的程序集合。
- 設備/輸出入佇列(Device Queue / I/O Queue):正在等待特定 I/O 設備(如磁碟、印表機、網路)完成服務的程序集合。
解題方法
解析本題的關鍵切入點在於區分「程序的建立與接納(Admission)」流程:
- 新程序進入系統(New State): 當一個新程序(Process)剛被建立時,它最初被置於次級儲存體(輔助記憶體)的批次集或集區中,此時存放該程序的佇列即為工作佇列(Job Queue)。
- 長程排班程式(Long-Term Scheduler / Job Scheduler)之調度: 長程排班程式負責控制「多元程式規劃度(Degree of Multiprogramming)」。它會從「工作佇列」中挑選適量的工作,將其程式碼與控制資料結構(PCB)載入主記憶體,並轉移至「就緒佇列(Ready Queue)」。
- 題意判定: 題目詢問的是「新產生的程序進入作業系統時,會『先』被放在何種佇列」,依據上述流程,最先進入的佇列必然為工作佇列(Job Queue),而非已進入主記憶體的就緒佇列。
選項分析
- (A) 工作佇列(Job Queue):正確。 依作業系統經典理論,程序剛被系統接收時,先進入工作佇列暫存於磁碟;待長程排班程式(Job Scheduler)審核並配置主記憶體資源後,才正式接納(Admit)轉移至就緒佇列。故「最先被放置」的佇列為工作佇列。
第 10 題2 分
關於資料庫主鍵(Primary Key)之敘述,下列何者錯誤?
核心觀念
本題測驗關聯式資料庫(Relational Database)中鍵值(Keys)之定義與特性,核心概念涵蓋:
- 主鍵(Primary Key, PK):在關聯表(Relation / Table)中選定用來唯一識別每筆紀錄(Tuple / Record)的屬性(Attribute / Column)或屬性集合。
- 單一主鍵與複合主鍵(Composite Key):主鍵可由單一屬性構成,亦可由兩個或多個屬性共同組成。
- 實體完整性限制(Entity Integrity Constraint):主鍵的屬性值必須具備唯一性(Uniqueness),且不可為空值(NOT NULL)。
- 參照完整性限制(Referential Integrity Constraint):外來鍵(Foreign Key, FK)需對應至其他表格(或同表格)的主鍵或候選鍵,藉以建立關聯性。
解題方法
由關聯式資料庫理論切入,檢視主鍵的「組成型態」、「約束條件」與「跨表關聯機制」:
- 主鍵來自於候選鍵(Candidate Key),候選鍵在數學定義上為關聯綱要(Relation Schema)屬性集合的子集合(Sub-schema)。因此,該子集合之元素個數(Cardinality)可以是 1 個,亦可以是多個(大於等於 1 個)。
- 檢驗各選項敘述是否符合標準定義,並找出對主鍵特性描述過於狹隘或有誤的項目。
選項分析
第 11 題2 分
下列哪項敘述是用遮罩(mask)去反轉一個 8 位元樣式最左邊 3 個位元,但不改變其他位元?
核心觀念
本題測驗微處理機與組合語言中基礎的位元邏輯運算(Bitwise Operation)與遮罩(Masking)應用。
利用遮罩對特定二進位樣式(Bit Pattern)進行操作時,三種最常見的布林邏輯運算特性如下:
- XOR(互斥或,)——用於「反轉位元」(Toggle / Invert)
- 任何位元與 做 XOR,值會被反轉:(若 ,則 ;若 ,則 )。
- 任何位元與 做 XOR,值保持不變:。
- OR(或,)——用於「設定位元為 」(Set bits)
- 任何位元與 做 OR,強制變成 :。
- 任何位元與 做 OR,值保持不變:。
- AND(且,)——用於「清除位元為 」(Clear bits)或「遮蔽擷取」
- 任何位元與 做 AND,強制清為 :。
- 任何位元與 做 AND,值保持不變:。
解題方法
- 確認目標需求:
- 樣式長度為 位元,設為 。
- 題目要求將「最左邊 3 個位元」(即高位元 )進行反轉,目標為 。
- 其餘 5 個位元()必須保持不變。
- 選擇邏輯運算子與建構遮罩:
- 欲達成「反轉」效果,必須選用 XOR 運算。
- 欲反轉的位元位置,遮罩對應位置必須放置 (因 )。
- 欲保持不變的位元位置,遮罩對應位置必須放置 (因 )。
- 因此,最左邊 3 個位元設為 ,右邊 5 個位元設為 ,遮罩值即為二進位的 。
第 12 題2 分
一個 的 SRAM 記憶體,通常具有多少條位址線接腳?
核心觀念
- 記憶體規格表示法: 記憶體容量規格通常以 表示。
- 前項代表該晶片具有多少個獨立可定址的「儲存單元(位址數)」。
- 後項代表每個儲存單元能容納的「資料位元數(Data Width)」。
-
位址線與定址空間之關係: 若記憶體具有 條位址線(Address Lines),每條線路具有高/低電位(0 或 1)兩種狀態,則 條位址線最多可組合出 個不同的二進位位址:
-
二進位數量單位換算: 在計算機結構中,。常見 的次方數值需熟記,例如 。
解題方法
- 解析規格: 題目給定之 SRAM 規格為 :
- 位址數(儲存單元總數): 個。
- 資料寬度:(對應晶片的資料線接腳,共 條,即 )。
- 計算位址線數: 求位址線接腳數只需針對「位址數」進行以 為底的對數運算。將 轉換為 的次方: 因為共有 個可定址單元,故所需位址線數量 為:
第 13 題2 分
對兩個空堆疊(empty stacks) 及 分別執行下列步驟後,何者的最後一個 之回傳值為 B?
註:push 為加入一元素到 stack 之動作,pop 為由 stack 取出一元素之動作。
核心觀念
本題主要測驗資料結構中堆疊(Stack)的基本操作原理與狀態追蹤:
- 後進先出(Last-In, First-Out, LIFO):最後被推入堆疊的元素,會最先被取出。
- 基本操作定義:
push(x):將元素 置入堆疊頂端(Top)。pop:將堆疊頂端的元素取出並回傳其值。
- 巢狀操作語法:例如 ,依照運算順序,會先執行內層的 取出 頂端元素,接著將該元素作為引數傳給外層的 ,亦即完成「將 頂端元素移至 頂端」的轉移動作。
解題方法
解此類題目最適用的方法為逐步追蹤法(Trace Method):
- 堆疊狀態以串列符號表示,約定由左至右為「底端 頂端」,右側為可進行存取的堆疊頂端(Top)。
- 對各選項的每一個指令進行循序推導,詳細記錄每次操作後 與 的內容變化,最後檢視最後一個指令 所彈出的元素。
選項分析
(A) 選項
- :,
- :,
- :,
- : 彈出 並推入 ,此時 ,
- : 彈出頂端元素 並推入 ,此時 ,
- :彈出 頂端元素,回傳值為 C。(錯誤)
(B) 選項
- :,
- :,
- : 彈出頂端元素 並推入 ,此時 ,
- :,
第 14 題2 分
分別以循序搜尋法及二元搜尋法處理 15 筆資料,所需進行比較次數之最大值分別為?
核心觀念
本題評量搜尋演算法(Search Algorithms)之最差時間複雜度與最大比較次數分析,包含兩大基礎搜尋方法:
- 循序搜尋法(Sequential Search / Linear Search):
- 特性:資料無需預先排序,由第一筆資料開始逐一向後比對。
- 比較次數:在最差情況(Worst Case)下,若目標資料位於陣列最後一個位置,或者目標資料根本不在陣列中,必須將全部 筆資料皆比對完畢,故最大比較次數為 次。
- 二元搜尋法(Binary Search):
- 特性:資料必須事先經過排序。每次選取搜尋區間的正中間元素與目標鍵值比對,若不相符則捨棄半數資料,將問題規模縮減為 。
- 比較次數:每次比較後搜尋空間減半,在最差情況下相當於二元搜尋樹(Decision Tree)的樹高。處理 筆資料時,所需之最大比較次數公式為: 亦即滿足 之最小正整數 。
解題方法
本題已知資料筆數 ,分別推導兩種搜尋法的最大比較次數:
-
循序搜尋法: 若欲搜尋之資料不存在於清單中,演算法必須從第 1 筆一路比對至第 15 筆才能判定失敗。因此:
-
二元搜尋法: 每次比對中間鍵值後排除一半的資料,其資料範圍逐次縮減過程如下:
- 第 1 次比較:從 15 筆中比對中間元素,未命中後剩餘 筆。
- 第 2 次比較:從 7 筆中比對中間元素,未命中後剩餘 筆。
- 第 3 次比較:從 3 筆中比對中間元素,未命中後剩餘 筆。
第 15 題2 分
一個完全二元樹有 48 個節點,請問這棵樹的高度為何?
核心觀念
- 完全二元樹(Complete Binary Tree): 一棵高度為 的完全二元樹,除最底層(第 層)外,其餘各層(第 層至第 層)之節點數均達到最大容量;且最底層的節點皆由左至右緊密排列,中間不留任何空隙。
- 樹高與層數定義慣例: 在台灣國家考試(如公職高普考、各類特考)的計算機概要與資料結構考題中,普遍遵循經典教科書(如 Horowitz 等著之《Fundamentals of Data Structures》)之定義:
- 樹的「根節點(Root)」位於第 層(Level 1),亦即單一節點之樹高定義為 。
- 節點數與高度關係式: 若樹高為 (根節點高度為 ),則:
- 第 層最多可容納 個節點。
- 高度為 的二元樹,節點總數最大值(即滿二元樹 Full Binary Tree)為:
- 高度為 的完全二元樹,其第 層至少有 個節點,前 層全滿,故節點總數 的合理範圍為:
- 反推高度公式為:
解題方法
題目給定完全二元樹的節點數 。
方法一:公式推導法
將 代入高度公式 : 因為 ,得知: 因此,樹高為:
方法二:逐層累計夾擠法
計算各層全滿時的累計節點數:
- 第 層: 個,累計 個
- 第 層: 個,累計 個
- 第 層: 個,累計 個
- 第 層: 個,累計 個
第 16 題2 分
下列關於堆積(heap)資料結構之敘述,何者正確?
核心觀念
二元堆積(Binary Heap,常簡稱為堆積)在資料結構中有兩大核心定義:
- 結構性質(Shape Property):堆積必須是一棵完全二元樹(Complete Binary Tree),國內部分教材與考題亦譯為完整樹。其特徵為除最後一層外,其餘各層均完全填滿;最後一層的所有節點則由左至右緊密排列。因為這個特性,堆積可以直接用連續的一維陣列(Array)高效實作,不需額外儲存指標。
- 堆積性質(Heap Property,亦稱順序性質):
- 最大堆積(Max Heap):任何節點的鍵值均大於或等於其子節點的鍵值(根節點為最大值)。
- 最小堆積(Min Heap):任何節點的鍵值均小於或等於其子節點的鍵值(根節點為最小值)。
解題方法
本題為觀念定義題,解題切入點在於區分「堆積的結構定義」與「堆積操作之時間複雜度」:
- 結構辨析:檢驗堆積是否屬於二元搜尋樹(BST),以及它本質上屬於哪種樹狀結構(完整樹/完全樹)。
- 效率分析:具 個節點的完全二元樹,其樹高必為 。插入與刪除的最糟情況均由樹高決定,藉此評估其最壞時間複雜度。
選項分析
- (A) 二元搜尋樹(BST):錯誤。 二元搜尋樹(Binary Search Tree)要求任一節點之左子樹所有鍵值皆小於根節點、右子樹所有鍵值皆大於根節點(全域由小到大的排序關係)。而堆積僅維持「父子節點間」的偏序關係(Partial Order),左右子節點之間或跨子樹之間並無特定大小順序。因此,堆積並非二元搜尋樹。
第 17 題2 分
下列關於排序之敘述,何者錯誤?
核心觀念
- 內部排序(Internal Sort)與外部排序(External Sort)的定義:
- 內部排序:待排序之資料量可完全容納於主記憶體(RAM)內,排序過程全部在記憶體中進行,存取速度主要取決於 CPU 與記憶體速度。
- 外部排序:待排序之資料量過大,超出主記憶體可用容量,必須藉由次級儲存裝置(如硬碟、磁帶等外存)輔助儲存與分批處理。外部排序的主要效能瓶頸在於外部 I/O 傳輸次數。
- 存取模式(Access Pattern)與外部儲存特性:
- 外部儲存媒體(特別是傳統磁帶或機械硬碟)進行「循序存取」(Sequential Access)的傳輸效率極高,而「隨機存取」(Random Access)則會造成大量的磁頭尋道時間(Seek Time)或無法回溯尋道,效能極差。
- 合併排序(Merge Sort):合併過程只需依照順序由前往後讀取多個已排序好的區塊(Runs),輸出亦為循序寫入,具有天生優良的循序存取特性,是外部排序的核心架構(如外部多路合併排序,External -way Merge Sort)。
- 快速排序(Quick Sort):分割(Partitioning)階段需使用指標從序列兩端頻繁跨位置掃描與交換元素,高度依賴隨機存取,若應用於外存會造成嚴重的隨機 I/O 瓶頸。
解題方法
本題為資料結構與演算法之觀念題,解題切入點如下:
- 先由主記憶體容量限制判定內部排序與外部排序的劃分標準(檢視選項 A、B)。
- 再以外存裝置的 I/O 成本為評估基礎,分析排序演算法是否支援「非隨機存取(循序存取)」的資料處理流程(檢視選項 C、D)。
選項分析
第 18 題2 分
使用雜湊(Hashing)法時,以 表示雜湊函式(Hash function),以 表示雜湊表(Hash table),且 分為 、、、 等共計 個桶(Bucket),每桶可存入 筆資料。若 為所有可能資料鍵(Key)值之總數, 為實際存入 之資料筆數,定義 之負載密度(Loading density), 之鍵值密度(Key density),則:
① , 且
② 若 ,則不會發生碰撞(Collision),但可能發生滿溢(Overflow)
③ 若 ,則不會發生滿溢,但可能發生碰撞
④ 若 且 ,則不會發生滿溢,亦不會發生碰撞
⑤ 理想之雜湊函式 設計應滿足 且
請由下列選項中選出最適合者:
核心觀念
本題考查資料結構中雜湊法(Hashing)的基礎架構與數學定義,主要包含以下核心概念:
- 基本架構參數:
- 桶數(Buckets):
- 每個桶所具備的槽位數(Slots):
- 雜湊表總容量(Capacity):
- 所有可能鍵值總數(Key Space):
- 實際存入雜湊表之資料筆數:
- 密度指標定義:
- 負載密度(Loading Density, ):,代表雜湊表空間的填滿比例。
- 鍵值密度(Key Density, ):,代表所有可能的鍵值空間中,實際使用之資料比例。
- 碰撞(Collision)與滿溢(Overflow):
- 碰撞:相異鍵值 ,經雜湊函式映射至同一個桶,即 。
- 滿溢:欲存入某個桶的資料筆數超過該桶容量上限 。
- 當 時,碰撞與滿溢同時發生;當 時,碰撞不一定立即滿溢,但滿溢必定起因於多次碰撞。
- 理想雜湊函式之目標:
- 追求均勻雜湊(Uniform Hashing),使各鍵值均勻分散在各個桶中,以最大幅度降低碰撞發生率。
解題方法
解題關鍵在於辨別各參數間的代數意涵,以及碰撞與滿溢發生的充要條件:
- 雜湊表是否發生碰撞或滿溢,本質上取決於「雜湊函式 的映射分佈」與「落入同一個桶的資料筆數」,不能單憑巨觀的容量大小或密度大小(如 或 )推斷為「絕不發生」。
- 透過反例檢驗各敘述是否存在邏輯漏洞(特別是帶有絕對肯定語氣者)。
選項分析
一、題幹五項敘述逐一檢驗
-
敘述 ①:, 且
-
分析:
-
一般情況下,可能鍵值總數遠大於雜湊表容量(),因此通常有 。
-
然而,若雜湊表為空(),則 ;若雜湊表完全填滿(),則 ;若採鏈結法(Chaining)處理溢位, 甚至可大於 1。
-
嚴格來說, 與 之定義域為閉區間,並非絕對滿足開區間 。此敘述在嚴謹定義下存在瑕疵。
-
敘述 ②:若 ,則不會發生碰撞(Collision),但可能發生滿溢(Overflow)
-
分析:
-
。
-
即使雜湊表總槽位數等於所有可能鍵值總數,除非 為一對一的「完美雜湊函式(Perfect Hash Function)」,否則任意雜湊函式依然可能將多個鍵值對應至同一桶而發生碰撞。
第 19 題2 分
下圖最少花費擴張樹(Minimum Cost Spanning Tree)的成本總和為何?
【原卷圖示】 文字層擷取僅保留部分圖示標示:「4」、「6」,完整圖形請參考原卷。
核心觀念
本題評量圖形理論(Graph Theory)中最少花費擴張樹(Minimum Cost Spanning Tree, MCST / MST)的定義與求法:
- 擴張樹(Spanning Tree)之定義:
- 給定一個具有 個頂點(Vertices)的連通無向圖 ,其擴張樹為包含圖中所有 個頂點、且恰有 條邊(Edges)的無環(Acyclic)連通子圖。
- 最少花費擴張樹(MST):
- 在所有可能的擴張樹中,邊的權重(Cost/Weight)總和最小者即為最少花費擴張樹:
- 求解演算法:
- Kruskal 演算法:以邊為主(Edge-based)的貪婪演算法。將全圖所有邊依權重由小至大排序,每次挑選權重最小且「不與已選邊形成環路(Cycle)」的邊加入,直到累積選滿 條邊。
- Prim 演算法:以頂點為主(Vertex-based)的貪婪演算法。由單一頂點出發,逐步挑選連接「樹內頂點」與「樹外頂點」之最小權重邊(Cut-edge)加入,直至所有頂點均被納入。
解題方法
本題原卷圖示因數位掃描文字層擷取不完整,僅顯示部分邊權重(如 、),依原卷圖形結構,該圖共包含 個頂點(設為頂點 ),故最少花費擴張樹必須恰好選取 條邊。
使用 Kruskal 演算法 進行逐步推導:
- 統計並排序邊權重: 將原圖各邊權重由小到大列出(依原卷圖示,包含權重為 等邊)。
- 依序挑選最小邊並避免成環:
- 第 1 步:選取權重為 的邊,連接兩頂點,無環,納入擴張樹(目前邊數:)。
- 第 2 步:選取另一條權重為 的邊,連接不同頂點,無環,納入擴張樹(目前邊數:)。
- 第 3 步:選取權重為 的邊,無環,納入擴張樹(目前邊數:)。
第 20 題2 分
若某一無向圖(undirected graph),含有 個頂點(vertices)與 個邊(edges),則所有頂點的分支度(degree)的總和等於?
核心觀念
本題旨在測驗圖形理論(Graph Theory)中無向圖(Undirected Graph)的結構特性,以及頂點分支度(Degree of a Vertex)與邊數(Edges)的對應關係。
- 分支度(Degree)的定義:在無向圖中,與某頂點相連的邊的數目,記為 。
- 握手定理(Handshaking Lemma):在任何無向圖中,所有頂點的分支度總和恰好等於邊數的兩倍。 數學公式為:
解題方法
從「邊對分支度的貢獻量」進行推導:
- 設無向圖 ,其中頂點集合大小為 ,邊集合大小為 。
- 無向圖中的每一條邊 都由兩個端點所組成,連接頂點 與頂點 。
- 當我們計算所有頂點的分支度總和時,每一條邊 都會同時為其兩端的頂點各貢獻 個分支度(即使是自我迴圈 self-loop,該條邊的兩端亦皆連接在同一個頂點上,依圖論定義同樣為該頂點貢獻 個分支度)。
- 因此,圖中每一條邊對整體分支度總和的累加貢獻皆恰好為 。
- 全圖共有 條邊,所有頂點的分支度總和即為:
選項分析
第 21 題2 分
下圖中共有多少個節點為關節點(Articulation Point)?
【原卷圖示】 節點標示包含 、、、、、、、、;完整圖形與連線請參考原卷。
核心觀念
-
關節點(Articulation Point,又稱割頂 Cut Vertex)定義: 在一個連通的無向圖 中,若存在一頂點 ,當移除 及所有與 相連的邊之後,所產生的子圖 之連通元件(Connected Components)數量增加(即原本連通的圖分裂成兩個或兩個以上不相連的子圖),則稱頂點 為圖 的關節點。
-
雙連通元件(Biconnected Component)特性: 雙連通元件是圖中極大且不含任何關節點的連通子圖。若兩個雙連通元件相交,其交集最多僅包含一個頂點,該頂點必定為關節點。
-
深度優先搜尋(DFS)樹判定準則(Tarjan 定理): 在無向圖的 DFS 走訪樹中:
- 根節點(Root):若在 DFS 樹中擁有兩個或兩個以上的子節點(Children),則為關節點。
- 非根節點 :若 存在至少一個子節點 ,滿足 (即 及其子樹節點無法透過逆向邊 Back-edge 連回 的祖先節點),則 必為關節點。
解題方法
本題頂點集合為 ,共 9 個節點。判斷關節點數量採用「連通性破壞檢測法(點移除法)」與「雙連通區塊交界法」:
- 逐點檢驗移除效果:
- 檢視圖中每一個節點 ,假設將其與相連的所有邊自圖中剔除。
- 若剩餘節點被分割為各自獨立、彼此無法抵達的子圖,該節點即判定為關節點。
- 原題圖形中,共有 5 個節點扮演連接不同子結構(如懸掛分支、環與環交界、或橋的端點)的關鍵樞紐。
第 22 題2 分
已知在使用二分搜尋法(Binary Search)對排序過的 個數字陣列(Array)做搜尋時,前三次比對之陣列數值依序為 、、。則下列何者不可能為搜尋值?
核心觀念
本題測驗「二分搜尋法(Binary Search)」在已排序陣列中的搜尋搜尋路徑與判斷邏輯:
- 二分搜尋法特性:每次比對均取目前搜尋區間的中間元素()與目標搜尋值()比較。
- 分支移動規則(以由小到大遞增排序為例):
- 若搜尋值 ,代表目標值位於左半部,下一步搜尋範圍將縮小至左側區間,隨後比對的數值必定小於當前比對值。
- 若搜尋值 ,代表目標值位於右半部,下一步搜尋範圍將縮小至右側區間,隨後比對的數值必定大於當前比對值。
- 若搜尋值 ,則搜尋成功終止。
解題方法
假設該已排序陣列為常見的遞增排序(由小到大排序;若為遞減排序推導結果亦完全相同):
-
第一次比對值為 : 第二次比對之數值為 。因 ,表示搜尋演算法選擇往數值較小的一側(左半部)繼續搜尋,可知搜尋值 必須滿足:
-
第二次比對值為 : 第三次比對之數值為 。因 ,表示搜尋演算法再次選擇往數值較小的一側(左半部)縮小區間,可知搜尋值 必須滿足:
-
綜合推導: 根據前兩次比對後的轉向決策,目標搜尋值 必須同時滿足 與 ,即: 若搜尋值大於等於 (如 ),在第二次比對時因 ,演算法必然會向右搜尋,第三次比對的數值應介於 至 之間,絕不可能出現小於 的數值 。
第 23 題2 分
下列的 Java 程式執行後輸出為何?
import java.lang.*;
class test { public static void main(String[] argv) { int x=0, y=0; String a=new String("test"); String b=new String("test");
if (a==b) x++;
if (a.compareTo(b)==0) y++;
System.out.println(x+" "+y);
}
}
核心觀念
本題主要測驗 Java 程式語言中 「字串物件的記憶體配置」 與 「字串比較機制」:
- 物件參考(Reference)與記憶體配置:使用
new關鍵字建立物件時,系統會在堆積區(Heap)配置獨立的記憶體空間,各變數存放的是該實體的記憶體位址(Reference)。 - 關係運算子
==的意義:用於比較兩個物件型態(Reference Type)變數時,比較的是「記憶體位址是否相同」(Reference Equality),而非比較其內容。 - 字串內容比較(
compareTo方法):
- 實作自
Comparable<String>介面。 - 依字典順序(Lexicographical order)逐一比對字元的 Unicode 編碼值。
- 若兩字串字元序列與長度完全相同,回傳整數 ;若呼叫者小於引數字串回傳負數,大於則回傳正數。
解題方法
本題採用「程式碼逐行追蹤(Trace)法」,逐步分析記憶體狀態與條件判斷:
- 初始狀態:
int x=0, y=0;
此時整數變數 ,。
- 物件實體建立:
String a = new String("test");
String b = new String("test");
- 關鍵在於運算子
new:每執行一次new String,JVM 必定會在 Heap 區配置一塊全新的記憶體區塊。 - 因此,變數
a與變數b各自指向堆積區中不同的記憶體位址(即位址 位址 ),即便兩者內部儲存的字元序列皆為"test"。
- 第一個條件判斷(位址比對):
if (a == b) x++;
- 運算子
==比對a與b所持有的物件位址。 - 由於兩者位址不同,條件式結果為
false。 x++不被執行,變數 維持為 。
- 第二個條件判斷(內容比對):
if (a.compareTo(b) == 0) y++;
a.compareTo(b)比對字串實際內容。- 兩物件內容皆為
"test",長度與各位置字元皆完全一致,因此a.compareTo(b)的回傳值為 。 - 判斷式
0 == 0結果為true。 - 執行
y++,變數 遞增為 。
第 24 題2 分
執行以下 C 指令將產生的輸出為何?
printf("%d",0x12);
核心觀念
本題主要測驗 C 語言中整數常數的進位制前綴表示法、進位制數值轉換(十六進位轉十進位)以及 printf 函式的格式指定字(Format Specifier):
- 整數進位制前綴:
- 十六進位(Hexadecimal):以
0x或0X為前綴。 - 八進位(Octal):以
0為前綴(如012)。 - 十進位(Decimal):非
0開頭的常規數字(如12)。
- 進位制權重展開:十六進位數值 轉換為十進位時,公式為:
- 格式指定字:
%d代表將引數以「十進位帶正負號整數(Signed Decimal Integer)」的形式格式化輸出。
解題方法
解題關鍵分為「辨識常數進位制」、「數值轉換」與「格式化輸出」三個步驟:
- 辨別常數數值與進位制:
程式碼中的引數為
0x12,開頭前綴為0x,代表這是一個十六進位的整數常數(即 )。 - 將十六進位轉換為十進位:
將十六進位數值 依權重展開轉換為十進位:
因此,常數
0x12在記憶體中實際儲存的數值等同於十進位的 。 - 對應
printf格式化字串:printf使用的格式指定字為"%d",要求將該整數轉換為十進位數字文字輸出,因此印出螢幕的結果為18。
第 25 題2 分
執行下列 C++ 程式碼後,螢幕會印出幾個 'Y'?
int main() { for (int i=1; i<=6; i++) { if (i%2==0) continue;
for (int j=1; j<=10; j++) {
if (j%5==0) break;
cout << 'Y';
}
}
return 0;
}
核心觀念
本題評量 C++ 程式語言中巢狀迴圈(Nested Loops)與流程跳轉控制陳述句(Jump Statements)的綜合應用能力,核心要點如下:
continue陳述句:立即略過當前迴圈本體中剩餘的程式碼,直接進入該迴圈的下一次迭代(先執行變數更新式,再重新評估條件式)。break陳述句:立即強制終止其「所屬的最內層迴圈」,程式控制權直接跳至該迴圈區塊之外接續執行。- 模數運算子(
%):求整數相除後的餘數。i % 2 == 0用於判定偶數;j % 5 == 0用於判定 的倍數。
解題方法
本題為巢狀迴圈,應採用「由外而內、分別統計」的乘法原理進行分析與推導:
1. 外層迴圈分析(變數 )
- 迴圈控制範圍為 到 ,每次遞增 。
- 條件判斷式:
if (i%2==0) continue; - 當 為偶數()時,條件成立並執行
continue,直接跳過後續所有敘述(不進入內層迴圈),進入下一個 。 - 當 為奇數()時,條件不成立,正常進入內層迴圈。
- 外層有效觸發內層迴圈的次數為 次(即 )。
2. 內層迴圈分析(變數 )
- 迴圈初值為 ,每次遞增 。
- 條件判斷式:
if (j%5==0) break;,印出敘述cout << 'Y';位於其後。 - : 印出第 1 個
'Y'。 - : 印出第 2 個
'Y'。 - : 印出第 3 個
'Y'。 - : 印出第 4 個
'Y'。 - : 觸發
break,立即跳離內層迴圈。
第 26 題2 分
下列有關 Java 程式語言的敘述何者正確?
核心觀念
本題旨在測驗 Java 程式語言的基本語法與物件導向程式設計(OOP)核心概念,涵蓋以下重點:
- 指標與參考(Pointer vs. Reference):Java 隱藏了記憶體位址運算,不提供 C/C++ 風格的顯式指標運算子(如
*與->),而是使用「物件參考」(Object Reference)。 - 抽象類別(Abstract Class)與建構子(Constructor):抽象類別不能直接透過
new實體化,但允許且常包含建構子,用以供子類別透過super呼叫,完成繼承屬性的初始化。 - 覆寫(Overriding)與多載(Overloading)之辨析:
- 覆寫(Override):子類別重新定義父類別的方法,具有相同的方法簽名(Method Signature)與回傳型態相容性。
- 多載(Overload):同一個類別內(或繼承關係中)定義同名方法,但具有不同的參數列(參數個數、型態或順序不同)。
- 大小寫敏感性(Case Sensitivity):Java 語言嚴格區分大小寫(Case-sensitive),不同大小寫的識別字(Identifier)代表不同變數。
解題方法
依據 Java 語言規範(JLS)與物件導向基本設計原則,逐一檢驗各選項之語法及觀念:
- 先排除具有 C/C++ 專用語法(顯式指標運算子
*)的選項 (A)。 - 檢驗抽象類別的特性,釐清「不可直接實體化」與「有無建構子」的差異,判定選項 (B)。
- 檢視方法覆寫與多載的定義,比對方法簽名是否一致,確認選項 (C)。
- 根據識別字規則確認大小寫敏感性,檢視選項 (D)。
選項分析
- (A) 錯誤:Java 不支援 C/C++ 的指標語法,程式碼中不存在
*指標宣告運算子。在 Java 中,建立物件參考的正確語法為:
第 27 題2 分
下列關於結構處理之指令,何者語法正確?
struct { int data; } a, b;
struct { int data; } c;
核心觀念
本題測驗 C 語言中結構(struct)之變數宣告、型態相容性(Type Compatibility)及合法運算:
- 匿名結構與型態相容性:
- 結構宣告若未指定標籤名稱(Tag Name)或未透過
typedef定義型態名稱,稱為「匿名結構(Anonymous Struct)」。 - 在 C 語言標準規範中,每一個未命名的結構宣告都會產生一個全新且獨立的結構型態。
- 在同一個陳述式中一起宣告的變數(如本題的
a與b),屬於「相同型態」;分開在不同陳述式中宣告的變數(如c),即使其成員名稱、型態與排列順序完全一致,編譯器仍認定為「不同的、不相容的型態(Incompatible Types)」。
- 結構變數的合法運算:
- 指派運算(
=):C 語言支援同型態結構變數之間的整體指派(Assignment),會自動將右側變數的所有成員值複製給左側變數(淺層複製 Shallow Copy)。 - 比較運算(
==、!=):C 語言不支援直接使用關係或相等運算子比較兩個結構變數。因為結構內部常存在記憶體對齊造成的填充位元組(Padding Bytes),且 C 語言標準並未為結構定義整體比較行為。若要比對兩結構是否相等,必須逐一比對各個成員。
解題方法
- 辨識變數型態:
struct { int data; } a, b;:變數a與b屬於同一匿名結構型態。struct { int data; } c;:變數c屬於另一獨立之匿名結構型態。- 因此, 與 型態相容; 與 、 型態不相容。
- 檢視運算合法性:
- 檢查是否使用了結構不支援的比較運算子(如
==)。 - 檢查指派運算(
=)的兩端變數是否為相同型態。
第 28 題2 分
關於 C++ 程式語言之敘述,下列何者錯誤?
核心觀念
- 類別(Class)與物件(Object)的定義:類別是物件導向程式設計(OOP)的核心,扮演「藍圖」或「範本」的角色。類別包含兩大要素:
- 屬性(Attributes/Properties):在 C++ 中稱為資料成員(Data Members),用以定義相似物件所共有的狀態或特性。
- 行為/運算(Operations/Methods):在 C++ 中稱為成員函式(Member Functions),用以定義該群物件所能執行的操作與運算。
- C++ 的多典範(Multi-paradigm)語言特徵:C++ 兼具「程序導向(Procedural)」與「物件導向(Object-Oriented)」特性,並非純物件導向語言(Pure OOP)。其設計理念向下相容 C 語言,支援內建基本資料型態(Primitive Data Types),且允許程式僅以全域函式與結構構成。
解題方法 本題要求選出「錯誤」的敘述,解題切入點在於區分「類別的標準定義」與「C++ 的語言架構規範」:
- 先檢驗 (A)、(B) 是否符合物件導向中「類別」的基本定義(屬性與方法)。
- 再檢驗 (C)、(D) 是否符合 C++ 程式架構與型態系統的實務運作(是否強制全部使用類別、基本型態是否為類別、是否可單純以程序導向撰寫)。
選項分析
- (A) 正確:類別(Class)抽象化了一組具有相同特性的實體(物件),在類別內部宣告的資料成員(如變數
int age;、string name;),即是用來定義該類別產生的物件所共有的「特性」或狀態。
第 29 題2 分
宣告一浮點數陣列 ,,此陣列共占多少位元組?
核心觀念
- 二維陣列元素總數計算: 在 C 語言等高階程式語言中,宣告為 的二維陣列,代表包含 個列(Rows)、每列有 個行(Columns),其所包含的元素總個數為:
- 陣列佔用記憶體空間公式: 陣列在記憶體中為連續配置之空間,其總佔用位元組數(Bytes)等於「元素總個數」乘上「單一元素所佔的位元組數」:
解題方法
-
計算陣列元素總個數: 題目宣告陣列為 ,維度大小分別為 與 :
-
計算總佔用記憶體大小: 題目已知單精度浮點數大小為 ,將元素總數乘上單一元素大小:
因此,該陣列共佔用 。
選項分析
- (A) 錯誤: 僅為陣列的「元素總個數」(),忽略了每個浮點數元素需佔用
第 30 題2 分
在程式語言中,只能在一個副程式(Subroutine)中被使用的資料,稱之為何?
核心觀念 本題測驗程式語言中變數的作用域(Scope)與可見性(Visibility)的基本定義。 在程序導向(Procedural Programming)或結構化程式設計中,變數依其宣告位置與可見存取範圍,主要區分為:
- 區域變數(Local Variable):於特定區塊或副程式(Subroutine / Function / Procedure)內部宣告,其有效作用範圍僅限於該副程式內部。
- 全域變數(Global Variable):於所有副程式之外宣告,其有效作用範圍涵蓋整個程式,各副程式皆可直接存取與修改。
解題方法 抓住題幹的關鍵字「只能在一個副程式(Subroutine)中被使用」:
- 「副程式」是程式中執行特定功能的獨立程式區塊。
- 當資料或變數是在副程式內部定義、配置記憶體(通常存放於系統的呼叫堆疊 Call Stack 中),且其名稱與存取權限僅於該副程式執行期間有效、外部無法直接參照,此種變數的標準術語即為區域變數(Local Variable)。
選項分析
- (A) 正確:區域變數(local variable)在副程式內部進行宣告,其作用域(Scope)封閉在該副程式內,其他副程式或主程式無法直接存取該變數,完全符合題幹「只能在一個副程式中被使用」之敘述。
第 31 題2 分
函數 是以 C 語言實作:
int A(int m, int n) { if (m<2) return n+1; else return A(m-2,n/3); }
請問 所回傳的值應為下列何者?
核心觀念
本題測驗 C 語言程式設計中遞迴函數(Recursive Function)的追蹤能力,涉及以下關鍵觀念:
- 遞迴基底條件(Base Case / 終止條件):判斷條件
if (m < 2)何時成立,以結束遞迴呼叫並開始回傳結果。 - 遞迴關係式(Recursive Step):每次呼叫
A(m-2, n/3)時,引數 每次減 、 每次進行整數除法除以 。 - 整數運算與回傳值:觸發終止條件時,回傳的數值為當前層級的 。
解題方法
採用逐層遞迴追蹤法(Call Stack Trace),由外向內展開函數呼叫,直到滿足終止條件後再由內向外回傳值:
- 第 1 次呼叫:
- 檢查條件:,因為 為假(False)。
- 執行
else:呼叫並回傳 。
- 第 2 次呼叫:
- 檢查條件:,因為 為假(False)。
- 執行
else:呼叫並回傳 。
- 第 3 次呼叫:
- 檢查條件:,因為 為真(True)。
- 觸發終止條件:執行
return n + 1,此時 ,因此回傳:
- 逐層回傳結果:
第 32 題2 分
執行下列 C++ 程式碼後,螢幕印出的數字為何?
#define f(z) zzz
int main() { cout << f(1+2) << endl; return 0; }
核心觀念
本題測驗 C/C++ 語言中前置處理器巨集(Preprocessor Macro)的文字代換機制與運算子優先順序(Operator Precedence):
- 巨集的文字替換特性:以
#define定義的帶參數巨集,在編譯的前置處理(Preprocessing)階段僅進行單純的「語彙文字替換」(Textual Substitution),並不會先計算引數運算式的值,也不會自動替參數加上括號。 - 運算子優先順序:C++ 中乘法運算子(
*)的優先權高於加法運算子(+),因此展開後的運算式須依「先乘除、後加減」之規則求值。
解題方法
本題求解分為「巨集文字展開」與「運算子求值」兩步驟:
- 文字代換(前置處理階段): 巨集定義為:
#define f(z) z*z*z
程式碼呼叫 f(1+2),此時引數為 1+2。前置處理器直接將出現 z 的位置原封不動替換為文字 1+2:
- 依優先順序求值(編譯與執行階段):
乘法(
*)優先於加法(+),因此運算式在語法樹中的結合方式為: 循序計算各乘積項:
程式執行 cout << f(1+2) << endl; 將在螢幕輸出數字 。
第 33 題2 分
核心觀念
- HTTPS 的架構與原理:HTTPS(HyperText Transfer Protocol Secure,安全超文字傳輸協定)並非全新的應用層協定,而是將傳統明文傳輸的 HTTP 協定封裝在加密通道中傳輸,其運作本質為「HTTP over SSL/TLS」,預設通訊埠(Port)為 TCP 443。
- 傳輸層安全協定(SSL/TLS):SSL(Secure Sockets Layer)最初由網景公司(Netscape)開發,後續由網際網路工程任務組(IETF)標準化並更名為 TLS(Transport Layer Security)。其運作於應用層與傳輸層(TCP)之間,透過混合加密機制(非對稱加密用於身分驗證與金鑰交換、對稱加密用於內容加解密、訊息鑑別碼 MAC 確保資料完整性)來建立安全加密連線。
解題方法
- 題意判讀:題幹說明瀏覽器網址列由
變更為 - 協定對應:網頁由 HTTP 升級為安全傳輸的 HTTPS 時,底層負責進行伺服器憑證認證、金鑰交換及資料加密傳輸的安全通訊協定即為 SSL/TLS。因此直接對應選項 (A)。
選項分析
- (A) SSL/TLS(Secure Sockets Layer/Transport Layer Security):【正確】。HTTPS 即是藉由 SSL 或 TLS 協定在客戶端(瀏覽器)與伺服器之間建立加密通道,能防止資料在傳輸途中遭竊聽、竄改或偽冒。
- (B) SET(Secure Electronic Transaction):【錯誤】。
第 34 題2 分
下列何者為以公鑰為基礎的加密演算法?
核心觀念
本題測驗密碼學中對稱式加密(Symmetric Encryption)與非對稱式加密/公鑰加密(Asymmetric Encryption / Public-Key Cryptography)之分類與常見演算法代表:
- 對稱式加密(Symmetric Encryption):加密與解密使用「同一把金鑰」(或可輕易互推的成對金鑰),亦稱秘密金鑰密碼系統(Secret-Key Cryptography)。特點是運算速度快、適合大量資料傳輸。常見演算法包含:DES、3DES、AES、IDEA、RC4、Blowfish 等。
- 公鑰加密(Public-Key Cryptography / 非對稱式加密):使用一對在數學上有關聯的「金鑰對」(Key Pair)——公鑰(Public Key)對外公開、私鑰(Private Key)由擁有者妥善保密。公鑰加密之密文僅能以對應之私鑰解密;私鑰簽署之資料亦僅能由公鑰驗證。常見演算法包含:RSA、ECC(橢圓曲線密碼)、ElGamal、Diffie-Hellman(金鑰交換)等。
解題方法
題目詢問「以公鑰為基礎的加密演算法」(即非對稱式加密系統),切入步驟如下:
- 逐一檢視各選項演算法所屬的加密架構類別。
- 選項中 AES、DES 與 IDEA 皆屬於「對稱式區塊加密演算法」(Block Cipher)。
- RSA 由 Ron Rivest、Adi Shamir 與 Leonard Adleman 於 1977 年提出,其安全性奠基於「大整數質因數分解」之數學難題,為公鑰密碼學最具代表性的演算法。
- 故應選擇 (D) RSA。
選項分析
- (A) AES(Advanced Encryption Standard,進階加密標準):錯誤。
第 35 題2 分
所謂「公平資訊慣例(FIP, Fair Information Practices)」為一系列管理個人資訊的使用與蒐集的原則,為美國和歐洲隱私法規的基礎,請問下列何者不屬於 FIP 原則?
核心觀念
本題考查資訊管理與法規中關於個人資料隱私保護的基石——公平資訊慣例原則(Fair Information Practice Principles, 簡稱 FIP 或 FIPPs)。
公平資訊慣例最早源於 1973 年美國衛生、教育與福利部(HEW)的報告,後經經濟合作暨發展組織(OECD)於 1980 年採納發展為隱私保護指引,並由美國聯邦貿易委員會(FTC)於 1998 年正式歸納為五大核心原則,成為美歐各國隱私權法令(如歐盟早期《資料保護指令》與後續 GDPR、台灣《個人資料保護法》)之法理架構基礎。
FTC 提出的五大公平資訊慣例核心原則如下:
- 通知/認知(Notice/Awareness):資料蒐集者在蒐集個人資料之前,必須明確告知當事人資料蒐集之目的、範圍、利用方式及可能揭露之第三方。
- 選擇/同意(Choice/Consent):當事人對於其個人資料是否被蒐集,以及是否被用於主要交易目的以外的用途(如次級利用、廣告行銷),擁有同意與否的選擇權(常透過 Opt-in 徵求同意或 Opt-out 退出機制呈現)。
- 存取/參與(Access/Participation):當事人有權查閱已被蒐集的個人資料,並在發現內容不正確或不完整時,有權要求更正或刪除。
- 完整性/安全(Integrity/Security):資料管理者必須採取合理的管理與技術措施,確保個人資料的正確性,並防止未經授權的存取、毀損、竄改或外洩。
- 執行/救濟(Enforcement/Redress):必須建立實質機制以確保上述原則受到落實與監督,且當個人隱私權受到侵害時,當事人能獲得適當的法律救濟或損害賠償。
解題方法
本題之解題切入點在於區分「隱私保護的法理原則」與「資訊安全系統的技術機制」:
- 題目主旨為「隱私權法規基礎(FIP)」:FIP 旨在界定「資料主體(個人)」與「資料控制者(企業/政府)」之間的權利與義務關係(如知情、同意、查閱權利),屬於政策與法律規範層次。
- 對比五大核心原則:逐一檢視選項與 FTC 五大原則(Notice、Choice、Access、Security、Enforcement)之對應關係。
第 36 題2 分
下列哪個過程可視為數位簽章?
核心觀念
本題測驗「公鑰密碼學(非對稱式密碼系統)」應用於「數位簽章(Digital Signature)」與「資料加密(Data Encryption)」的基本運作原理與金鑰搭配機制。
在非對稱式密碼系統中,每位使用者皆持有一對數學上相互關聯的金鑰:
- 公開金鑰(Public Key):向大眾公開,任何人皆可取得。
- 私有金鑰(Private Key):由本人絕對保管與獨佔,不可外洩。
兩大核心應用情境的運作差異如下:
- 資料加密(確保機密性 Confidentiality):傳送者使用「接收者的公開金鑰」將訊息加密,只有持有對應私鑰的接收者才能解密,確保傳輸過程中不被竊聽。
- 數位簽章(確保身分驗證 Authentication 與不可否認性 Non-repudiation):傳送者使用「自己的私有金鑰」對訊息(或其雜湊摘要)進行加密/簽署;接收者則使用「傳送者的公開金鑰」進行驗證。由於私鑰僅傳送者本人擁有,因此只要能成功解開,便能證實該訊息確實由傳送者發出且事後無法否認。
解題方法
判斷「數位簽章」必須掌握「誰在簽名」以及「使用何種金鑰」:
- 確認發送端與簽署主體:本題由「小李傳給小王」,欲產生的簽章主體為發信人「小李」。
- 對應金鑰的角色機制:
- 簽名代表個人身分之背書,如同蓋用個人印鑑,必須使用「只有自己擁有」的金鑰。
- 小李欲證明訊息出自其手,必須使用「小李之私有金鑰」對訊息加密(簽署)。
第 37 題2 分
我們通常會使用 ping 指令測試網路是否通順,請問 ping 所送出的封包屬於下列何者?
核心觀念
本題考查網際網路協定套組(TCP/IP)的分層架構與常用網路診斷工具之底層運作協定。
- ICMP(Internet Control Message Protocol,網際網路控制訊息協定):定義於 RFC 792,屬於 OSI 模型第三層(網路層,Network Layer)的輔助協定。主要用途是回報 IP 封包傳送過程中的錯誤(如目的地無法到達、TTL 逾時),以及提供網路狀態的測試與診斷訊息。
- ping 指令運作原理:ping(Packet Internet Groper)指令透過作業系統發送 ICMP Echo Request(型態 Type 8, 代碼 Code 0) 訊息至目標主機;若網路暢通且目標主機正常運作,目標主機會回應 ICMP Echo Reply(型態 Type 0, 代碼 Code 0)。透過計算來回往返時間(Round-Trip Time, RTT)與封包遺失率,即可評估網路通訊品質與連通性。
解題方法
本題的解題切入點在於區分網路工具所使用的協定層級與協定類型:
- 檢視傳輸模式:
ping指令的目的僅在於「測試底層 IP 節點之間是否可達」,不需要建立傳輸層的可靠虛擬電路(非連線導向),亦不需要傳輸層的埠號(Port Number)來區分特定的應用程式處理程序(Process)。 - 檢驗封包結構:
ping是直接利用網路層的 ICMP 協定進行封裝。在 IPv4 標頭中,當協定欄位(Protocol Field)的值為 時,即代表其裝載的負載資料為 ICMP 封包,而非傳輸層的 TCP(Protocol )或 UDP(Protocol )。 - 由此可知,
ping所送出的測試封包屬於 ICMP 協定。
選項分析
- (A) ICMP(正確):全名為 Internet Control Message Protocol。
ping工具直接建立於 ICMP 之上,利用 Echo Request(查詢請求)與 Echo Reply(查詢回覆)訊息來檢驗端對端連線狀態,故為正確選項。
第 38 題2 分
公司有 30 台電腦,同時需要用到某個套裝軟體。你(妳)如果是主管,則應該要:
核心觀念
本題測驗「軟體授權模式(Software Licensing)」與「資訊倫理及智慧財產權法規」。
- 站點許可(Site License)與單機授權:
- 單機授權(Single-User License):每一份授權僅允許安裝並使用於單一台電腦。
- 站點許可(Site License / 大量授權 Volume License):著作權人授權特定組織或特定地理位置(站點,Site)內的電腦,可在約定數量上限內或無限制地安裝與執行該軟體。
- 著作權法規範(以命題當年民國 107 年法規為準):
- 依我國《著作權法》規定,電腦程式著作受法律保障,其合法使用範圍受限於「軟體授權合約(EULA)」。
- 未經著作財產權人同意或授權,將取得之正版軟體超額安裝至多台電腦,或借用他人軟體複製安裝,均構成侵害著作財產權人之「重製權」(《著作權法》第 22 條)。
解題方法
本題切入點為「軟體安裝數量與授權額度必須維持 或具備對應的大量授權合約」。 題目明確指出公司有 30 台電腦「同時」需要用到該套裝軟體,企業主管在資訊資產管理與法律遵循上,必須確保所有電腦上的軟體均具備合法使用權利:
- 方式一(單機累計):若購買一般單機版軟體,電腦有 30 台,就必須購買 30 份版權。
第 39 題2 分
網際網路通訊協定堆疊中,下列何者主要以連接埠(Port)來支援應用程式的多工與解多工?
核心觀念
本題測驗 網際網路通訊協定堆疊(TCP/IP 模型)之階層職責,特別是 傳輸層(Transport Layer)的核心功能——連接埠(Port)與多工/解多工機制(Multiplexing and Demultiplexing):
- 通訊範圍的階層劃分:
- 網路層(Network Layer)提供主機對主機(Host-to-Host)的邏輯通訊,依賴 IP 位址識別目標主機。
- 傳輸層(Transport Layer)提供程序對程序(Process-to-Process)的邏輯通訊,依賴 連接埠號碼(Port Number)識別主機內的特定應用程式程序(Process)。
- 多工與解多工(Multiplexing and Demultiplexing):
- 多工(Multiplexing):在傳送端,傳輸層從不同的應用程式通訊端點(Sockets)收集資料,並封裝包含來源與目的「連接埠號碼」的傳輸層標頭,將資料傳遞給網路層。
- 解多工(Demultiplexing):在接收端,傳輸層檢視接收到的封包標頭中的「目的連接埠號碼」,將資料準確派送給對應的應用程式或通訊端點。
解題方法
題目詢問「以連接埠(Port)來支援應用程式的多工與解多工」屬於哪一層:
- 一台主機上通常會同時運行多個需要連網的應用程式(例如同時開啟瀏覽器網頁、電子郵件軟體與通訊軟體)。網路層僅能將封包送達該台「主機」(透過 IP 位址),但無法分辨該封包是屬於哪一個應用程式。
- 為了解決單一網路介面與多個應用程式共用傳輸管道的問題,TCP/IP 在傳輸層(如 TCP、UDP)定義了 16 位元的「連接埠(Port Number)」,用以區分不同的應用程式處理程序。
- 透過連接埠號碼,傳輸層在傳送端執行「匯整各程式封包送入網路(多工)」,在接收端執行「將封包拆分派送至各程式(解多工)」。因此該功能明確歸屬於傳輸層。
選項分析
- (A) 應用層(Application Layer):錯誤。 應用層負責直接提供使用者或軟體特定的網路服務功能與應用協定(如 HTTP、FTP、SMTP、DNS 等)。
第 40 題2 分
下列何者定義網路資料傳輸的速率?
核心觀念
本題主要測驗計算機網路與硬體架構中「計量單位」與「名詞定義」的辨析,核心重點如下:
- 資料傳輸速率(Data Transmission Rate):指單位時間內在通訊線路中所傳輸的數位資料量。網路通訊以「位元(bit)」為傳輸最小單位,標準度量單位為 (bits per second,位元/秒)。常見量級前綴(十進制):
- (千位元/秒)
- (百萬位元/秒)
- (十億位元/秒)
- 常見計量單位區分:
- 容量/空間單位:Byte(位元組)、KB、MB、GB、TB()。
- 時間/頻率單位:(赫茲,每秒週期數)、、。
- 傳輸速率單位:、(或 )。
解題方法
- 由題幹關鍵字切入:題目要求尋找「網路資料傳輸」的「速率(Rate)」。
- 檢視物理量維度:
- 凡稱「速率」,其因次必然為「」。
- 檢視四個選項,唯有帶有「(per second,每秒)」時間維度的度量單位,才符合「傳輸速率」的定義。
選項分析
- (A) 正確: Kbps 是 Kilobits per second(千位元/秒)的縮寫,表示每秒傳輸 個位元,是計算機網路與電信通訊中定義傳輸頻寬與速率的標準單位。
- (B) 錯誤: