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?
```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$,迴圈便自然終止。
▼ 還有更多解析內容