109 高普考高考三級 電子工程 計算機概論 考古題詳解

109 年・高普考・高考三級・電子工程
試題代碼 計算機概論

第 一 題20 分

線路交換(circuit switching)和分封交換(packet switching)是兩個重要的網路資料交換技術。請詳述兩者的工作原理並加以比較。

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考查兩種網路資料交換方式的工作原理與差異:線路交換(circuit switching)​是在通訊雙方之間建立一條專用連線;分封交換(packet switching)​則是把資料切成多個封包,逐一經由網路傳送。比較時應從連線建立、傳輸路徑、頻寬使用、延遲、可靠性及適用情境切入。

解題方法

先說明每種技術如何傳送資料,再依共同比較項目逐項對照。線路交換的核心是「先建立專用通路,再連續傳送」;分封交換的核心是「資料切成封包,網路逐封包轉送」。

線路交換的工作原理

線路交換通常分成三個階段:

  1. 建立連線:通訊前,網路先在來源端與目的端之間建立一條專用通路。這條通路可由實體線路、頻寬時槽或交換設備中的連線狀態構成。
  2. 資料傳送:連線建立後,雙方沿著該通路傳送資料。通路資源在通訊期間保留,即使某一時刻沒有資料,也不會立即交給其他連線使用。
  3. 釋放連線:通訊結束後,雙方釋放通路與所占用的網路資源。

傳統電話網路是典型例子。其優點是建立連線後,頻寬與傳輸路徑固定,傳輸品質較穩定;缺點是建立連線需要時間,且閒置時仍占用資源。

分封交換的工作原理

分封交換將較大的資料切割成多個封包,每個封包通常包含標頭與資料內容。標頭會記錄目的位址及轉送所需資訊。封包經過路由器等網路設備時,設備依據目的位址與轉送資訊,逐站將封包送往目的端。

封包不必使用專用通路;在資料報式分封交換中,同一筆資料的不同封包也可能經由不同路徑抵達,因此可能發生延遲不同、順序錯亂、遺失或重複等情形。目的端可依協定進行排序、錯誤檢查或要求重傳。網際網路是分封交換的代表。

🔒

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

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

免費註冊

第 二 題20 分

什麼是跨平台編譯器(cross-compiler)?請詳加解釋並舉例說明其用途。

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

跨平台編譯器(cross-compiler)是指:編譯器執行所在的平台,與它所產生程式碼的目標平台不同。它能在一種處理器或作業系統上,將原始程式編譯成適用於另一種處理器或作業系統的程式。

可用三個角色區分:

  • 主機平台(host):編譯器實際執行的平台。
  • 目標平台(target):編譯器輸出之機器碼要執行的平台。
  • 來源程式:交給編譯器處理的程式碼。

例如,在 x86 架構的 Windows 電腦上執行編譯器,將 C 程式編譯成 ARM 架構 Linux 裝置可執行的程式。此時,編譯器的主機平台是 x86/Windows,目標平台是 ARM/Linux。

解題方法

作答時,先抓住「編譯器在哪裡執行」與「產生的程式在哪裡執行」兩者的差異,再說明這種安排解決的問題,最後舉例。

一般編譯器常在與目標程式相同的平台上執行;跨平台編譯器則可在效能較佳、開發工具較完整的主機上進行編譯,再將產物部署到目標設備。要注意,「跨平台」指編譯器的主機與目標不同,並非單指程式本身能在多種平台執行。

🔒

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

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

免費註冊

第 三 題20 分

有一個二元樹(binary tree)共有 10 個節點,每個節點均儲存一個英文字母。若此二元樹:

  • 使用中序走訪(inorder traversal)的結果為:R、T、D、P、X、Y、K、G、A、B。
  • 且使用層序走訪(level order traversal)的結果為:P、R、X、D、A、T、K、B、Y、G。

則此二元樹為何?請畫出此二元樹。

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

二元樹的中序走訪順序是「左子樹、根節點、右子樹」;層序走訪則是從根節點開始,逐層由左至右拜訪。已知中序與層序結果,可利用根節點將中序序列切成左右子樹,再依層序序列判定各子樹的根節點與子節點。

解題方法

層序走訪的第一個節點是整棵樹的根,因此根節點為 PP。在中序序列中,PP 左側的節點屬於左子樹,右側的節點屬於右子樹:

R,T,D⏟P 的左子樹,P,X,Y,K,G,A,B⏟P 的右子樹\underbrace{R,T,D}_{P\text{ 的左子樹}},\quad P,\quad \underbrace{X,Y,K,G,A,B}_{P\text{ 的右子樹}}

