農會 資訊管理類程式設計110 年第 49 題單選題
以下為C語言程式片段,請問輸出為何?
#include <stdio.h>
int main()
{
float a=2.667;
printf("%5.2f", a);
return 0;
}
A2.667
B2.67正確答案
C02.67
D02.667
B正確答案
printf 的 %m.nf 格式中,m 為總寬度(不足預設補空白),n 為小數位數(會四捨五入)。
為什麼答案是 B
小數點後兩位四捨五入為 2.67,總長 4 格不足 5 格,左側補 1 個空白(選項文字省略顯示空白)。
考點:格式錯誤考點:正確輸出考點:補零陷阱考點:雙重錯誤
載入中…
完整詳解
Pro · 無限重點 printf 的 %m.nf 格式中,m 為總寬度(不足預設補空白),n 為小數位數(會四捨五入)。
看到 %5.2f,先抓 .2 決定四捨五入到小數第二位得 2.67;再看 5 決定總寬度,不足 5 格左邊補空白,絕對不會補 0!
逐選項分析
A格式錯誤✕
沒有進行小數點後位數的限制與四捨五入,且未考慮總寬度設定,直接輸出原數值。
B正確輸出✓ 正確
小數點後兩位四捨五入為 2.67,總長 4 格不足 5 格,左側補 1 個空白(選項文字省略顯示空白)。
C補零陷阱✕ 陷阱
誤以為寬度不足時會自動補 0。若要補 0 必須明確寫成 %05.2f,此為考試最常見陷阱。
D雙重錯誤✕
同時犯了未四捨五入與誤補 0 的雙重錯誤,完全無視格式控制字元的真實作用。
printf 浮點數格式化 (%m.nf) 解析
| 符號 | 意義 | 本題應用 |
|---|
| % | 格式指示字元起頭 | % |
| 5 | 總輸出寬度(含小數點) | 2.67佔4格,左補1空白 |
| .2 | 小數點後保留位數 | 第三位7四捨五入進位 |
| f | 浮點數型態 | 對應 float a |
考生常將「寬度不足補空白」與「補零(需加0,如%05.2f)」搞混。請記住:C語言預設情況下,m.nf 寬度不足時是補空白(Space)而非補零(Zero)!