免費開始練習
調查局三等申論題 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)寫出輸出變化。

🤖
AI 詳解
AI 專屬家教

【破題】 本題測驗副程式呼叫時,參數傳遞機制(Parameter Passing)對全域變數與區域變數記憶體狀態之影響,核心差異在於參數是否與原變數共用同一記憶體位址。 【論述】

小題 (二)

堆疊 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() 所造成的影響。

🤖
AI 詳解
AI 專屬家教

【解題思路】利用堆疊後進先出(LIFO)特性,逐次追蹤 while 迴圈中變數 x 的值以及堆疊內資料元素的動態變化。 【詳解】 已知初始堆疊 bStack 由上而下為:[7, 8, -3, 14, 5](頂端為 7)。

升級 VIP 解鎖