112 高普考普通考試 電信工程 計算機概要 考古題詳解

112 年・高普考・普通考試・電信工程
試題代碼 計算機概要

第 1 題2 分

在設計管線式(pipeline)處理器時,需搭配各式軟硬體的設計機制,以減少管線因 data hazard 損失的運算效能。下列優化運算效能的技術,何者不能於編譯器(compiler)上實施?

這一題的完整詳解

核心觀念

本題考查計算機組織與結構中管線處理器(Pipelined Processor)之資料冒險(Data Hazard)處理機制,以及硬體控制與軟體(編譯器)最佳化之分工:

  1. 資料冒險類型:包括 RAW(Read-After-Write,真相依)、WAR(Write-After-Read,反相依)與 WAW(Write-After-Write,輸出相依)。
  2. 解決層次劃分:
  • 純硬體機制(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)。

🔒

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

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

免費註冊

第 2 題2 分

將時間切割成很多小片段,讓 CPU 不停地在許多程序(Process)之間切換執行,每位使用者以為自己的程序一直持續在執行,這種作業系統稱為:

這一題的完整詳解

核心觀念

本題考「分時系統(Time-sharing system)」的運作方式:作業系統把 CPU 時間分成許多短時間片(time slice),輪流分配給多個程序執行。時間片很短,且作業系統會快速切換程序,因此使用者感覺自己的程序持續占用 CPU。

解題方法

抓住題幹的兩個關鍵線索:「時間切割成很多小片段」和「使用者以為自己的程序一直持續在執行」。這描述的是分時系統以時間片輪流服務多位使用者或多個程序,帶來互動式、近似同時執行的使用感受。

選項分析

  • (A) 多元(Multi-programming)系統:錯誤。 多元程式設計是讓多個程序同時留在記憶體中;當某程序等待輸入/輸出時,作業系統切換到其他程序,以提高 CPU 使用率。題幹強調的是按短時間片輪流分配 CPU,屬於分時系統的特徵。
🔒

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

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

免費註冊

第 3 題2 分

在記憶體階層架構裡,下列敘述何者錯誤?

這一題的完整詳解

核心觀念

本題考記憶體階層的種類與用途。記憶體通常依存取速度、容量及成本排列:CPU 暫存器最快,其次是快取記憶體、主記憶體,之後是輔助記憶體。越靠近 CPU 的記憶體通常速度越快、容量越小。

解題方法

逐一確認各選項描述的記憶體種類與階層位置。主記憶體一般由 RAM 構成,硬碟屬於輔助記憶體;提升 CPU 與主記憶體之間存取效能的典型高速記憶體則是快取記憶體(Cache)。快閃記憶體主要用於 SSD、USB 隨身碟等儲存裝置,並非標準記憶體階層中置於 CPU 與主記憶體之間的快取。

選項分析

🔒

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

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

免費註冊

第 4 題2 分

音樂 CD 的取樣頻率是 44.1 kHz44.1\ \mathrm{kHz},取樣位元是 1616 位元,一段雙聲道 1010 秒鐘的音樂,在無壓縮的情形下,需要多少位元組(Byte)來儲存?

這一題的完整詳解

核心觀念

數位音訊的未壓縮資料量,取決於取樣頻率、每次取樣的位元數、聲道數與錄音時間。計算時先求總位元數,再以 88 位元 =1=1 Byte 換算為位元組。

解題方法

每秒每個聲道取樣 44,10044{,}100 次,每次取樣使用 1616 位元;雙聲道有 22 個聲道,錄音時間為 1010 秒。因此:

44,100 次秒⋅聲道×16 位元次×2 聲道×10 秒=141,120,000 位元44{,}100\ \frac{\text{次}}{\text{秒}\cdot\text{聲道}} \times 16\ \frac{\text{位元}}{\text{次}} \times 2\ \text{聲道} \times 10\ \text{秒} =141{,}120{,}000\ \text{位元}

換算為位元組:

141,120,000÷8=17,640,000 Byte141{,}120{,}000 \div 8 =17{,}640{,}000\ \text{Byte}

選項分析

🔒

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

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

免費註冊

第 5 題2 分

將二進位數字 (1011 0110)2(1011\ 0110)_2 換算為四進位數字,下列何者正確?

這一題的完整詳解

核心觀念

二進位與四進位的基底互為平方關係,因為 4=224=2^2。因此,每 22 個二進位位元可以直接換成 11 個四進位數字:

002=04,012=14,102=24,112=3400_2=0_4,\quad 01_2=1_4,\quad 10_2=2_4,\quad 11_2=3_4

解題方法

由小數點向左,每兩個二進位位元分成一組。題目中的二進位數為 1011 01101011\ 0110,分組後為:

