免費開始練習
地特四等申論題 107年 [資訊處理] 程式設計概要

第 一 題

📖 題組:
下列程式皆以C語言語法呈現,請依據所給程式片段回答問題。
📝 此題為申論題,共 4 小題

小題 (一)

請說明下列程式片段執行結果為何。(5分) for (i=0; i<=10; i++) { i = i+2; } printf ("%d\n", i);

思路引導 VIP

遇到程式追蹤題,務必注意迴圈主體內是否修改了計數變數。建議採用「變數追蹤表(Trace table)」,逐次記錄條件判斷、主體執行與遞增階段的數值變化,避免心算錯誤。

🤖
AI 詳解
AI 專屬家教

【解題思路】利用變數追蹤(Trace)逐步記錄迴圈每次執行條件判斷、迴圈主體(i=i+2)與遞增運算式(i++)後 i 的數值變化。 【詳解】 已知初始條件:i = 0

小題 (二)

給定下列函式,請說明 fun(123456)執行結果為何。(5分) int fun (int x) { if (x > 0) return (x % 10) + fun (x / 10); else return 0; }

思路引導 VIP

看到遞迴函式,應先找出「終止條件」(x <= 0 時回傳 0)與「遞迴關係式」(利用 % 10 取出個位數,並加上 / 10 剩餘位數的遞迴結果)。接著以手動追蹤法(Trace)將傳入值 123456 逐層代入,即可發現此函式的目的是計算整數所有位數的總和。

🤖
AI 詳解
AI 專屬家教

【解題思路】利用遞迴追蹤法(Recursive Trace)與模除運算(Modulo Operation)逐步推導各層函式回傳值。 【詳解】 已知:初始傳入參數 x = 123456

小題 (三)

若 int 變數是以4位元(bytes)來儲存,請問最大及最小整數分別為何?(5分)

思路引導 VIP

看到此題,應先將位元組(bytes)換算成位元(bits),即 4 bytes = 32 bits。接著回想C語言中 int 預設為有號整數(signed integer),採用二補數(Two's complement)表示法,套用 n bits 有號整數的範圍公式 -2^(n-1) ~ 2^(n-1)-1 即可得出答案。

🤖
AI 詳解
AI 專屬家教

【解題思路】利用二補數(Two's complement)表示法及位元容量換算公式進行推導。 【詳解】 已知:1 byte = 8 bits,故 4 bytes 總計為 32 bits。

小題 (四)

若下列程式片段目的是要判斷x 是否能被2,3,4,5整除,若可被整除就輸出可被整除之訊息。請問程式有何錯誤?請說明該如何修正方能符合預期目的。(10分) if (x/2 == 0) printf ("%d被2整除\n",x); else if (x/3 == 0) printf (“%d被3整除\n”, x); else if (x/4 == 0) printf(“%d被4整除\n”, x); else if (x/5 == 0) printf(“%d被5整除\n”, x);

思路引導 VIP

解答本題應從「運算邏輯」與「控制流程」兩個層面切入。首先,回想C語言中『整除』的數學定義應為『餘數為零』,故需檢查使用的運算子是否正確;其次,思考題目情境『判斷能否被2,3,4,5整除』是否為互斥事件,若一個數字可能同時被多個數字整除,則不應使用會中斷判斷的 else if 結構。

🤖
AI 詳解
AI 專屬家教

【破題】 本程式片段無法達成預期目的,主要存在「運算子誤用」與「控制流程邏輯錯誤」兩項重大錯誤。 【論述】

升級 VIP 解鎖