C語言基礎

int a = 7, b = 2;
double x = a / b;
double y = (double)a / b;
printf("%.1f %.1f\n", x, y);

執行上方含有整數除法的程式碼時的輸出,下列何者正確?

  1. A3.0 3.0
  2. B3.0 3.5
  3. C3.5 3.5
查看答案與解析

正確答案:B. 3.0 3.5

a / b 是 int 之間的除法,因此是整數除法,捨去小數部分而得到3。即使把這個3放入 double 的 x,也只會變成 3.0,被捨去的0.5不會回來。y 則是先把 a 轉換為 double(強制轉型),因此 b 也被轉換為 double,進行實數除法,得到 3.5。計算方式不是由指派目標的型別決定,而是由參與運算之值的型別決定。

  • A. y 是先把 a 轉換為 double 再除,因此以實數除法得到3.5。
  • B. 正確。x 是由整數除法結果3轉換而來的3.0,y 是實數除法的3.5。
  • C. x 是在 int 之間的除法中變成3之後才轉換為 double,因此不會是3.5。
練習這個領域 前往領域頁面

C語言基礎的其他題目

  1. 執行上方使用前置與後置 ++ 的程式碼時的輸出,下列何者正確?
  2. 執行上方在 if 敘述的條件中寫了 = 的程式碼時的輸出,下列何者正確?
  3. 為了檢查暫存器值 reg 的位元2是否為1,寫了上方的程式碼。執行時的結果,下列何者正確?
  4. uint8_t 是8位元的無號整數型別。執行上方程式碼時的輸出,下列何者正確?
  5. uint8_t 是8位元的無號整數型別。執行上方讓 x 遞增10次的程式碼時的輸出,下列何者正確?