1011011010\quad 11\quad 01\quad 10

逐組換算:

102=24,112=34,012=14,102=2410_2=2_4,\quad 11_2=3_4,\quad 01_2=1_4,\quad 10_2=2_4

依原位序排列,得到:

(1011 0110)2=(2312)4(1011\ 0110)_2=(2312)_4
🔒

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

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

免費註冊

第 6 題2 分

關於 process 與 thread 的敘述,下列何者錯誤?

這一題的完整詳解

核心觀念

本題考 process(行程/程序)與 thread(執行緒) 的記憶體與資料共享方式。

  • Process 是程式執行時的資源與記憶體管理單位。不同 process 通常各有獨立的位址空間。
  • Thread 是 CPU 排程與執行的基本單位。同一 process 內的 threads 共享該 process 的程式碼、全域變數與堆積等資源,但各自有自己的堆疊與暫存器狀態。
  • 多核心系統可透過多個 threads 或多個 processes 執行平行工作;能否平行執行,取決於工作安排及系統支援。

解題方法

判斷關鍵在於 global variable 的共享範圍:同一 process 內的 threads 共享位址空間,因此能存取同一個全域變數;不同 processes 則各有獨立位址空間,不能直接以同名全域變數交換資料。跨 process 溝通須使用作業系統提供的行程間通訊(IPC),例如共享記憶體、管線或訊息佇列。

選項分析

🔒

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

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

免費註冊

第 7 題2 分

對 1011011010110110 和 1010011110100111 按位元(bit-wise)進行 AND 的運算,結果為下列何者?

這一題的完整詳解

核心觀念

位元 AND(bit-wise AND)是逐位比較兩個二進位數字:只有兩個位元都為 11,結果才是 11;其餘情況皆為 00。

1∧1=1,1∧0=0,0∧1=0,0∧0=01\land1=1,\qquad 1\land0=0,\qquad 0\land1=0,\qquad 0\land0=0

解題方法

將兩數由右至左對齊,逐位套用 AND 規則:

10110110∧1010011110100110\begin{array}{cccccccc} 1&0&1&1&0&1&1&0\\ \land&1&0&1&0&0&1&1&1\\ \hline 1&0&1&0&0&1&1&0 \end{array}

因此,

🔒

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

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

免費註冊

第 8 題2 分

下列哪一種作業系統排程演算法,理論上能得到最短的平均等待時間?

這一題的完整詳解

核心觀念

本題考查作業系統的 CPU 排程。平均等待時間是所有行程在就緒佇列中等待 CPU 的時間總和,除以行程數。若各行程皆已就緒,且已知其 CPU 執行時間,最短工作先做(SJF)會優先執行所需 CPU 時間較短的行程,理論上可使平均等待時間最短。

解題方法

將行程依 CPU 執行時間由短至長排序,先完成短工作,可避免短工作長時間排在長工作後面。若行程執行時間為 t1≤t2≤⋯≤tnt_1 \le t_2 \le \cdots \le t_n,依此順序排程時,第 ii 個行程的等待時間為前面行程執行時間之和:

Wi=∑j=1i−1tjW_i=\sum_{j=1}^{i-1}t_j

平均等待時間為:

W‾=1n∑i=1nWi\overline{W}=\frac{1}{n}\sum_{i=1}^{n}W_i

此順序讓較短的執行時間較少被計入其他行程的等待時間,因此能使平均等待時間達到最小。題目問「理論上」的最佳演算法,答案即為 SJF。

🔒

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

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

免費註冊

第 9 題2 分

某計算機系統具有 3232 bits 位址的記憶體定址空間,並包含一個 direct mapped 快取記憶體(cache)。該快取記憶體每個 cache block 為 88 bytes,且必須儲存 1717 bits 的位址做為 tag。該快取記憶體的大小為何?

這一題的完整詳解

核心觀念

直接對映快取(direct-mapped cache)的 32 位元位址會分成三部分:

Tag 位元數+Index 位元數+Block offset 位元數=32\text{Tag 位元數}+\text{Index 位元數}+\text{Block offset 位元數}=32

其中,block offset 用來指定區塊內的位元組位置;index 用來選出快取中的區塊;tag 用來辨認該區塊對應的主記憶體位址。

解題方法

每個 cache block 為 88 bytes,因此區塊內位移需要:

log⁡28=3 bits\log_2 8=3\text{ bits}

題目指定 tag 為 1717 bits,所以 index 位元數為:

32−17−3=12 bits32-17-3=12\text{ bits}

直接對映快取共有 2122^{12} 個 cache block。每個 block 為 88 bytes,故快取資料區大小為:

