109 高普考高考三級 工業行政 計算機概論 考古題詳解
第 一 題20 分
線路交換(circuit switching)和分封交換(packet switching)是兩個重要的網路資料交換技術。請詳述兩者的工作原理並加以比較。
登入後即可作答並保存紀錄。
核心觀念
本題考查兩種網路資料交換方式的工作原理與差異:**線路交換(circuit switching)**是在通訊雙方之間建立一條專用連線;**分封交換(packet switching)**則是把資料切成多個封包,逐一經由網路傳送。比較時應從連線建立、傳輸路徑、頻寬使用、延遲、可靠性及適用情境切入。
解題方法
先說明每種技術如何傳送資料,再依共同比較項目逐項對照。線路交換的核心是「先建立專用通路,再連續傳送」;分封交換的核心是「資料切成封包,網路逐封包轉送」。
線路交換的工作原理
線路交換通常分成三個階段:
- 建立連線:通訊前,網路先在來源端與目的端之間建立一條專用通路。這條通路可由實體線路、頻寬時槽或交換設備中的連線狀態構成。
- 資料傳送:連線建立後,雙方沿著該通路傳送資料。通路資源在通訊期間保留,即使某一時刻沒有資料,也不會立即交給其他連線使用。
- 釋放連線:通訊結束後,雙方釋放通路與所占用的網路資源。
傳統電話網路是典型例子。其優點是建立連線後,頻寬與傳輸路徑固定,傳輸品質較穩定;缺點是建立連線需要時間,且閒置時仍占用資源。
分封交換的工作原理
分封交換將較大的資料切割成多個封包,每個封包通常包含標頭與資料內容。標頭會記錄目的位址及轉送所需資訊。封包經過路由器等網路設備時,設備依據目的位址與轉送資訊,逐站將封包送往目的端。
封包不必使用專用通路;在資料報式分封交換中,同一筆資料的不同封包也可能經由不同路徑抵達,因此可能發生延遲不同、順序錯亂、遺失或重複等情形。目的端可依協定進行排序、錯誤檢查或要求重傳。網際網路是分封交換的代表。
第 二 題20 分
什麼是跨平台編譯器(cross-compiler)?請詳加解釋並舉例說明其用途。
登入後即可作答並保存紀錄。
核心觀念
跨平台編譯器(cross-compiler)是指:編譯器執行所在的平台,與它所產生程式碼的目標平台不同。它能在一種處理器或作業系統上,將原始程式編譯成適用於另一種處理器或作業系統的程式。
可用三個角色區分:
- 主機平台(host):編譯器實際執行的平台。
- 目標平台(target):編譯器輸出之機器碼要執行的平台。
- 來源程式:交給編譯器處理的程式碼。
例如,在 x86 架構的 Windows 電腦上執行編譯器,將 C 程式編譯成 ARM 架構 Linux 裝置可執行的程式。此時,編譯器的主機平台是 x86/Windows,目標平台是 ARM/Linux。
解題方法
作答時,先抓住「編譯器在哪裡執行」與「產生的程式在哪裡執行」兩者的差異,再說明這種安排解決的問題,最後舉例。
一般編譯器常在與目標程式相同的平台上執行;跨平台編譯器則可在效能較佳、開發工具較完整的主機上進行編譯,再將產物部署到目標設備。要注意,「跨平台」指編譯器的主機與目標不同,並非單指程式本身能在多種平台執行。
第 三 題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。
則此二元樹為何?請畫出此二元樹。
登入後即可作答並保存紀錄。
核心觀念
二元樹的中序走訪順序是「左子樹、根節點、右子樹」;層序走訪則是從根節點開始,逐層由左至右拜訪。已知中序與層序結果,可利用根節點將中序序列切成左右子樹,再依層序序列判定各子樹的根節點與子節點。
解題方法
層序走訪的第一個節點是整棵樹的根,因此根節點為 。在中序序列中, 左側的節點屬於左子樹,右側的節點屬於右子樹:
根節點 的左、右子節點,依層序走訪中這兩個子樹最先出現的節點判定,分別是 與 。
接著分別重建左右子樹:
- 重建以 為根的左子樹
該子樹的中序序列為 。 位於序列最左端,表示 沒有左子樹, 都在其右子樹中。層序序列中,這些節點先出現的是 ,所以 是 的右子節點。
的中序序列為 ,因此 是 的左子節點。
第 四 題20 分
某一作業系統之 CPU 排程為循環分配方法(round-robin scheduling),今有一排程,共有四個程序,其排隊順序為 P1、P2、P3 及 P4,個別所需執行時間如下表所示。
| 程序 | 所需執行時間(毫秒) |
|---|---|
| P1 | 3 |
| P2 | 6 |
| P3 | 1 |
| P4 | 7 |
請問在此排程中,若時間配額(time quantum)分別採用 3 毫秒與 5 毫秒,則哪一種時間配額可以得到較小之平均回覆時間(average turnaround time)?請畫出甘特圖(Gantt chart)及詳列計算過程。
登入後即可作答並保存紀錄。
核心觀念
循環分配法(Round-Robin, RR)依排隊順序輪流分配 CPU。每個程序每次最多執行一個時間配額;若執行完畢就離開佇列,若尚未完成則回到佇列尾端。
平均周轉時間的計算式為:
題目未提供各程序的到達時間,依排程題的通常假設,四個程序皆於 到達。因此各程序的周轉時間就是其完成時間。
解題方法
依照每個時間配額逐段排出執行順序,記錄各程序完成的時間,再計算平均周轉時間。比較時間配額為 毫秒與 毫秒時的結果。
時間配額為 3 毫秒
各程序的執行需求為 、、、 毫秒。
- 執行 毫秒後完成。
- 執行 毫秒,尚需 毫秒,回到佇列尾端。
- 執行 毫秒後完成。
- 執行 毫秒,尚需 毫秒,回到佇列尾端。
- 接著 執行 毫秒後完成。
- 再執行 毫秒,尚需 毫秒;最後執行 毫秒後完成。
甘特圖:
0 3 6 7 10 13 16 17
| P1 | P2 |P3 | P4 | P2 | P4 |P4 |
完成時間及周轉時間如下:
| 程序 | 完成時間 | 周轉時間 |
|---|---|---|
| P1 | 3 | |
| P2 | 13 | |
| P3 | 7 |
第 五 題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。
例如: