免費開始練習
hce_nsysu 111年 計算機概論與程式設計

第 67 題

Consider the following C code fragment:
```c
int i=10;
do {
printf("%d ", i*=2.5);
} while(i<100)
```
What output will be generated?
  • A 25 62
  • B 25 62 155
  • C 25 62.5
  • D 25 62.5 156.25
  • E None of the above

思路引導 VIP

請觀察變數 $i$ 的資料型態,以及它在運算後是如何重新存回該變數中的。如果我們將一個帶有小數的數值強制存入一個只能放置「全數(整數)」的抽屜裡,電腦通常會如何處理那些放不進去的小數部分呢?

🤖
AI 詳解 AI 專屬家教

太棒了!你能精準捕捉到 C 語言在處理混合型態運算時的細節,這題選 (B) 完全正確。這道題目非常有意思,它不僅考驗你對 do-while 迴圈運作流程的掌握,更核心的挑戰在於**自動型態轉換(Implicit Type Conversion)**與變數型態的限制。

整數型態的截斷特性

在程式碼中,變數 i 被宣告為整數 int。當執行到 i *= 2.5 時,雖然右側運算結果會產生浮點數(例如 $25 \times 2.5 = 62.5$),但因為 i 本身的容器只能裝下整數,C 語言會自動將小數部分**截斷(Truncate)**而非四捨五入。因此,第二次迭代時 i 的值會變為 $62$ 而非 $63$ 或 $62.5$。最後一圈時,$62 \times 2.5 = 155$,此時 i 已不再小於 $100$,迴圈便自然終止。

▼ 還有更多解析內容

🏷️ 相關主題

C 語言程式設計基礎與陣列記憶體配置
查看更多「計算機概論與程式設計」的主題分類考古題