212×8=212×23=215 bytes=32 KByte2^{12}\times 8 =2^{12}\times 2^3 =2^{15}\text{ bytes} =32\text{ KByte}
🔒

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

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

免費註冊

第 10 題2 分

將八進位數值 (625)8(625)_8 換算為十六進位,下列何者正確?

這一題的完整詳解

核心觀念

不同進位制的數值可先換算成十進位,再轉成目標進位制。八進位每一位的位值依序為 80、81、828^0、8^1、8^2;十六進位則以 00 至 99 和 AA 至 FF 表示,其中 A=10A=10。

解題方法

先將 (625)8(625)_8 展開為十進位:

(625)8=6×82+2×81+5×80=384+16+5=405(625)_8=6\times 8^2+2\times 8^1+5\times 8^0 =384+16+5=405

再將 405405 連續除以 1616,由下往上讀取餘數:

405=25×16+5405=25\times16+5 25=1×16+925=1\times16+9 1=0×16+11=0\times16+1

因此十六進位各位數由高位至低位為 1、9、51、9、5,故:

(625)8=(195)16(625)_8=(195)_{16}

選項分析

🔒

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

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

免費註冊

第 11 題2 分

程式執行的流程有時必須根據指令執行的結果而改變,在處理器管線(Pipelining)架構中,這種情形將會引發何種危障(Hazard)?

這一題的完整詳解

核心觀念

處理器管線將指令拆成多個階段,讓不同指令能同時在不同階段執行。當管線中的指令無法依原定時序順利執行時,稱為管線危障(Pipeline Hazard)。

若下一步要執行哪一條指令,必須依目前指令的結果才能決定,例如條件分支指令須等比較或判斷結果出來,處理器才知道要沿原路徑繼續執行,還是跳到分支目標。這會使管線無法立即確定後續應載入的指令,形成控制危障(Control Hazard),也稱分支危障(Branch Hazard)。

解題方法

題幹的關鍵是「根據指令執行的結果而改變程式執行流程」。這描述的是分支或跳躍造成的控制流程變化,因此辨認為控制危障。若分支結果尚未確定,處理器可能需要暫停管線、清除已載入的錯誤路徑指令,或透過分支預測降低等待影響。

選項分析

🔒

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

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

免費註冊

第 12 題2 分

網路傳輸媒介中,下列何者最不受電磁波干擾?

這一題的完整詳解

核心觀念

本題考查網路傳輸媒介對電磁波干擾的敏感程度。雙絞線與同軸電纜以金屬導體傳送電訊號,無線傳輸則直接利用電磁波傳遞資料;光纖傳送的是光訊號,不依賴電流在金屬導體中流動,因此最不受外部電磁波干擾。

解題方法

比較各媒介的傳輸訊號是否容易受到外界電磁場影響:

  • 金屬線路以電訊號傳輸,可能受到外部電磁干擾。
  • 無線傳輸本身使用電磁波,容易受其他無線訊號或電磁雜訊影響。
  • 光纖以光訊號傳輸,且纖芯為非導電材料,外部電磁場不易干擾光訊號。

因此,最不受電磁波干擾的是光纖。

選項分析

🔒

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

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

免費註冊

第 13 題2 分

已知某二元樹為不同數字之最大堆積(Max-heap),下列敘述何者正確?

這一題的完整詳解

核心觀念

最大堆積(Max-heap)是符合下列條件的完全二元樹:

  1. 堆積順序性:每個父節點的值都大於其子節點的值。題目給定數字互不相同,因此父節點值嚴格大於子節點值。
  2. 完全二元樹結構:除最後一層外,其餘各層都填滿;最後一層的節點由左向右排列。

堆積順序性只比較具有直屬關係的父子節點,並不規定所有節點的整體大小排列。

解題方法

沿著任一條從樹根到樹葉的路徑,每往下一層都是從父節點走到子節點。依最大堆積的定義,父節點值必定大於子節點值,所以路徑上的數值會由上而下遞減。

陣列表示法則是依二元樹的層序,由上而下、由左而右存放節點。這種存放次序不代表陣列元素整體遞增或遞減。

選項分析

(A) 錯誤。 陣列依層序存放,不保證整體遞減。例如最大堆積可為根節點 99,其左、右子節點分別為 77、88,陣列表示為 [9,7,8][9,7,8],最後一項 88 大於前一項 77。

🔒

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

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

免費註冊

第 14 題2 分

在程式執行中,為有效地利用記憶體空間,當需要記憶體空間來存放資料時,才向系統索取所需的記憶體空間。要達到此目的,下列何種資料結構設計最合適?

這一題的完整詳解

核心觀念

本題考資料結構的記憶體配置方式。若程式在執行期間需要資料時,才向系統索取所需空間,適合採用動態記憶體配置。鏈結串列的節點可在需要時逐一配置,並以指標連接,因此不必事先配置一整段固定大小的連續空間。

