112 高普考普通考試 電子工程 計算機概要 考古題詳解
第 1 題2 分
在設計管線式(pipeline)處理器時,需搭配各式軟硬體的設計機制,以減少管線因 data hazard 損失的運算效能。下列優化運算效能的技術,何者不能於編譯器(compiler)上實施?
核心觀念
本題考查計算機組織與結構中管線處理器(Pipelined Processor)之資料冒險(Data Hazard)處理機制,以及硬體控制與軟體(編譯器)最佳化之分工:
- 資料冒險類型:包括 RAW(Read-After-Write,真相依)、WAR(Write-After-Read,反相依)與 WAW(Write-After-Write,輸出相依)。
- 解決層次劃分:
- 純硬體機制(Hardware-only):於處理器執行期(Run-time)藉由微架構專屬電路動態偵測並解決相依性,例如前向傳遞(Data Forwarding / Bypassing)。
- 軟體/編譯器機制(Software / Compiler):於靜態編譯期(Compile-time)透過代碼重排、暫存器重新指派或迴圈重構消除管線停頓(Stall)。部分技術(如暫存器重新命名)亦可同時具備軟體靜態版與硬體動態版。
解題方法
解題切入點在於區分各項技術的實作層次(靜態編譯代碼層 vs. 執行期電路微架構層):
- 編譯器能做的事情限於「生成與調配指令序列、配置架構暫存器(Architectural Registers)」。
- 若某技術依賴處理器內部實體微架構連線、多工器(MUX)與轉發控制邏輯,在指令於管線各階段執行時即時旁路(Bypass)傳遞運算結果,則屬於微架構純硬體實作,編譯器無法在軟體層面替代此物理傳遞機制。
選項分析
-
(A) Data forwarding(符合題意,為正確答案) 不能於編譯器實施。Data forwarding 又稱 Bypassing(旁路傳遞),是純粹的硬體技術。當前序指令與後續指令存在 RAW 資料相依時,硬體的轉發單元(Forwarding Unit)藉由管線暫存器(如 EX/MEM、MEM/WB)至 ALU 輸入端之間的實體導線與多工器,直接將剛算好的結果提前旁路傳遞給後續指令,無需等待寫回暫存器檔案(Register File)。此機制全憑硬體電路在執行期動態運作,編譯器無法藉由軟體編程直接實施實體線路的訊號旁路。
-
(B) Instruction scheduling(可於編譯器實施) 指令排程是經典的編譯器最佳化技術(亦稱 Static Scheduling)。
第 2 題2 分
將時間切割成很多小片段,讓 CPU 不停地在許多程序(Process)之間切換執行,每位使用者以為自己的程序一直持續在執行,這種作業系統稱為:
核心觀念
本題考「分時系統(Time-sharing system)」的運作方式:作業系統把 CPU 時間分成許多短時間片(time slice),輪流分配給多個程序執行。時間片很短,且作業系統會快速切換程序,因此使用者感覺自己的程序持續占用 CPU。
解題方法
抓住題幹的兩個關鍵線索:「時間切割成很多小片段」和「使用者以為自己的程序一直持續在執行」。這描述的是分時系統以時間片輪流服務多位使用者或多個程序,帶來互動式、近似同時執行的使用感受。
選項分析
- (A) 多元(Multi-programming)系統:錯誤。 多元程式設計是讓多個程序同時留在記憶體中;當某程序等待輸入/輸出時,作業系統切換到其他程序,以提高 CPU 使用率。題幹強調的是按短時間片輪流分配 CPU,屬於分時系統的特徵。
第 3 題2 分
在記憶體階層架構裡,下列敘述何者錯誤?
核心觀念
本題考記憶體階層的種類與用途。記憶體通常依存取速度、容量及成本排列:CPU 暫存器最快,其次是快取記憶體、主記憶體,之後是輔助記憶體。越靠近 CPU 的記憶體通常速度越快、容量越小。
解題方法
逐一確認各選項描述的記憶體種類與階層位置。主記憶體一般由 RAM 構成,硬碟屬於輔助記憶體;提升 CPU 與主記憶體之間存取效能的典型高速記憶體則是快取記憶體(Cache)。快閃記憶體主要用於 SSD、USB 隨身碟等儲存裝置,並非標準記憶體階層中置於 CPU 與主記憶體之間的快取。
選項分析
第 4 題2 分
音樂 CD 的取樣頻率是 ,取樣位元是 位元,一段雙聲道 秒鐘的音樂,在無壓縮的情形下,需要多少位元組(Byte)來儲存?
核心觀念
數位音訊的未壓縮資料量,取決於取樣頻率、每次取樣的位元數、聲道數與錄音時間。計算時先求總位元數,再以 位元 Byte 換算為位元組。
解題方法
每秒每個聲道取樣 次,每次取樣使用 位元;雙聲道有 個聲道,錄音時間為 秒。因此:
換算為位元組:
選項分析
第 5 題2 分
將二進位數字 換算為四進位數字,下列何者正確?
核心觀念
二進位與四進位的基底互為平方關係,因為 。因此,每 個二進位位元可以直接換成 個四進位數字:
解題方法
由小數點向左,每兩個二進位位元分成一組。題目中的二進位數為 ,分組後為:
逐組換算:
依原位序排列,得到:
第 6 題2 分
關於 process 與 thread 的敘述,下列何者錯誤?
核心觀念
本題考 process(行程/程序)與 thread(執行緒) 的記憶體與資料共享方式。
- Process 是程式執行時的資源與記憶體管理單位。不同 process 通常各有獨立的位址空間。
- Thread 是 CPU 排程與執行的基本單位。同一 process 內的 threads 共享該 process 的程式碼、全域變數與堆積等資源,但各自有自己的堆疊與暫存器狀態。
- 多核心系統可透過多個 threads 或多個 processes 執行平行工作;能否平行執行,取決於工作安排及系統支援。
解題方法
判斷關鍵在於 global variable 的共享範圍:同一 process 內的 threads 共享位址空間,因此能存取同一個全域變數;不同 processes 則各有獨立位址空間,不能直接以同名全域變數交換資料。跨 process 溝通須使用作業系統提供的行程間通訊(IPC),例如共享記憶體、管線或訊息佇列。
選項分析
第 7 題2 分
對 和 按位元(bit-wise)進行 AND 的運算,結果為下列何者?
核心觀念
位元 AND(bit-wise AND)是逐位比較兩個二進位數字:只有兩個位元都為 ,結果才是 ;其餘情況皆為 。
解題方法
將兩數由右至左對齊,逐位套用 AND 規則:
因此,
第 8 題2 分
下列哪一種作業系統排程演算法,理論上能得到最短的平均等待時間?
核心觀念
本題考查作業系統的 CPU 排程。平均等待時間是所有行程在就緒佇列中等待 CPU 的時間總和,除以行程數。若各行程皆已就緒,且已知其 CPU 執行時間,最短工作先做(SJF)會優先執行所需 CPU 時間較短的行程,理論上可使平均等待時間最短。
解題方法
將行程依 CPU 執行時間由短至長排序,先完成短工作,可避免短工作長時間排在長工作後面。若行程執行時間為 ,依此順序排程時,第 個行程的等待時間為前面行程執行時間之和:
平均等待時間為:
此順序讓較短的執行時間較少被計入其他行程的等待時間,因此能使平均等待時間達到最小。題目問「理論上」的最佳演算法,答案即為 SJF。
第 9 題2 分
某計算機系統具有 bits 位址的記憶體定址空間,並包含一個 direct mapped 快取記憶體(cache)。該快取記憶體每個 cache block 為 bytes,且必須儲存 bits 的位址做為 tag。該快取記憶體的大小為何?
核心觀念
直接對映快取(direct-mapped cache)的 32 位元位址會分成三部分:
其中,block offset 用來指定區塊內的位元組位置;index 用來選出快取中的區塊;tag 用來辨認該區塊對應的主記憶體位址。
解題方法
每個 cache block 為 bytes,因此區塊內位移需要:
題目指定 tag 為 bits,所以 index 位元數為:
直接對映快取共有 個 cache block。每個 block 為 bytes,故快取資料區大小為:
第 10 題2 分
將八進位數值 換算為十六進位,下列何者正確?
核心觀念
不同進位制的數值可先換算成十進位,再轉成目標進位制。八進位每一位的位值依序為 ;十六進位則以 至 和 至 表示,其中 。
解題方法
先將 展開為十進位:
再將 連續除以 ,由下往上讀取餘數:
因此十六進位各位數由高位至低位為 ,故:
選項分析
第 11 題2 分
程式執行的流程有時必須根據指令執行的結果而改變,在處理器管線(Pipelining)架構中,這種情形將會引發何種危障(Hazard)?
核心觀念
處理器管線將指令拆成多個階段,讓不同指令能同時在不同階段執行。當管線中的指令無法依原定時序順利執行時,稱為管線危障(Pipeline Hazard)。
若下一步要執行哪一條指令,必須依目前指令的結果才能決定,例如條件分支指令須等比較或判斷結果出來,處理器才知道要沿原路徑繼續執行,還是跳到分支目標。這會使管線無法立即確定後續應載入的指令,形成控制危障(Control Hazard),也稱分支危障(Branch Hazard)。
解題方法
題幹的關鍵是「根據指令執行的結果而改變程式執行流程」。這描述的是分支或跳躍造成的控制流程變化,因此辨認為控制危障。若分支結果尚未確定,處理器可能需要暫停管線、清除已載入的錯誤路徑指令,或透過分支預測降低等待影響。
選項分析
第 12 題2 分
網路傳輸媒介中,下列何者最不受電磁波干擾?
核心觀念
本題考查網路傳輸媒介對電磁波干擾的敏感程度。雙絞線與同軸電纜以金屬導體傳送電訊號,無線傳輸則直接利用電磁波傳遞資料;光纖傳送的是光訊號,不依賴電流在金屬導體中流動,因此最不受外部電磁波干擾。
解題方法
比較各媒介的傳輸訊號是否容易受到外界電磁場影響:
- 金屬線路以電訊號傳輸,可能受到外部電磁干擾。
- 無線傳輸本身使用電磁波,容易受其他無線訊號或電磁雜訊影響。
- 光纖以光訊號傳輸,且纖芯為非導電材料,外部電磁場不易干擾光訊號。
因此,最不受電磁波干擾的是光纖。
選項分析
第 13 題2 分
已知某二元樹為不同數字之最大堆積(Max-heap),下列敘述何者正確?
核心觀念
最大堆積(Max-heap)是符合下列條件的完全二元樹:
- 堆積順序性:每個父節點的值都大於其子節點的值。題目給定數字互不相同,因此父節點值嚴格大於子節點值。
- 完全二元樹結構:除最後一層外,其餘各層都填滿;最後一層的節點由左向右排列。
堆積順序性只比較具有直屬關係的父子節點,並不規定所有節點的整體大小排列。
解題方法
沿著任一條從樹根到樹葉的路徑,每往下一層都是從父節點走到子節點。依最大堆積的定義,父節點值必定大於子節點值,所以路徑上的數值會由上而下遞減。
陣列表示法則是依二元樹的層序,由上而下、由左而右存放節點。這種存放次序不代表陣列元素整體遞增或遞減。
選項分析
(A) 錯誤。 陣列依層序存放,不保證整體遞減。例如最大堆積可為根節點 ,其左、右子節點分別為 、,陣列表示為 ,最後一項 大於前一項 。
第 14 題2 分
在程式執行中,為有效地利用記憶體空間,當需要記憶體空間來存放資料時,才向系統索取所需的記憶體空間。要達到此目的,下列何種資料結構設計最合適?
核心觀念
本題考資料結構的記憶體配置方式。若程式在執行期間需要資料時,才向系統索取所需空間,適合採用動態記憶體配置。鏈結串列的節點可在需要時逐一配置,並以指標連接,因此不必事先配置一整段固定大小的連續空間。
解題方法
題幹的關鍵是「需要記憶體空間來存放資料時,才向系統索取」。判斷重點在於資料結構能否按需求配置節點,而非其資料存取或進出順序。
鏈結串列由節點組成,每個節點存放資料及連結資訊。新增資料時,可配置新節點並接到串列中;刪除資料時,則可釋放相應節點。這種按需配置的特性,符合題意。
選項分析
第 15 題2 分
【題組共用題幹】
假設有堆疊 、 與佇列 、、,以下圖方式連結,且 有三個資料 A、B、C(A 在佇列前端),其餘堆疊與佇列皆為空。
今有四個指令如下:
- 若 非空,從 刪除一個資料並 push 到 中。
- 若 非空,從 pop 出一個資料並加入到 中。
- 若 非空,從 刪除一個資料並 push 到 中。
- 若 非空,從 pop 出一個資料並加入到 中。
我們可用任何順序執行這四個指令,直到所有資料皆存入 。下列敘述何者正確?
核心觀念
本題考查:
- 佇列(Queue):先進先出(FIFO)。
- 堆疊(Stack):後進先出(LIFO)。
- 透過兩個「佇列—堆疊」轉換階段,判斷資料排列是否能達成。
的輸入順序固定為 ,但可藉由等待、交錯執行指令,使資料進入 時產生不同排列;再經由 調整順序後進入 。
解題方法
以指令編號表示操作:
只要能列出每一種 輸出排列的合法操作順序,即可證明該排列可以達成。
下表中,「第一階段結果」表示資料進入 的順序;「第二階段」表示由 經 輸出至 的指令順序。
| 順序 | 第一階段結果 | 第一階段指令 | 第二階段指令 |
|---|---|---|---|
第 16 題2 分
假設有一棵完滿二元樹(Full binary tree)含有 個內部節點(Internal nodes),則該棵二元樹的總節點數是多少個?
核心觀念
完滿二元樹(Full binary tree)的每個內部節點都恰有兩個子節點。設內部節點數為 ,葉節點數為 ,則總節點數為:
解題方法
每個內部節點各有兩條通往子節點的邊,因此全樹的邊數為 。另一方面,任何含有 個節點的樹,其邊數皆為 。令總節點數為 ,可得:
因此:
所以總節點數為 。
選項分析
- (A) :錯誤。 這是把內部節點數與葉節點數的關係混淆了;完滿二元樹的葉節點數是 ,總節點數還要再加上 個內部節點。
第 17 題2 分
傳統的電腦系統架構中,CPU 通常到哪裡取得指令來執行?
核心觀念
這題考查傳統電腦系統的「取指」流程。CPU 透過程式計數器(Program Counter, PC)記錄下一個要執行的指令位址,再依該位址到主記憶體讀取指令,送入 CPU 解碼並執行。
解題方法
判斷「CPU 到哪裡取得指令」時,要區分記錄指令位址的暫存器與實際存放程式指令的記憶體:
- PC 保存下一個指令的位址。
- CPU 依 PC 所指的位址,向主記憶體讀取指令。
- 指令讀入 CPU 後,再進行解碼與執行。
因此,指令的來源是主記憶體;PC 只是提供存取位置。
選項分析
第 18 題2 分
若要將 個各自由小到大排序好的數列(長度分別為 和 )進行合併排序(Merge sort),使得合併後的數列也能由小到大排列,則合併過程最多需要進行幾次數字比較?
核心觀念
合併排序(Merge sort)的合併步驟,是比較兩個已排序數列目前尚未處理的最前端數字,將較小者放入結果數列,再繼續比較。當其中一個數列用完時,另一個數列剩餘的數字已經排好序,可直接接到結果末端,不必再比較。
解題方法
兩個數列長度分別為 和 。要讓比較次數最多,必須讓兩個數列的數字交錯出現,使每次比較都只取出一個數列的數字,直到其中一個數列只剩最後一個數字。
因此最多比較次數為:
比較到第 次後,其中一個數列已經用完;另一數列剩下的數字直接接上即可,不需要第 次比較。
選項分析
第 19 題2 分
下列由 C 語言程式撰寫的函數 sort 實作了何種排序法?
void sort (int a[], int l, int h) { if (l >= h) return;
int j, i, key;
i = l;
j = h;
key = a[i];
while (i < j) {
while (i < j && a[j] > key) j--;
if (i < j) a[i++] = a[j];
while (i < j && a[i] < key) i++;
if (i < j) a[j--] = a[i];
}
a[i] = key;
if (l < i - 1)
sort (a, l, i - 1);
if (i + 1 < h)
sort (a, i + 1, h);
}
核心觀念
本題考辨認排序法。程式先取子陣列第一個元素 a[l] 作為基準值 key,再從左右兩端交替掃描,把小於基準值的元素移至左側、大於基準值的元素移至右側;完成後再遞迴排序基準值左右兩個子陣列。這是快速排序(Quick sort)的分割與遞迴流程。
解題方法
以目前排序範圍 a[l..h] 為例:
key = a[l]:選取第一個元素作為基準值。j從右往左移動,略過大於key的元素。遇到不大於key的值時,將它放到左側空位。i從左往右移動,略過小於key的元素。遇到不小於key的值時,將它放到右側空位。- 左右指標相遇後,把
key放入相遇位置。此時基準值左側的元素不大於key,右側的元素不小於key。 - 分別對基準值左右兩側遞迴呼叫
sort。
例如,對 [5, 2, 8, 1, 6] 排序時,以 5 為基準值。右側的 1 先移到左側空位,接著左側的 8 移到右側空位;
第 20 題2 分
若以插入排序(Insertion sort)對數列 進行排序,下列何者是正確步驟?
核心觀念
插入排序(Insertion sort)會將數列分成「已排序區」與「未排序區」。每一趟取出未排序區的第一個元素,插入已排序區的正確位置;每趟結束後,已排序區增加一個元素。此題採由左至右排序。
解題方法
先將第一個元素視為已排序,再依序插入後續元素:
- 插入 到已排序的 中:,位置不變,得到 。
- 插入 到 中: 小於兩者,插入最前面,得到 。
- 插入 到 中: 大於 、小於 ,得到 。
- 插入 到 中: 大於 、小於 ,得到 。
完整步驟為:
第 21 題2 分
若宣告下列 維整數陣列:
int a[3][3] = {{1, 2}, {3, 4, 5}, {6}};
則下列哪個元素為 ?
核心觀念
本題考 C 語言二維陣列的初始化規則。int a[3][3] 是由 列、每列 個整數組成的陣列,共有 個元素。使用大括號逐列初始化時,未明確指定的元素會自動初始化為 。
解題方法
依大括號將初始值對應至各列;每列未填滿的位置補 :
因此,。
選項分析
第 22 題2 分
給定一個陣列 ,且欲搜尋的目標鍵值是 ,則使用二元搜尋法第一次尋找、第二次尋找分別比對哪個元素?
核心觀念
二元搜尋法適用於已排序的陣列。每次取目前搜尋範圍的中間元素與目標值比較:目標較大,就繼續搜尋右半部;目標較小,就搜尋左半部;相等時即找到。
解題方法
陣列共有 個元素,依序編號為第 至第 個。第一次取中間位置:
第 個元素是 。因為 ,下一次搜尋範圍縮小為右半部 。
這三個元素的中間位置是第 個,因此第二次比對 ,並找到目標鍵值。
選項分析
第 23 題2 分
Java 程式經編譯後,會先產生什麼格式的檔案?
核心觀念
Java 程式經編譯器(javac)編譯後,會產生 位元碼(Byte code),通常存成 .class 檔。位元碼不是直接對應特定硬體的機器碼,而是由 Java 虛擬機器(JVM)讀取並執行。
解題方法
掌握 Java 程式的執行流程即可判斷:
因此,題目問「經編譯後先產生」的檔案格式,答案是位元碼。
選項分析
第 24 題2 分
事先寫好的函式(function)經過編譯(compile)後,將目的檔(object file)集合起來存放於一個檔案供其他程式連結使用,這種檔案稱為:
核心觀念
本題考編譯與連結時所使用的函式庫(Library)。事先寫好的函式經過編譯後,會形成目的碼;若將多個目的檔集合成一個檔案,供其他程式在連結階段使用,這個檔案稱為函式庫。
解題方法
抓住題幹中的「編譯後的目的檔集合」以及「供其他程式連結使用」兩個線索即可判斷。這描述的是函式庫的用途:程式可呼叫其中已編譯完成的函式,由連結器將所需程式碼納入或建立連結。
選項分析
- (A) 系統呼叫(System Call):錯誤。系統呼叫是應用程式向作業系統核心請求服務的介面,不是目的檔集合。
- (B) 虛擬碼(Pseudo code):錯誤。
第 25 題2 分
如下所示之 C 程式,其輸出為何?
#include <stdio.h>
int data[] = { 6, 8, 4, 3, 11, 18, 17, 29, 25, 23, 27, 24, 22, 48, 43, 55, 68, 63, 62, 69, 65, 72, 77, 85, 88, 81, 99, 97, 92, 94, 91 };
int count[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int main(void) { int ii, nn = sizeof(data) / sizeof(data[0]);
for (ii = 0; ii < nn; ii++) {
count[data[ii] / 10]++;
}
for (ii = 0; ii < 10; ii += 2) {
printf("%2d,", count[ii]);
}
return 0;
}
核心觀念
本題考 C 語言的整數除法、陣列索引,以及迴圈如何選取元素。對非負整數而言,data[ii] / 10 會捨去小數部分,因此可依數值的十位數將元素分組:
0至9索引count[0]10至19索引count[1]- 依此類推
第二個迴圈的 ii += 2 讓 ii 依序為 ,所以只會輸出 count 中偶數索引的計數。
解題方法
先依各數值除以 的商分類,統計 count[0] 到 count[9]:
| 索引 | 數值範圍 | 個數 |
|---|---|---|
count[0] | 0–9 | 4 |
count[1] | 10–19 | 3 |
count[2] | 20–29 | 6 |
count[3] | 30–39 | 0 |
count[4] | 40–49 | 2 |
count[5] | 50–59 | 1 |
count[6] | 60–69 | 5 |
count[7] | 70–79 | 2 |
count[8] | 80–89 | 3 |
count[9] | 90–99 | 5 |
第 26 題2 分
執行下列 C 程式,並輸入「10 10 9」,下列何者為程式的輸出?
#include <stdio.h> #include <iostream>
int main() { int count = 0, x = 10, next;
scanf("%d", &next);
while (next == x) {
count++;
scanf("%d", &next);
}
printf("%d", count);
}
核心觀念
本題考查 while 迴圈的條件判斷,以及 scanf 讀取整數的順序。每次進入迴圈前,程式都會先檢查 next == x 是否成立;只有條件成立,才會執行迴圈本體。
解題方法
初始時 x = 10、count = 0。程式先讀入第一個數字,之後逐一比較輸入值與 :
| 讀入的值 | 條件 next == x | 執行結果 |
|---|---|---|
| 成立 | count 加 ,再讀入下一個值 | |
| 成立 | count 加 ,再讀入下一個值 | |
| 不成立 | 離開迴圈 |
第 27 題2 分
假設有一陣列 ,以主行順序(Column major order)儲存資料,若 位置為 , 位置為 ,則 位置為何?
核心觀念
本題考陣列以主行順序儲存時,元素位址如何隨索引變化。主行順序(Column major order)是先依序儲存同一欄的各列元素,再移至下一欄。因此,往下移一列是連續的下一個元素;往右移一欄則會跨過一整欄的列數。
解題方法
由 移到 :
- 列索引增加 ,位址增加 個元素。
- 欄索引增加 。每一欄有 列,因此位址增加 個元素。
已知兩位置的位址差為 ,所以:
因此每欄有 個元素。從 移到 ,列索引增加 ,欄索引增加 ,位址增加:
第 28 題2 分
下列哪個 C 語言的迴圈指令執行的次數,與其他不同?
核心觀念
本題考 C 語言 for 迴圈的執行順序,以及前置遞增 ++i、後置遞增 i++ 的差異。for (初始化; 條件; 更新) 的執行順序是:先初始化,再判斷條件;條件為真時執行迴圈本體,接著執行更新,再判斷條件。
前置遞增會先將變數加 ,再以新值參與條件判斷;後置遞增則先以原值參與條件判斷,再將變數加 。
解題方法
逐次追蹤條件判斷前的 i 值,並分清遞增發生在條件判斷前或後。迴圈本體執行次數,就是條件判斷結果為真的次數。
選項分析
-
(A)
for (i = 0; i < 10; i++) ...本體依序在 時執行,共 次。當 時,條件i < 10為假。 -
(B)
for (i = 0; i < 10; ++i) ...
第 29 題2 分
給定以下類別定義:
class A { private: static int cnt;
class B
{
private:
public:
};
B* p[5];
public: A() { cnt = 0; }
int f()
{
if (cnt < 5)
p[cnt++] = new B;
return cnt;
}
};
int A::cnt = -100;
若在 main() 中執行以下指令:
A var; var.f(); var.f(); cout << var.f();
則將產生的輸出為何?
核心觀念
本題考查 static 類別成員的共享特性、建構函式對靜態成員的初始化,以及 if 條件判斷與陣列索引。
cnt 宣告為 static,因此它屬於類別 A,由所有 A 物件共用。雖然類別外先將它定義為 -100,但建立 var 時,建構函式會將 cnt 設為 0,所以呼叫 f 時從 0 開始計算。
解題方法
依照程式執行順序追蹤 cnt:
| 執行動作 | 呼叫前 cnt | cnt < 5 | 執行後 cnt | f 回傳值 |
|---|---|---|---|---|
建立 A var | -100 | — | 0 | — |
第一次 var.f | 0 | 成立 | 1 | 1 |
第二次 var.f | 1 | 成立 | 2 | 2 |
第三次 var.f | 2 | 成立 | 3 | 3 |
第 30 題2 分
以下 C 語言中的結構變數定義:
struct A { union { struct { unsigned int i; } B;
struct {
unsigned short s1;
unsigned short s2;
} C;
struct {
unsigned char c1;
unsigned char c2;
unsigned char c3;
unsigned char c4;
} D;
};
};
struct A a; a.B.i = 0x01020304;
下列敘述何者正確?
核心觀念
本題考查 union 共用記憶體、整數的位元組排列,以及 printf 格式指定字串。union 的所有成員從相同的記憶體位置開始,因此對 a.B.i 寫入的位元組,也會由 a.C、a.D 的成員讀取。
題目沒有指定平台的位元組順序、型別大小與字元是否帶符號;以下依常見考試假設:unsigned int 為 4 位元組、unsigned short 為 2 位元組、unsigned char 為 1 位元組,且採用小端序(little-endian)。
解題方法
將 0x01020304 拆成由高位元組到低位元組:
小端序會把最低有效位元組放在最低位址,因此記憶體由低位址到高位址排列為:
各成員都從相同起始位址讀取:
第 31 題2 分
關於 C++ 類別的建構函式(constructor),下列敘述何者錯誤?
核心觀念
C++ 建構函式(constructor)負責在物件建立時初始化物件。其名稱與類別名稱相同,且沒有回傳型別;即使不回傳任何值,也不能宣告為 void。建構函式可以多載,也可以在參數中設定預設引數。
若類別沒有宣告任何建構函式,編譯器通常會隱含宣告預設建構函式;但在特定情況下,例如類別已有其他建構函式,便不會自動提供無參數的預設建構函式。
解題方法
逐一核對各敘述是否符合建構函式的語法與功能。判斷關鍵在於:建構函式雖然會在物件建立時執行,但它不是以回傳值來提供初始化結果,因此不能有回傳型別,也不能回傳常數值。
選項分析
第 32 題2 分
檢查判斷網路通不通,下列何者是最常用的指令?
核心觀念
本題考查用來檢查網路連線是否可達的常用指令。ping 會向指定的主機送出測試封包,並依回應判斷目標是否可達及回應時間。
解題方法
辨認題目中的「檢查網路通不通」,即可聯想到 ping 指令。使用者指定主機名稱或 IP 位址後,ping 會送出 ICMP Echo Request;若目標主機及網路路徑允許回應,便會收到 ICMP Echo Reply,並顯示往返時間等資訊。
選項分析
第 33 題2 分
有關 OSI 模型網路七層架構,下列敘述何者錯誤?
核心觀念
本題評量對 OSI 七層協定模型(Open Systems Interconnection Model) 各層職責與代表性功能的理解:
- 傳輸層(Transport Layer,第四層):負責行程到行程(Process-to-Process)之端對端(End-to-End)傳輸,提供可靠度維護、多工/解多工,以及代表性的**流量控制(Flow Control)**與壅塞控制(Congestion Control),代表協定為 TCP、UDP。
- 網路層(Network Layer,第三層):負責主機到主機(Host-to-Host)的邏輯定址(Logical Addressing)、路由選擇(Routing),以及當封包大小超過底層最大傳輸單元(MTU)時的切割(Fragmentation)與組裝(Defragmentation / Reassembly)。
- 資料連結層(Data Link Layer,第二層):負責相鄰節點間(Hop-to-Hop / Node-to-Node)的訊框封裝(Framing)、實體位址尋址(MAC Addressing)與錯誤偵測(Error Detection)。
解題方法
本題切入點在於判斷題目所列之功能、協定與 OSI 模型的層級對應是否正確:
- 比對選項 (A)、(B)、(D),均為網路層與傳輸層無爭議的經典代表功能與協定。
- 在國家考試《計算機概要》的命題邏輯中,流量控制(Flow Control)多被視為傳輸層(特別是 TCP 協定的滑動視窗機制)最核心的代表性服務;命題者依此將資料連結層歸類為不具備該主要特徵之層級,判定 (C) 為錯誤選項。
選項分析
- (A) 正確:TCP(Transmission Control Protocol)與 UDP(User Datagram Protocol)是網際網路中最核心的傳輸層協定,負責在終端主機應用程式間建立通訊服務。
第 34 題2 分
下列何者不是 TCP 協定的特性?
核心觀念
TCP(傳輸控制協定)是傳輸層的連接導向、可靠傳輸協定。它透過序號、確認回應(ACK)與逾時重傳等機制,協助接收端依序取得資料,並處理傳輸中的遺失;另以流量控制避免發送端送得太快,也會配合壅塞控制調整傳送速率。
TCP 的 ACK、重傳與控制機制,和「向發送端回報錯誤訊息」不同。一般網路層錯誤回報由 ICMP 等協定負責;TCP 的接收端則主要以 ACK 回應已接收的資料。
解題方法
先判斷四個選項是否屬於 TCP 的傳輸可靠性或傳送速率調節機制,再辨別錯誤回報的協定角色。壅塞控制、流量控制與遺失重送都是 TCP 的功能;「向發送端回報錯誤訊息」不是 TCP 特性的典型描述。
選項分析
第 35 題2 分
有關傳輸層安全性協定(Transport Layer Security, TLS),不提供下列哪一種保護?
核心觀念
TLS(傳輸層安全性協定)用來保護網路連線,主要提供保密性、完整性與身分認證:
- 保密性:以加密方式避免傳輸內容被未授權者讀取。
- 完整性:使用訊息驗證機制,偵測傳輸內容是否遭到竄改。
- 身分認證:通常透過伺服器憑證確認伺服器身分;也可設定用戶端憑證,認證用戶端身分。
解題方法
逐項比對選項與 TLS 的安全服務。題目問「不提供」哪一種保護;TLS 的標準功能包含保密性、完整性與身分認證,但不保證匿名性。因此選出匿名性即可。
選項分析
第 36 題2 分
關於一次性密碼本(One-Time Pad, OTP)加密演算法,下列何者正確?
核心觀念
一次性密碼本(One-Time Pad, OTP)以隨機金鑰對明文逐位元(或逐字元)進行運算。以位元表示時,加密與解密都使用 XOR:
OTP 要達到理論上的完全保密,金鑰必須真正隨機、至少與明文等長,且每把金鑰只能使用一次,並須安全保管與傳送。
解題方法
逐項比對選項與 OTP 的必要條件:檢查金鑰長度、是否重複使用、是否真正隨機,以及加密和解密是否使用同一把金鑰。符合 OTP 定義的敘述即為正確選項。
選項分析
第 37 題2 分
揭露一個組織(無論是私有的還是公共的)內部非法的、不誠實的或者不正當行為的人,稱為:
核心觀念
本題考「吹哨者」(whistleblower)的定義:組織成員揭露其組織內部的非法、不誠實或其他不正當行為。題幹描述的是揭露行為的人,而不是保護這類人的制度或條款。
解題方法
抓住題幹的關鍵字「揭露……行為的人」。問的是「人」的稱呼,因此應選「吹哨者」;若問的是保護揭露者的法律或制度,才會是「吹哨者保護條款」。
選項分析
第 38 題2 分
網路封包在傳送的過程中,由較高層往較低層傳送時,會加上標頭(Header),這動作稱為:
核心觀念
這題考 OSI/TCP/IP 分層傳輸中的封裝(encapsulation)與解封裝(decapsulation)。資料由較高層往較低層傳送時,各層會在資料前加上該層的控制資訊,稱為標頭(Header);這個過程就是封裝。
解題方法
抓住題幹的方向:由較高層往較低層,且描述「加上標頭」,符合封裝的定義。
例如,應用層資料往下傳送時,傳輸層加入標頭形成區段,網路層再加入標頭形成封包,鏈結層再加入標頭(及尾端資訊)形成訊框。接收端則由較低層往較高層逐層移除各層資訊,稱為解封裝。
選項分析
第 39 題2 分
下列 C 程式以指標處理陣列,執行後會產生何種輸出?
int a[] = {1, 2, 3, 4}, n = sizeof(a) / sizeof(int), *p = a, *q = &a[n - 1], temp;
while (p < q) { temp = *p; *p++ = *q; *q-- = temp; }
printf("%d %d %d %d", a[0], a[1], a[2], a[3]);
核心觀念
本題考 C 語言的陣列與指標操作,以及後置遞增、後置遞減運算子。p 指向陣列第一個元素,q 指向最後一個元素;迴圈每次交換兩端元素,再讓 p 往右、q 往左,因此會將陣列反轉。
解題方法
初始陣列為 {1, 2, 3, 4},p 指向 a[0],q 指向 a[3]。條件 p < q 表示兩個指標尚未相遇或交錯時,繼續交換。
| 迴圈次數 | 交換位置 | 交換後陣列 |
|---|---|---|
| 第 1 次 | a[0] 與 a[3] | {4, 2, 3, 1} |
| 第 2 次 | a[1] 與 a[2] | {4, 3, 2, 1} |
第 40 題2 分
下列何者為合法的 Media Access Control(MAC)位址?
核心觀念
MAC 位址(Media Access Control address)是資料鏈結層用來識別網路介面的一種位址。常見的 48 位元 MAC 位址由 6 個位元組組成,每個位元組以兩個十六進位數字表示,位元組之間以冒號分隔,例如 01:23:45:67:89:AB。
十六進位數字可使用 0–9 及 A–F,每個位元組需恰有兩個十六進位數字。因此,判斷格式是否合法,須檢查位元組數、每組長度及字元範圍。
解題方法
逐一檢查各選項是否符合以下條件:
- 恰有 6 組位元組。
- 每組恰有 2 個十六進位數字。
- 各組以冒號分隔。
選項分析