免費開始練習
地特三等申論題 109年 [電力工程] 計算機概論

第 一 題

📖 題組:
請回答下列問題:(每小題5分,共20分) (一)假設 x 的值為0情況下,執行以下函數,請問輸出結果為何? def fun1(x): print(x) if (N < 2): fun1(x + 1) else: print(x) print(x) (二)假設有一棵二元樹(t)如下左圖所示,執行如下右圖函數,請問輸出結果為何? def PT(t): if(t is not NULL): print(t.Value) PT(t.Right) (三)請問以下程式,輸出結果為何? main() { int A = 5; while (A < 7) { printf("%i ", A); A++; } printf("%i ", A); while (A > 2) { printf("%i ", A); A -= 2; } } (四)請問以下程式,輸出結果為何? void funcC(int *p){ int y; y = *p + 3; *p = y * 3; } main() { int m = 5, n = 6; funcC(&m); funcC(&n); printf("%4d%4d\n", m, n); }
📝 此題為申論題,共 4 小題

小題 (一)

假設 x 的值為0情況下,執行以下函數,請問輸出結果為何? def fun1(x): print(x) if (N < 2): fun1(x + 1) else: print(x) print(x)

思路引導 VIP

考生看到遞迴(Recursion)追蹤題時,首先應檢查程式邏輯與變數宣告是否完整。本題存在明顯瑕疵(變數 N 未定義),作答時務必先點出此錯誤(NameError),再做出合理假設(N 為參數 x 的筆誤),並利用「堆疊(Stack)」或「遞迴樹(Recursion Tree)」觀念逐步追蹤函數的呼叫與返回過程。

🤖
AI 詳解
AI 專屬家教

【解題思路】檢視程式碼發現變數 N 未定義,需先指出語法錯誤,再基於合理假設(將 N 視為 x)進行遞迴呼叫的逐步推導(Recursion Trace)。 【詳解】 本題程式碼存在變數 N 未定義的問題,依據編譯與執行邏輯,以下分為兩種情況解答:

小題 (二)

假設有一棵二元樹(t)如下左圖所示,執行如下右圖函數,請問輸出結果為何? def PT(t): if(t is not NULL): print(t.Value) PT(t.Right)
題目圖片

思路引導 VIP

面對二元樹的遞迴追蹤題,應先分析程式碼的走訪邏輯。此題的函數僅印出目前節點的值,並單純向「右子節點 (t.Right)」遞迴,忽略了左子樹的走訪,因此只需從根節點開始一路向右追蹤即可得出正確輸出。

🤖
AI 詳解
AI 專屬家教

【解題思路】觀察遞迴函數的執行邏輯,該程式僅會印出目前節點的值,並持續往「右子樹(Right)」進行走訪,直到節點為空(NULL)。 【詳解】 已知二元樹結構:

小題 (三)

請問以下程式,輸出結果為何? main() ... (C語言迴圈)

思路引導 VIP

面對程式碼追蹤題,應採用人腦編譯器(Trace)法,逐行記錄變數在每一次迭代(Iteration)的數值變化,並同步記下每一次印出(Print)的內容,切忌跳步驟。

🤖
AI 詳解
AI 專屬家教

【解題思路】利用程式追蹤表(Trace Table),逐步記錄迴圈(Loop)內變數數值變化與每次迭代(Iteration)的輸出結果。 【詳解】 已知:宣告整數(Integer)變數 A 並初始化為 5。

小題 (四)

請問以下程式,輸出結果為何? void funcC(int *p){...} ... (指標運算)

思路引導 VIP

看到這題應立刻聯想到 C 語言中「傳址呼叫(Call by Address/Pointer)」與「指標(Pointer)」的概念。重點在於 funcC 接收的是變數的記憶體位址,因此在函數內透過「解參照(Dereference, *p)」所作的運算,會直接改變主程式中實質變數的記憶體內容,依序代入數值推導即可得解。

🤖
AI 詳解
AI 專屬家教

【解題思路】本題考查 C 語言中「指標(Pointer)」與「傳址呼叫(Call by Address / Pass by Pointer)」之機制。傳入變數位址至函式後,透過解參照(Dereference)運算子 *,可直接修改主程式原變數之內容。 【詳解】 程式執行流程(Step-by-step)如下:

升級 VIP 解鎖