地方政府公務人員四等-電子工程類科計算機概要108 年第 24 題單選題
假設在 C 語言中變數 i 的資料型態為 int,其數值為 0 到 9 的數,請問下列何者敘述列印結果與其它選項不一樣?
Aprintf("%d",i);
Bprintf("%c",i);正確答案
Cprintf("%c",i+'0');
Dprintf("%1.0f",(float)i);
B正確答案
%c 印的是 ASCII 字元,直接傳 0~9 會印出控制字元;其他三個都會印出數字 0~9。
為什麼答案是 B
%c 會把 i 當成 ASCII 碼印出字元。i=0~9 對應 ASCII 0~9 是不可見控制字元(NUL、SOH...),不會印出數字「0」~「9」,與其他選項不同。
載入中…
完整詳解
Pro · 無限重點 %c 印的是 ASCII 字元,直接傳 0~9 會印出控制字元;其他三個都會印出數字 0~9。
看到 %c 就想 ASCII!數字 0 的 ASCII 是 48,要印數字必須 +'0'。
逐選項分析
A✕
%d 以十進位整數印出 i 的值,若 i=5 就印出「5」,符合直覺。
B✓ 正確
%c 會把 i 當成 ASCII 碼印出字元。i=0~9 對應 ASCII 0~9 是不可見控制字元(NUL、SOH...),不會印出數字「0」~「9」,與其他選項不同。
C✕ 陷阱
i+'0' 把數值加上字元 '0'(ASCII 48),變成數字字元的 ASCII 碼。再用 %c 印出就會顯示「0」~「9」,這是 C 常用技巧。
D✕
%1.0f 表示最少寬度 1、小數 0 位的浮點數,將 i 轉 float 後印出,結果就是「0」~「9」無小數點。
ASCII 與數字字元對照
| 寫法 | i=5 印出 | 原理 | 備註 |
|---|
| %d, i | 5 | 整數十進位 | 最直接 |
| %c, i | (控制字元) | ASCII 5 = ENQ | ⚠️ 陷阱 |
| %c, i+'0' | 5 | ASCII 53 = '5' | +48 轉字元 |
| %1.0f, (float)i | 5 | 浮點無小數 | 寬度 1 位 |
考生容易以為 %c 印整數 5 就會顯示「5」,但 %c 是用 ASCII 表對照。ASCII 0~9 是控制字元(非可見),必須 +'0'(+48)才會跳到可印字元區的「0」~「9」。這是 C 入門最常見陷阱。