② コード読み取り 6問
頭の中で実行 してから選択肢をクリック。間違えても解説を読めば必ず腑に落ちます。
Q1. 整数同士の割り算
printf("%d\n", 17 / 5);
出力は?
3.4
3
4(四捨五入)
3.400000
解説: 整数 ÷ 整数 は 整数。小数点以下は 切り捨て される。
17 / 5 は数学的には 3.4 だが、C言語では 3 になる(四捨五入ではない)。
小数点以下が欲しければ、片方を実数にする:17.0 / 5 または (double)17 / 5。
Q2. キャストで実数除算
int a = 17, b = 5;
printf("%f\n", (double)a / b);
出力は?
3.000000
3.400000
3
コンパイルエラー
解説: (double)a で a が 17.0 として扱われ、続く割り算は実数除算に。
17.0 / 5 = 3.4、%f なので 3.400000 と表示される。
キャストの優先順位は通常の演算子より高いので、(double)a / b は ((double)a) / b の意味。
Q3. あまり (%) を使った判定
int n = 17;
printf("%d %d\n", n / 5, n % 5);
出力は?
3 2
3.4 0
3 5
2 3
解説: n / 5 は商(整数)で 3。n % 5 は余りで 2。
17 = 5 × 3 + 2 という関係。% は「割り切れるかどうかの判定」によく使われる(偶数判定 n % 2 == 0 など)。
Q4. 短縮代入
int a = 10;
a += 5;
a *= 2;
printf("%d\n", a);
出力は?
25
30
20
15
解説: 上から順に追う。
① a = 10
② a += 5 → a = a + 5 = 15
③ a *= 2 → a = a * 2 = 30
∴ 30
Q5. 後置インクリメント
int x = 5;
int y = x++;
printf("x=%d y=%d\n", x, y);
出力は?
x=5 y=6
x=6 y=5
x=6 y=6
x=5 y=5
解説: x++ は 後置(後で増やす)。
① y = x++ → 先に y に x の値(5)を入れて、その後 x を 1 増やす
② y = 5、x = 6 になる
前置 ++x なら先に x を増やすので y も 6 になる。
Q6. 演算子の優先順位
printf("%d\n", 2 + 3 * 4);
出力は?
20
14
9
24
解説: * は + より 優先順位が高い(数学と同じ)。
① 3 * 4 = 12
② 2 + 12 = 14
20 にしたければ (2 + 3) * 4 とカッコで囲む。