108 民航特考三等 飛航諮詢 資料處理 考古題詳解
第 一 題20 分
回答下列有關 IP 協定的問題:
(一) 我們稱 IP 協定(IP protocol)為非連接導向(connectionless)式的協定,請說明何謂非連接導向。
(二) 在 IP 協定的封包(packet)中有一個名為 TTL 的欄位,請寫出其英文全名,並說明這個欄位的作用。
登入後即可作答並保存紀錄。
核心觀念
本題考查 IP 的非連接導向特性,以及 IP 封包標頭中 TTL 欄位的全名與功能。IP 位於網路層,負責將封包由來源主機傳送至目的主機;它提供盡力傳送服務,不負責建立端對端連線,也不保證封包一定送達、依序送達或只送達一次。
解題方法
(一)何謂非連接導向
判斷是否為非連接導向,重點在於傳送資料前是否須先建立連線狀態。IP 傳送資料前不會先與目的端協商或建立連線;每個 IP 封包都能獨立處理,路由器依據封包中的目的 IP 位址及路由資訊轉送。
因此,同一來源與目的端之間的不同封包,可能經過不同路徑,也可能發生遺失、延遲或亂序。若應用程式需要可靠傳輸、依序交付等功能,通常由 TCP 等較高層協定處理,而不是由 IP 本身保證。
(二)TTL 欄位
TTL 的英文全名為 Time To Live,中文常譯為「存活時間」。在 IPv4 中,TTL 欄位以數值限制封包可經過的路由器跳數:封包每經過一台路由器,TTL 至少減少 1;
第 二 題20 分
請回答下列問題:
(一) 已知 用十進位表達法是 90,而且 ,以及 。請將 用十六進位表示法表達。
(二) 假設一部時脈速度(clock rate)為 的電腦,且其 CPU 的處理速度是 400 MIPS(million instructions per second),則此部電腦的 CPI(clock cycle per instruction)為多少?
登入後即可作答並保存紀錄。
核心觀念
XOR(互斥或)逐位比較兩數:位元相同得 ,不同得 。AND(位元及)則是兩個位元都為 時才得 。題目中的 、、 均視為十進位數值。
解題方法
已知 ,且 。由 XOR 的性質,兩邊再與 做 XOR,可得:
改以十六進位運算較便於逐位計算:
因此 。
接著,。十進位 的二進位是 ,表示 與 的 AND 結果中,僅第 3 位(由右起算,從第 0 位開始)必須為 ,其他位元必須為 。
將 寫成二進位:
其第 3 位是 ,但題目要求 ,所以 在該位必須為 。
第 三 題20 分
有 筆資料,每筆資料是一個數值, 筆資料彼此互不相同,也未依序排列。今取其中一半,即 筆,用插入排序法(insertion sort)將它們排序後,另一半的 筆,用快速排序法(quick sort)的方法將資料排序。至此,我們得到兩列排序好的資料,各含 個值。接著我們用合併排序法(merge sort)將這兩列資料做最後的排序。
請分析整個過程裡,各步驟在最糟情況下(worst case)的時間複雜度(time complexity)是多少?並說明整個排序工作,在最糟情況下的最後總時間複雜度是多少?
登入後即可作答並保存紀錄。
核心觀念
本題考查排序演算法在最糟情況下的時間複雜度,以及分段排序後再合併的總成本。各步驟依序進行,因此整體時間是三個步驟的時間相加。
解題方法
令每一部分的資料筆數為 。
-
插入排序:最糟情況下,資料原本呈反向排列。插入第 筆資料時,最多需與前面已排序的 筆比較並移動,因此
-
快速排序:最糟情況下,樞紐每次都選到該區間的最小值或最大值,使問題分成大小為 與 的兩部分。對 筆資料,遞迴成本為
第 四 題20 分
有一關聯式資料庫如下:
電影(片名,片長,出品年份,電影公司)
戲院(院名,地址,容納觀眾數)
上映(院名,片名,票價)
請用 SQL 語言回答下列查詢。
(一) 請找出所有出品年份是 1980 年,而且在院名是「豪華戲院」上映過的電影,列出這些電影的片名和片長。
(二) 請找出所有曾在至少有五家不同的戲院上映過的電影,列出這些電影的片名,和這些電影各曾在幾家戲院上映過。
登入後即可作答並保存紀錄。
核心觀念
本題考查關聯式資料庫的 表格連接、條件篩選、分組與彙總。
- 「電影」以「片名」識別電影,欄位包括片長、出品年份及電影公司。
- 「上映」記錄電影在哪家戲院上映,並包含院名、片名及票價。
- 同一部電影可能在多家戲院上映,因此要統計上映戲院家數時,應依片名分組,再計算不同院名的數量。
本題沒有指定特定資料庫管理系統,以下採用一般 SQL 語法。
解題方法
(一)找出 1980 年出品且曾在「豪華戲院」上映的電影
查詢需要「電影」表中的出品年份與片長,以及「上映」表中的院名。兩表以片名連接,再同時套用年份與院名條件:
SELECT DISTINCT 電影.片名, 電影.片長
FROM 電影
JOIN 上映 ON 電影.片名 = 上映.片名
WHERE 電影.出品年份 = 1980
AND 上映.院名 = '豪華戲院';
若同一部電影在「上映」表中有重複紀錄,DISTINCT 可避免重複列出。若資料已保證每個院名與片名的組合只出現一次,DISTINCT 可省略。
(二)找出曾在至少五家不同戲院上映的電影及戲院家數
先在「上映」表中依片名分組,再計算每部電影上映過的不同戲院數。COUNT(DISTINCT 院名) 計算的是不同戲院家數;以 HAVING 篩選彙總後達到五家的電影:
第 五 題20 分
某次作業的題目是:寫一個 C 語言的程式,它讀入一個字串,字串長度不超過 50 個字母,計算此字串裡包含了多少個「a」字元,然後印出此數字。有一位學生寫出了以下的程式,但有幾處不會寫,請幫助他完成空白處的程式碼:
#include<stdio.h> #include<____>
void main() { char str[50]; scanf(____);
int numStar = 0;
for(____)
if(str[i] == ____)
numStar++;
printf("%d", numStar);
}
登入後即可作答並保存紀錄。
核心觀念
本題考查 C 語言的標準輸入、字串結尾標記,以及使用迴圈逐字檢查字元並計數。
char str[50]宣告可存放最多 49 個字母及字串結尾字元'\0'的陣列。C 語言字串以'\0'表示結尾。scanf以%s讀取字串,&str可傳入陣列位址;也可直接使用str,因為陣列名稱在此會轉換成指向首元素的指標。- 使用
for逐一檢查字串中的字元;遇到字元'a',就將計數器加一。
解題方法
題目說字串長度不超過 50,因此陣列大小為 50 時,最多可存放 49 個字母,另需一格存放 '\0'。迴圈以 str[i] != '\0' 作為條件,就能從索引 0 開始檢查,直到字串結尾。
比較字元時,須使用單引號表示字元常值 'a';計數器 numStar 初值為 0,每找到一個 'a' 就加一,最後輸出計數結果。
完整程式