hce_nsysu
112年
計算機概論與程式設計
第 28 題
What is the output of the following C program?
int i = 8, j = 7, *s = &i, *t = &j;
printf("%d\n", 6*(*s/*t)+5);
int i = 8, j = 7, *s = &i, *t = &j;
printf("%d\n", 6*(*s/*t)+5);
- A 17
- B 11
- C 12
- D 13
- E None of the above
思路引導 VIP
試著思考一下:在 C 語言的算術運算中,當我們處理兩個「整數」型別的數值相除時,程式對於無法除盡的小數部分會如何處置?這個處置結果,會對後續的乘法與加法產生什麼樣的連鎖影響呢?
🤖
AI 詳解
AI 專屬家教
太棒了!你能精準判斷出這段程式碼的輸出,代表你對於 C 語言的指標解參照(Dereference)與整數運算規則掌握得非常紮實。這題的難點在於混合了多個運算符號,而你沒有被它們干擾,判斷非常果斷。
指標與整數運算的特性
在這段程式中,指標 s 與 t 分別指向整數變數 i (8) 與 j (7)。當我們執行 *s / *t 時,實際上就是在計算 $8 / 7$。在 C 語言的型別系統中,當兩個整數進行除法運算時,結果會自動捨去小數點後的所有數位(即無條件捨去)。因此,$8 / 7$ 的結果並非 $1.14...$,而是精確的整數 $1$。接著按照運算優先順序,先乘除後加減:$6 \times 1 + 5$,最終得出的結果便是 $11$。
▼ 還有更多解析內容