計算機概論相關試題
【D】1. 參數傳遞方法中,下列何者於副程式執行過程中一定不會去改變主程式相對參數值?
(A) 傳值兼結果呼叫(B) 傳址呼叫(C) 傳名呼叫(D) 傳值呼叫 【103一銀】
解析:
傳值呼叫(call by value)是在函式之間傳遞資料時,把變數的值直接傳遞到函數(副程式)。所以函數內部的變數值被更改時並不會影響原變數的內容。C語言函數參數的傳遞方式預設為傳值呼叫。傳址呼叫(call by address)是函式傳遞資料時,將變數所在的記憶體位址傳遞過去。因函數接收到的是記憶體的位址,因此函數內部將變數值改變將使原變數的值跟著改變。
【B】2.如果編譯器採用短路求值(short-circuit evaluation)方式來編譯程式碼,則下列的C語言程式碼的執行結果為何?
int a = 1, b = 3;
if ((a > b)&& (--a > 0) || (++b / 2) == 1) a = b;
(A) a的值是1,b的值是3 (B) a的值是1,b的值是4
(C) a的值是0,b的值是4 (D) a的值是4,b的值是4 【103 期交所】
解析:短路求值(Short-circuit evaluation),是一種邏輯運算符的求值策略。只有當第一個運算式的值無法確定邏輯運算的結果時,才會對第二個運算式進行求值。例如,當AND(&&)的第一個運算式的值為false時,其結果必定為false;當OR(||)的第一個運算式為true時,最後結果必定為true,在這種情況下,就不需要知道第二個運算式的具體值。因此本題程式碼的 (a>b) &&(--a>0) 的(a>b) 為false,因此不會執行(--a>0)運算,a變數維持 1。((a > b) && (--a > 0) || (++b / 2) == 1) 運算式中OR(||)左邊的運算式值為false,因此會對(++b/2)求值,b變數先加1(=4) 再進行運算,得出2不等於1,if 條件式結果為 false ,不再執行後面的a=b敍述,執行結果 a = 1,b = 4。
【C】3. 以泡沬排序法將自小到大的數列(1, 4, 7, 11, 16)排序成由大到小的順序,需進行多少次排序?
(A) 2 (B) 6 (C) 10 (D) 15。
解析:第一回合:1 4 7 11 16 →4 1 7 1116→4 7 1 1116→4 7 11 1 16→ 4 7 11 16 (1)
第二回合:4 7 11 16 (1)→7 4 11 16 (1)→7 11 416 (1)→7 11 16 (4 1)
第三回合:7 11 16 (4 1)→ 11 7 16 (4 1)→11 16(7 4 1)
第四回合:11 16 (7 4 1)→16 (11 7 4 1)
共需10次排序。
【B】4. 於雙向鏈結串列(linked list)結構中,每一節點(node)皆有兩個指標(pointer),其中一指標指向"下一(next)節點",請問另一指標應指向何處節點?
(A) 第一(head)節點 (B) 前一(previous)節點 (C) 中間(middle)節點 (D) 最後節點 【102彰銀】
【B】5. 當資料量大且已事先排序過,一般會採用下列何種方式進行搜尋?
(A) 循序搜尋 (B) 二元搜尋 (C) 鏈結搜尋 (D) 雜湊搜尋 【102 華南金】
【C】6. 在某些應用如資料庫管理,符號表(symbol table)的大小會隨著資料的增刪而改變,以下哪一項資料結構最適合於表示符號表。
(A)鏈結串列(linked list)
(B)二元查詢樹(binary search tree)
(C)動態雜湊表(dynamic hash table)
(D)相鄰串列(adjacency list) 【102 中小企銀】
【B】7.已知作業系統中有兩個處理程序A與B,以及兩個資源C與D。若A擁有資源C不放,B擁有資源D不放,此時A又要求資源D,而B也要求資源C。會使得系統陷入互相等待的狀況、且無法繼續執行,這種現象稱之為:
(A) 纏繞(Spooling) (B) 死結(Deadlock) (C) 遞迴(Recursive) (D) 飢餓(Starvation)【103 中小企銀】
解析:
死結(dead lock)發生的原因是系統中的一個行程正在等待一個尚未發生的事件而無法繼續執行,而能夠產生此事件的行程也進入等待中,此種情形發生時,即稱為死結。死結發生的四個原因為:互斥、把持並等待、不可搶奪及循環等待。