根節點 PP 的左、右子節點,依層序走訪中這兩個子樹最先出現的節點判定,分別是 RR 與 XX。

接著分別重建左右子樹:

  1. 重建以 RR 為根的左子樹

該子樹的中序序列為 R,T,DR,T,D。RR 位於序列最左端,表示 RR 沒有左子樹,T,DT,D 都在其右子樹中。層序序列中,這些節點先出現的是 DD,所以 DD 是 RR 的右子節點。

DD 的中序序列為 T,DT,D,因此 TT 是 DD 的左子節點。

🔒

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

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

免費註冊

第 四 題20 分

某一作業系統之 CPU 排程為循環分配方法(round-robin scheduling),今有一排程,共有四個程序,其排隊順序為 P1、P2、P3 及 P4,個別所需執行時間如下表所示。

程序所需執行時間(毫秒)
P13
P26
P31
P47

請問在此排程中,若時間配額(time quantum)分別採用 3 毫秒與 5 毫秒,則哪一種時間配額可以得到較小之平均回覆時間(average turnaround time)?請畫出甘特圖(Gantt chart)及詳列計算過程。

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

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

循環分配法(Round-Robin, RR)依排隊順序輪流分配 CPU。每個程序每次最多執行一個時間配額;若執行完畢就離開佇列,若尚未完成則回到佇列尾端。

平均周轉時間的計算式為:

周轉時間=完成時間−到達時間\text{周轉時間}=\text{完成時間}-\text{到達時間} 平均周轉時間=∑i=1n周轉時間in\text{平均周轉時間} =\frac{\sum_{i=1}^{n}\text{周轉時間}_i}{n}

題目未提供各程序的到達時間,依排程題的通常假設,四個程序皆於 t=0t=0 到達。因此各程序的周轉時間就是其完成時間。

解題方法

依照每個時間配額逐段排出執行順序,記錄各程序完成的時間,再計算平均周轉時間。比較時間配額為 33 毫秒與 55 毫秒時的結果。

時間配額為 3 毫秒

各程序的執行需求為 P1=3P1=3、P2=6P2=6、P3=1P3=1、P4=7P4=7 毫秒。

  • P1P1 執行 33 毫秒後完成。
  • P2P2 執行 33 毫秒,尚需 33 毫秒,回到佇列尾端。
  • P3P3 執行 11 毫秒後完成。
  • P4P4 執行 33 毫秒,尚需 44 毫秒,回到佇列尾端。
  • 接著 P2P2 執行 33 毫秒後完成。
  • P4P4 再執行 33 毫秒,尚需 11 毫秒;最後執行 11 毫秒後完成。

甘特圖:

0 3 6 7 10 13 16 17
| P1 | P2 |P3 | P4 | P2 | P4 |P4 |

完成時間及周轉時間如下:

程序完成時間周轉時間
P133−0=33-0=3
P21313−0=1313-0=13
P377−0=77-0=7
🔒

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

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

免費註冊

第 五 題20 分

以下 C++ 程式的目的為何?詳述執行流程並寫出程式的輸出。

#include <iostream> #include <iomanip> using namespace std;

int main(){ int x = 30, y = 100, ok = 1; int i, j;

for(i = x; i <= y; i++){
    ok = 1;
    for(j = 2; j < i; j++)
        if(i % j == 0){
            ok = 0;
            break;
        }
    if(ok == 1) cout << i << " ";
}
cout << endl;
return 0;

}

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考查 C++ 巢狀 for 迴圈、條件判斷、取餘數運算子 % 與 break,以及判斷質數的基本方法。

質數是大於 1,且除了 1 與自身以外沒有其他正因數的整數。程式逐一檢查 30 到 100 的整數:若某個整數能被其中一個較小的正整數整除,就不是質數;若檢查完都沒有找到因數,便將它輸出。

解題方法

外層迴圈設定待檢查的整數 i:

for(i = x; i <= y; i++)

其中 x = 30、y = 100,因此 i 依序取值 30、31、32,直到 100,範圍包含 30 與 100。

每次檢查一個 i 時,先令 ok = 1,表示目前假設 i 是質數。內層迴圈用 j 從 2 檢查到 i - 1:

for(j = 2; j < i; j++)

若 i % j == 0,代表 i 可被 j 整除,找到因數後便執行 ok = 0,並以 break 結束內層迴圈。外層迴圈接著檢查 ok:只有 ok 仍為 1 時,才輸出 i。

例如:

🔒

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

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

免費註冊

其他考古題