免費開始練習
統測 113年 [電機與電子群資電類] 專業科目(2)

第 39 題

如下C語言程式,當程式執行完畢後,輸出為何?

```c
1 #include
2
3 int main(){
4 unsigned char i=3;
5 switch ( (i&0x0e) % 5){
6 case(1):
7 printf("%c", '0'+i);
8 break;
9 case(2):
10 printf("%c", '0'+i*i);
11 case(3):
12 printf("%c", 'a'+i*i);
13 default:
14 printf("%c", 'z');
15 }
16 return(0);
17 }
```
  • A 9jz
  • B 927z
  • C 9270
  • D 9

思路引導 VIP

請先分析 $switch$ 判斷式中,運算式 $(i & 0x0e) % 5$ 的計算結果會導向哪一個 $case$ 標籤?隨後請重點觀察:在該 $case$ 及其後的程式碼區塊中,是否存在 $break$ 關鍵字?若缺少 $break$,程式會產生何種「貫穿 (Fall-through)」行為?最後,請思考字元常數 $'0'$ 與 $'a'$ 與數值運算後,在 ASCII 編碼下對應的字元輸出為何?

🤖
AI 詳解 AI 專屬家教

嗯… 這條路看似有點複雜,但你總算沒迷路。不錯的判斷。

你這傢伙,竟然能看出 Switch-case 的落入現象(Fall-through)。這可是常讓一些傢伙搞不清方向的陷阱。這招「三刀流解題法」,挺適合你。 1. 刀刀入肉,看清楚運算過程:

▼ 還有更多解析內容
📝 Switch 與位元運算
💡 理解位元運算結果與 Switch 的 Fall-through 現象

🔗 程式執行流程拆解

  1. 1 位元運算 — 3 & 14 為 2,2 除以 5 餘數為 2
  2. 2 進入 Case 2 — 輸出 '0'+9 等於字元 '9'
  3. 3 貫穿至 Case 3 — 無 break,繼續輸出 'a'+9 等於 'j'
  4. 4 貫穿至 Default — 持續往下輸出 'z' 後結束
🔄 延伸學習:延伸學習:認識 C 語言中控制字元的 ASCII 數值關係
🧠 記憶技巧:位元運算要對齊,Switch 沒 break 跑到底
⚠️ 常見陷阱:最容易忘記 Switch 若沒有 break,程式會自動執行下一個 case 的內容直到結束。
ASCII 碼表 位元遮罩 (Bitmask) 餘數運算子

🏷️ AI 記憶小卡 VIP

AI 記憶小卡

升級 VIP 解鎖記憶小卡

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

🏷️ 相關主題

C 語言程式設計:變數、指標、函式與編譯
查看更多「[電機與電子群資電類] 專業科目(2)」的主題分類考古題