免費開始練習
地特三等申論題 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 小題

小題 (三)

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

思路引導 VIP

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

🤖
AI 詳解
AI 專屬家教

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

小題 (一)

假設 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)。 【詳解】 已知二元樹結構:

小題 (四)

請問以下程式,輸出結果為何?
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)如下:

📝 程式追蹤與流程控制
💡 掌握迴圈判斷、遞迴邏輯與指標變數的狀態追蹤。

🔗 程式邏輯追蹤流程

  1. 1 變數初始化 — 確認變數在進入控制結構前的初始狀態與記憶體位址。
  2. 2 條件判定 — 判斷 while 或 if 條件布林值,決定程式執行路徑。
  3. 3 主體執行與更新 — 執行敘述並依據運算式(如 A++)同步更新變數數值。
  4. 4 終止與輸出 — 當條件不成立時跳出控制結構,記錄最終產出的結果序列。
🔄 延伸學習:延伸學習:複雜迴圈的時間複雜度 Big O 分析與記憶體管理。
🧠 記憶技巧:表格追蹤看條件,遞迴回溯看順序,指標傳址改原值。
⚠️ 常見陷阱:在 trace table 中容易忽略迴圈結束前最後一次的變數遞增運算,導致最後一個輸出數值判斷錯誤。
遞迴演算法分析 參數傳遞機制比較

🏷️ AI 記憶小卡 VIP

AI 記憶小卡

升級 VIP 解鎖記憶小卡

考前複習神器,一眼掌握重點

🏷️ 相關主題

資料結構與演算法
查看更多「[電力工程] 計算機概論」的主題分類考古題