調查局三等申論題
105年
[電子科學組] 計算機概論
第 一 題
📝 此題為申論題,共 2 小題
小題 (一)
假設函數 Change 定義如程式片段 A,且 X 為全域變數。若參數為傳值呼叫(pass by value),程式片段 B 執行會印出什麼結果?若參數為傳址呼叫(pass by address)的結果又如何?(10 分)
程式片段 A
def Change(Y):
Y=9
print(X)
print(Y)
程式片段 B
X=5
Change(X)
print(X)
思路引導 VIP
看到參數傳遞題型,首要區分「傳值呼叫」與「傳址呼叫」對記憶體位址的影響。傳遞過程中,若為『傳值』則僅複製數值,函數內變數修改不影響外部變數;若為『傳址』,則內外變數指向同一記憶體位址,函數內的修改會直接改變全域變數的值,務必採逐行追蹤(Trace)寫出輸出變化。
小題 (二)
堆疊 bStack 含有以下資料元素,由上而下依序存放,"7"在最上面,"5"在最下面:7 8 -3 14 5
下列程式片段將會顯示什麼結果?(10 分)
int x;
while (!bStack.isEmpty()){
bStack.pop(x);
if (x>0 && !bStack.isEmpty())
bStack.pop();
cout << x << endl;
}
思路引導 VIP
看到堆疊(Stack)與迴圈的組合題,應立即聯想堆疊的「後進先出(LIFO)」特性。解題關鍵在於採取「狀態追蹤法」,逐次記錄迴圈執行時的變數值與堆疊剩餘內容,並特別留意 if 條件觸發額外 pop() 所造成的影響。