解題方法

題幹的關鍵是「需要記憶體空間來存放資料時,才向系統索取」。判斷重點在於資料結構能否按需求配置節點,而非其資料存取或進出順序。

鏈結串列由節點組成,每個節點存放資料及連結資訊。新增資料時,可配置新節點並接到串列中;刪除資料時,則可釋放相應節點。這種按需配置的特性,符合題意。

選項分析

🔒

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

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

免費註冊

第 15 題2 分

【題組共用題幹】

假設有堆疊 S1S_1、S2S_2 與佇列 Q1Q_1、Q2Q_2、Q3Q_3,以下圖方式連結,且 Q1Q_1 有三個資料 A、B、C(A 在佇列前端),其餘堆疊與佇列皆為空。

今有四個指令如下:

  1. 若 Q1Q_1 非空,從 Q1Q_1 刪除一個資料並 push 到 S1S_1 中。
  2. 若 S1S_1 非空,從 S1S_1 pop 出一個資料並加入到 Q2Q_2 中。
  3. 若 Q2Q_2 非空,從 Q2Q_2 刪除一個資料並 push 到 S2S_2 中。
  4. 若 S2S_2 非空,從 S2S_2 pop 出一個資料並加入到 Q3Q_3 中。

我們可用任何順序執行這四個指令,直到所有資料皆存入 Q3Q_3。下列敘述何者正確?

🖼️ 本題原卷含圖表。基於試題來源之版權考量,本站不轉載原卷影像; 題目文字已完整轉錄,圖表請自行參閱考選部公告之試題原檔。
這一題的完整詳解

核心觀念

本題考查:

  • 佇列(Queue):先進先出(FIFO)。
  • 堆疊(Stack):後進先出(LIFO)。
  • 透過兩個「佇列—堆疊」轉換階段,判斷資料排列是否能達成。

Q1Q_1 的輸入順序固定為 A、B、CA、B、C,但可藉由等待、交錯執行指令,使資料進入 Q2Q_2 時產生不同排列;再經由 S2S_2 調整順序後進入 Q3Q_3。

解題方法

以指令編號表示操作:

  1. Q1→S1Q_1 \to S_1
  2. S1→Q2S_1 \to Q_2
  3. Q2→S2Q_2 \to S_2
  4. S2→Q3S_2 \to Q_3

只要能列出每一種 Q3Q_3 輸出排列的合法操作順序,即可證明該排列可以達成。

下表中,「第一階段結果」表示資料進入 Q2Q_2 的順序;「第二階段」表示由 Q2Q_2 經 S2S_2 輸出至 Q3Q_3 的指令順序。

Q3Q_3 順序第一階段結果第一階段指令第二階段指令
A、B、CA、B、CA、B、CA、B、C121212121212343434343434
A、C、BA、C、BA、B、CA、B、C121212121212343344343344
B、A、CB、A、CA、B、CA、B、C121212121212334434334434
B、C、AB、C、AA、B、CA、B、C121212121212334344334344
🔒

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

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

免費註冊

第 16 題2 分

假設有一棵完滿二元樹(Full binary tree)含有 nn 個內部節點(Internal nodes),則該棵二元樹的總節點數是多少個?

這一題的完整詳解

核心觀念

完滿二元樹(Full binary tree)的每個內部節點都恰有兩個子節點。設內部節點數為 nn,葉節點數為 LL,則總節點數為:

n+Ln+L

解題方法

每個內部節點各有兩條通往子節點的邊,因此全樹的邊數為 2n2n。另一方面,任何含有 NN 個節點的樹,其邊數皆為 N−1N-1。令總節點數為 NN,可得:

2n=N−12n=N-1

因此:

N=2n+1N=2n+1

所以總節點數為 2n+12n+1。

選項分析

  • (A) n+1n+1:錯誤。 這是把內部節點數與葉節點數的關係混淆了;完滿二元樹的葉節點數是 n+1n+1,總節點數還要再加上 nn 個內部節點。
🔒

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

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

免費註冊

第 17 題2 分

傳統的電腦系統架構中,CPU 通常到哪裡取得指令來執行?

這一題的完整詳解

核心觀念

這題考查傳統電腦系統的「取指」流程。CPU 透過程式計數器(Program Counter, PC)記錄下一個要執行的指令位址,再依該位址到主記憶體讀取指令,送入 CPU 解碼並執行。

解題方法

判斷「CPU 到哪裡取得指令」時,要區分記錄指令位址的暫存器與實際存放程式指令的記憶體:

  1. PC 保存下一個指令的位址。
  2. CPU 依 PC 所指的位址,向主記憶體讀取指令。
  3. 指令讀入 CPU 後,再進行解碼與執行。

