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言語の基礎の参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

C言語の基礎のほかの問題

  1. 前置と後置の ++ を使った上のコードを実行したときの出力として、正しいものはどれか。
  2. if 文の条件に = を書いた上のコードを実行したときの出力として、正しいものはどれか。
  3. レジスタの値 reg のビット2が1かどうかを調べるつもりで、上のコードを書いた。実行したときの結果として、正しいものはどれか。
  4. uint8_t は8ビットの符号なし整数型である。上のコードを実行したときの出力として、正しいものはどれか。
  5. uint8_t は8ビットの符号なし整数型である。x を10回増やす上のコードを実行したときの出力として、正しいものはどれか。