免費開始練習
地特三等申論題 112年 [資訊處理] 程式設計

第 一 題

關於下列 C 程式碼,請說明程式執行後,程式碼編號 27~33 的輸出,以及其運算邏輯。(25 分)
01 #include <stdio.h>
02 #define SIZE 30
03 typedef enum direction {North, South, East=3, West} dir_t;
04 int f1(int a, int b) {
05 int x = 3.0/a;
06 double y = (a/2)*(b%3) + x;
07 return y;
08 }
09 int f2(dir_t d) {
10 d= (North+East)/2 > d? East: West;
11 return d;
12 }
13 int f3(int a, int b) {
14 if (b==a || b<=1) return a+b;
15 else if (a<=1) return b-a;
16 else return f3(a-b, a-1)+b+a;
17 }
18 int f4(int a, int b) {
19 int data[SIZE];
20 for (int i=1, k=0; i<a; i++) {
21 if (i%2==0) data[k++]=i;
22 }
23 return data[b];
24 }
25 unsigned int f5(unsigned int a, unsigned int b) { return (~a&b); }
26 int main() {
27 printf("%d\n", f1(10, 4));
28 printf("%d\n", f2(South));
29 printf("%d\n", f3(6, 4));
30 printf("%u\n", f3(7, 4));
31 printf("%d\n", f4(20, 5));
32 printf("%d\n", f4(10, 4));
33 printf("%u\n", f5(4, 7));
34 return 0;
35 }
📝 此題為申論題

思路引導 VIP

本題測驗 C 語言的綜合基礎觀念,包含型別轉換(浮點數與整數)、列舉(enum)的自動賦值規則、遞迴函數追蹤、陣列操作(需特別注意未初始化及越界存取)以及位元運算。建議考生在作答時,先釐清各型態與運算子的優先權,並採用樹狀或逐步展開法追蹤遞迴呼叫,以防計算錯誤。

🤖
AI 詳解 AI 專屬家教

【解題關鍵】本題測驗 C 語言的資料型別轉換、列舉(enum)賦值規則、遞迴(recursion)追蹤、陣列邊界與記憶體初始化觀念,以及位元運算(bitwise operations)。 【解答】 各行輸出結果與運算邏輯詳細解析如下:

▼ 還有更多解析內容
📝 C語言程式邏輯綜合分析
💡 精確掌握C語言資料型別轉換、列舉賦值與遞迴追蹤邏輯。
  • 整數除法自動截斷小數特性,賦值給 int 變數時應先行確認有無精度遺失。
  • 列舉 (enum) 成員預設從 0 開始,若中途手動賦值,後續成員會依序累加 1。
  • 遞迴 (Recursion) 追蹤應建立堆疊模型,先行找出終止條件再逐層代回運算。
  • 位元運算 (~, &) 涉及二進位轉換與補數運算,須注意無號整數的格式化輸出。
🧠 記憶技巧:VIP 會員可查看這題的記憶口訣與速記法
⚠️ 常見陷阱:VIP 會員可查看這題最常被誘答的陷阱整理
運算子優先順序 遞迴演算法複雜度 記憶體位址與陣列偏移

🏷️ AI 記憶小卡 VIP

AI 記憶小卡

升級 VIP 解鎖記憶小卡

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

📝 同份考卷的其他題目

查看 112年[資訊處理] 程式設計 全題