因此,指令的來源是主記憶體;PC 只是提供存取位置。

選項分析

🔒

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

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

免費註冊

第 18 題2 分

若要將 22 個各自由小到大排序好的數列(長度分別為 55 和 66)進行合併排序(Merge sort),使得合併後的數列也能由小到大排列,則合併過程最多需要進行幾次數字比較?

這一題的完整詳解

核心觀念

合併排序(Merge sort)的合併步驟,是比較兩個已排序數列目前尚未處理的最前端數字,將較小者放入結果數列,再繼續比較。當其中一個數列用完時,另一個數列剩餘的數字已經排好序,可直接接到結果末端,不必再比較。

解題方法

兩個數列長度分別為 55 和 66。要讓比較次數最多,必須讓兩個數列的數字交錯出現,使每次比較都只取出一個數列的數字,直到其中一個數列只剩最後一個數字。

因此最多比較次數為:

5+6−1=105+6-1=10

比較到第 1010 次後,其中一個數列已經用完;另一數列剩下的數字直接接上即可,不需要第 1111 次比較。

選項分析

🔒

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

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

免費註冊

第 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] 為例:

  1. key = a[l]:選取第一個元素作為基準值。
  2. j 從右往左移動,略過大於 key 的元素。遇到不大於 key 的值時,將它放到左側空位。
  3. i 從左往右移動,略過小於 key 的元素。遇到不小於 key 的值時,將它放到右側空位。
  4. 左右指標相遇後,把 key 放入相遇位置。此時基準值左側的元素不大於 key,右側的元素不小於 key。
  5. 分別對基準值左右兩側遞迴呼叫 sort。

例如,對 [5, 2, 8, 1, 6] 排序時,以 5 為基準值。右側的 1 先移到左側空位,接著左側的 8 移到右側空位;

🔒

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

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

免費註冊

第 20 題2 分

若以插入排序(Insertion sort)對數列 (7,10,2,5,4)(7, 10, 2, 5, 4) 進行排序,下列何者是正確步驟?

這一題的完整詳解

核心觀念

插入排序(Insertion sort)會將數列分成「已排序區」與「未排序區」。每一趟取出未排序區的第一個元素,插入已排序區的正確位置;每趟結束後,已排序區增加一個元素。此題採由左至右排序。

解題方法

先將第一個元素視為已排序,再依序插入後續元素:

  1. 插入 1010 到已排序的 (7)(7) 中:10>710>7,位置不變,得到 (7,10,2,5,4)(7,10,2,5,4)。
  2. 插入 22 到 (7,10)(7,10) 中:22 小於兩者,插入最前面,得到 (2,7,10,5,4)(2,7,10,5,4)。
  3. 插入 55 到 (2,7,10)(2,7,10) 中:55 大於 22、小於 77,得到 (2,5,7,10,4)(2,5,7,10,4)。
  4. 插入 44 到 (2,5,7,10)(2,5,7,10) 中:44 大於 22、小於 55,得到 (2,4,5,7,10)(2,4,5,7,10)。

完整步驟為:

🔒

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

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

免費註冊

第 21 題2 分

若宣告下列 22 維整數陣列:

int a[3][3] = {{1, 2}, {3, 4, 5}, {6}};

則下列哪個元素為 00?

這一題的完整詳解

核心觀念

本題考 C 語言二維陣列的初始化規則。int a[3][3] 是由 33 列、每列 33 個整數組成的陣列,共有 99 個元素。使用大括號逐列初始化時,未明確指定的元素會自動初始化為 00。

解題方法

依大括號將初始值對應至各列;每列未填滿的位置補 00:

a[0]={1,2,0}a[1]={3,4,5}a[2]={6,0,0}\begin{aligned} a[0] &= \{1, 2, 0\}\\ a[1] &= \{3, 4, 5\}\\ a[2] &= \{6, 0, 0\} \end{aligned}

因此,a[2][1]=0a[2][1]=0。

選項分析

🔒

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

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

免費註冊

第 22 題2 分

給定一個陣列 arr={45,66,78,89,91,95,120}arr=\{45, 66, 78, 89, 91, 95, 120\},且欲搜尋的目標鍵值是 key=95key=95,則使用二元搜尋法第一次尋找、第二次尋找分別比對哪個元素?

這一題的完整詳解

核心觀念

二元搜尋法適用於已排序的陣列。每次取目前搜尋範圍的中間元素與目標值比較:目標較大,就繼續搜尋右半部;目標較小,就搜尋左半部;相等時即找到。

解題方法

陣列共有 77 個元素,依序編號為第 11 至第 77 個。第一次取中間位置:

