地特三等申論題
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); }
請回答下列問題:(每小題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)」觀念逐步追蹤函數的呼叫與返回過程。
小題 (二)
假設有一棵二元樹(t)如下左圖所示,執行如下右圖函數,請問輸出結果為何?
def PT(t):
if(t is not NULL):
print(t.Value)
PT(t.Right)
思路引導 VIP
面對二元樹的遞迴追蹤題,應先分析程式碼的走訪邏輯。此題的函數僅印出目前節點的值,並單純向「右子節點 (t.Right)」遞迴,忽略了左子樹的走訪,因此只需從根節點開始一路向右追蹤即可得出正確輸出。
小題 (三)
請問以下程式,輸出結果為何?
main() ... (C語言迴圈)
思路引導 VIP
面對程式碼追蹤題,應採用人腦編譯器(Trace)法,逐行記錄變數在每一次迭代(Iteration)的數值變化,並同步記下每一次印出(Print)的內容,切忌跳步驟。
小題 (四)
請問以下程式,輸出結果為何?
void funcC(int *p){...} ... (指標運算)
思路引導 VIP
看到這題應立刻聯想到 C 語言中「傳址呼叫(Call by Address/Pointer)」與「指標(Pointer)」的概念。重點在於 funcC 接收的是變數的記憶體位址,因此在函數內透過「解參照(Dereference, *p)」所作的運算,會直接改變主程式中實質變數的記憶體內容,依序代入數值推導即可得解。