1+72=4\frac{1+7}{2}=4

第 44 個元素是 8989。因為 95>8995>89,下一次搜尋範圍縮小為右半部 {91,95,120}\{91,95,120\}。

這三個元素的中間位置是第 66 個,因此第二次比對 9595,並找到目標鍵值。

選項分析

🔒

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

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

免費註冊

第 23 題2 分

Java 程式經編譯後,會先產生什麼格式的檔案?

這一題的完整詳解

核心觀念

Java 程式經編譯器(javac)編譯後,會產生 位元碼(Byte code),通常存成 .class 檔。位元碼不是直接對應特定硬體的機器碼,而是由 Java 虛擬機器(JVM)讀取並執行。

解題方法

掌握 Java 程式的執行流程即可判斷:

Java 原始碼(.java)→編譯器位元碼(.class)→JVM執行\text{Java 原始碼(.java)} \xrightarrow{\text{編譯器}} \text{位元碼(.class)} \xrightarrow{\text{JVM}} \text{執行}

因此,題目問「經編譯後先產生」的檔案格式,答案是位元碼。

選項分析

🔒

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

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

免費註冊

第 24 題2 分

事先寫好的函式(function)經過編譯(compile)後,將目的檔(object file)集合起來存放於一個檔案供其他程式連結使用,這種檔案稱為:

這一題的完整詳解

核心觀念

本題考編譯與連結時所使用的函式庫(Library)。事先寫好的函式經過編譯後,會形成目的碼;若將多個目的檔集合成一個檔案,供其他程式在連結階段使用,這個檔案稱為函式庫。

解題方法

抓住題幹中的「編譯後的目的檔集合」以及「供其他程式連結使用」兩個線索即可判斷。這描述的是函式庫的用途:程式可呼叫其中已編譯完成的函式,由連結器將所需程式碼納入或建立連結。

選項分析

  • (A) 系統呼叫(System Call):錯誤。系統呼叫是應用程式向作業系統核心請求服務的介面,不是目的檔集合。
  • (B) 虛擬碼(Pseudo code):錯誤。
🔒

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

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

免費註冊

第 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 依序為 0,2,4,6,80, 2, 4, 6, 8,所以只會輸出 count 中偶數索引的計數。

解題方法

先依各數值除以 1010 的商分類,統計 count[0] 到 count[9]:

索引數值範圍個數
count[0]0–94
count[1]10–193
count[2]20–296
count[3]30–390
count[4]40–492
count[5]50–591
count[6]60–695
count[7]70–792
count[8]80–893
count[9]90–995
🔒

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

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

免費註冊

第 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。程式先讀入第一個數字,之後逐一比較輸入值與 1010:

讀入的值條件 next == x執行結果
1010成立count 加 11,再讀入下一個值
1010成立count 加 11,再讀入下一個值
99不成立離開迴圈
🔒

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

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

免費註冊

第 27 題2 分

假設有一陣列 AA,以主行順序(Column major order)儲存資料,若 A[5,1]A[5,1] 位置為 12341234,A[7,5]A[7,5] 位置為 12601260,則 A[6,4]A[6,4] 位置為何?

這一題的完整詳解

核心觀念

本題考陣列以主行順序儲存時,元素位址如何隨索引變化。主行順序(Column major order)是先依序儲存同一欄的各列元素,再移至下一欄。因此,往下移一列是連續的下一個元素;往右移一欄則會跨過一整欄的列數。

解題方法

由 A[5,1]A[5,1] 移到 A[7,5]A[7,5]:

  • 列索引增加 7−5=27-5=2,位址增加 22 個元素。
  • 欄索引增加 5−1=45-1=4。每一欄有 mm 列,因此位址增加 4m4m 個元素。

已知兩位置的位址差為 1260−1234=261260-1234=26,所以:

2+4m=262+4m=26 m=6m=6

因此每欄有 66 個元素。從 A[5,1]A[5,1] 移到 A[6,4]A[6,4],列索引增加 11,欄索引增加 33,位址增加:

1+3×6=191+3\times 6=19
🔒

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

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

免費註冊

第 28 題2 分

下列哪個 C 語言的迴圈指令執行的次數,與其他不同?

這一題的完整詳解

核心觀念

本題考 C 語言 for 迴圈的執行順序,以及前置遞增 ++i、後置遞增 i++ 的差異。for (初始化; 條件; 更新) 的執行順序是:先初始化,再判斷條件;條件為真時執行迴圈本體,接著執行更新,再判斷條件。

前置遞增會先將變數加 11,再以新值參與條件判斷;後置遞增則先以原值參與條件判斷,再將變數加 11。

解題方法

逐次追蹤條件判斷前的 i 值,並分清遞增發生在條件判斷前或後。迴圈本體執行次數,就是條件判斷結果為真的次數。

選項分析

  • (A) for (i = 0; i < 10; i++) ... 本體依序在 i=0,1,…,9i=0,1,\ldots,9 時執行,共 1010 次。當 i=10i=10 時,條件 i < 10 為假。

  • (B) for (i = 0; i < 10; ++i) ...

🔒

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

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

免費註冊

第 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:

執行動作呼叫前 cntcnt < 5執行後 cntf 回傳值
建立 A var-100—0—
第一次 var.f0成立11
第二次 var.f1成立22
第三次 var.f2成立33
🔒

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

免費註冊,享 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 拆成由高位元組到低位元組:

0102030401\quad 02\quad 03\quad 04

小端序會把最低有效位元組放在最低位址,因此記憶體由低位址到高位址排列為:

0403020104\quad 03\quad 02\quad 01

各成員都從相同起始位址讀取:

🔒

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

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

免費註冊

第 31 題2 分

關於 C++ 類別的建構函式(constructor),下列敘述何者錯誤?

這一題的完整詳解

核心觀念

C++ 建構函式(constructor)負責在物件建立時初始化物件。其名稱與類別名稱相同,且沒有回傳型別;即使不回傳任何值,也不能宣告為 void。建構函式可以多載,也可以在參數中設定預設引數。

若類別沒有宣告任何建構函式,編譯器通常會隱含宣告預設建構函式;但在特定情況下,例如類別已有其他建構函式,便不會自動提供無參數的預設建構函式。

解題方法

逐一核對各敘述是否符合建構函式的語法與功能。判斷關鍵在於:建構函式雖然會在物件建立時執行,但它不是以回傳值來提供初始化結果,因此不能有回傳型別,也不能回傳常數值。

選項分析

🔒

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

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

免費註冊

第 32 題2 分

檢查判斷網路通不通,下列何者是最常用的指令?

這一題的完整詳解

核心觀念

本題考查用來檢查網路連線是否可達的常用指令。ping 會向指定的主機送出測試封包,並依回應判斷目標是否可達及回應時間。

解題方法

辨認題目中的「檢查網路通不通」,即可聯想到 ping 指令。使用者指定主機名稱或 IP 位址後,ping 會送出 ICMP Echo Request;若目標主機及網路路徑允許回應,便會收到 ICMP Echo Reply,並顯示往返時間等資訊。

選項分析

🔒

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

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

免費註冊

第 33 題2 分

有關 OSI 模型網路七層架構,下列敘述何者錯誤?

這一題的完整詳解

核心觀念

本題評量對 OSI 七層協定模型(Open Systems Interconnection Model) 各層職責與代表性功能的理解:

  1. 傳輸層(Transport Layer,第四層):負責行程到行程(Process-to-Process)之端對端(End-to-End)傳輸,提供可靠度維護、多工/解多工,以及代表性的**流量控制(Flow Control)**與壅塞控制(Congestion Control),代表協定為 TCP、UDP。
  2. 網路層(Network Layer,第三層):負責主機到主機(Host-to-Host)的邏輯定址(Logical Addressing)、路由選擇(Routing),以及當封包大小超過底層最大傳輸單元(MTU)時的切割(Fragmentation)與組裝(Defragmentation / Reassembly)。
  3. 資料連結層(Data Link Layer,第二層):負責相鄰節點間(Hop-to-Hop / Node-to-Node)的訊框封裝(Framing)、實體位址尋址(MAC Addressing)與錯誤偵測(Error Detection)。

解題方法

本題切入點在於判斷題目所列之功能、協定與 OSI 模型的層級對應是否正確:

  1. 比對選項 (A)、(B)、(D),均為網路層與傳輸層無爭議的經典代表功能與協定。
  2. 在國家考試《計算機概要》的命題邏輯中,流量控制(Flow Control)多被視為傳輸層(特別是 TCP 協定的滑動視窗機制)最核心的代表性服務;命題者依此將資料連結層歸類為不具備該主要特徵之層級,判定 (C) 為錯誤選項。

選項分析

  • (A) 正確:TCP(Transmission Control Protocol)與 UDP(User Datagram Protocol)是網際網路中最核心的傳輸層協定,負責在終端主機應用程式間建立通訊服務。
🔒

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

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

免費註冊

第 34 題2 分

下列何者不是 TCP 協定的特性?

這一題的完整詳解

核心觀念

TCP(傳輸控制協定)是傳輸層的連接導向、可靠傳輸協定。它透過序號、確認回應(ACK)與逾時重傳等機制,協助接收端依序取得資料,並處理傳輸中的遺失;另以流量控制避免發送端送得太快,也會配合壅塞控制調整傳送速率。

TCP 的 ACK、重傳與控制機制,和「向發送端回報錯誤訊息」不同。一般網路層錯誤回報由 ICMP 等協定負責;TCP 的接收端則主要以 ACK 回應已接收的資料。

解題方法

先判斷四個選項是否屬於 TCP 的傳輸可靠性或傳送速率調節機制,再辨別錯誤回報的協定角色。壅塞控制、流量控制與遺失重送都是 TCP 的功能;「向發送端回報錯誤訊息」不是 TCP 特性的典型描述。

選項分析

🔒

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

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

免費註冊

第 35 題2 分

有關傳輸層安全性協定(Transport Layer Security, TLS),不提供下列哪一種保護?

這一題的完整詳解

核心觀念

TLS(傳輸層安全性協定)用來保護網路連線,主要提供保密性、完整性與身分認證:

  • 保密性:以加密方式避免傳輸內容被未授權者讀取。
  • 完整性:使用訊息驗證機制,偵測傳輸內容是否遭到竄改。
  • 身分認證:通常透過伺服器憑證確認伺服器身分;也可設定用戶端憑證,認證用戶端身分。

解題方法

逐項比對選項與 TLS 的安全服務。題目問「不提供」哪一種保護;TLS 的標準功能包含保密性、完整性與身分認證,但不保證匿名性。因此選出匿名性即可。

選項分析

🔒

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

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

免費註冊

第 36 題2 分

關於一次性密碼本(One-Time Pad, OTP)加密演算法,下列何者正確?

這一題的完整詳解

核心觀念

一次性密碼本(One-Time Pad, OTP)以隨機金鑰對明文逐位元(或逐字元)進行運算。以位元表示時,加密與解密都使用 XOR:

C=P⊕K,P=C⊕KC = P \oplus K,\qquad P = C \oplus K

OTP 要達到理論上的完全保密,金鑰必須真正隨機、至少與明文等長,且每把金鑰只能使用一次,並須安全保管與傳送。

解題方法

逐項比對選項與 OTP 的必要條件:檢查金鑰長度、是否重複使用、是否真正隨機,以及加密和解密是否使用同一把金鑰。符合 OTP 定義的敘述即為正確選項。

選項分析

🔒

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

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

免費註冊

第 37 題2 分

揭露一個組織(無論是私有的還是公共的)內部非法的、不誠實的或者不正當行為的人,稱為:

這一題的完整詳解

核心觀念

本題考「吹哨者」(whistleblower)的定義:組織成員揭露其組織內部的非法、不誠實或其他不正當行為。題幹描述的是揭露行為的人,而不是保護這類人的制度或條款。

解題方法

抓住題幹的關鍵字「揭露……行為的人」。問的是「人」的稱呼,因此應選「吹哨者」;若問的是保護揭露者的法律或制度,才會是「吹哨者保護條款」。

選項分析

🔒

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

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

免費註冊

第 38 題2 分

網路封包在傳送的過程中,由較高層往較低層傳送時,會加上標頭(Header),這動作稱為:

這一題的完整詳解

核心觀念

這題考 OSI/TCP/IP 分層傳輸中的封裝(encapsulation)與解封裝(decapsulation)。資料由較高層往較低層傳送時,各層會在資料前加上該層的控制資訊,稱為標頭(Header);這個過程就是封裝。

解題方法

抓住題幹的方向:由較高層往較低層,且描述「加上標頭」,符合封裝的定義。

例如,應用層資料往下傳送時,傳輸層加入標頭形成區段,網路層再加入標頭形成封包,鏈結層再加入標頭(及尾端資訊)形成訊框。接收端則由較低層往較高層逐層移除各層資訊,稱為解封裝。

選項分析

🔒

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

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

免費註冊

第 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}
🔒

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

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

免費註冊

第 40 題2 分

下列何者為合法的 Media Access Control(MAC)位址?

這一題的完整詳解

核心觀念

MAC 位址(Media Access Control address)是資料鏈結層用來識別網路介面的一種位址。常見的 48 位元 MAC 位址由 6 個位元組組成,每個位元組以兩個十六進位數字表示,位元組之間以冒號分隔,例如 01:23:45:67:89:AB。

十六進位數字可使用 0–9 及 A–F,每個位元組需恰有兩個十六進位數字。因此,判斷格式是否合法,須檢查位元組數、每組長度及字元範圍。

解題方法

逐一檢查各選項是否符合以下條件:

  1. 恰有 6 組位元組。
  2. 每組恰有 2 個十六進位數字。
  3. 各組以冒號分隔。

選項分析

🔒

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

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

免費註冊

其他考古題

112 年高普考普通考試・其他類科的《計算機概要》