第9回 確認問題(算術)
C言語の算術演算子の理解度を確認するクイズ。
🎬
この講座を動画で見る(約7分)
注目ポイント解説 + 音声ナレーション
確認問題1 ― int同士の除算
以下のコードの出力を予測してください。
int a = 7, b = 5;
printf("a / b = %d\n", a / b);
出力結果は?
a / b = 1.4
a / b = 1
a / b = 2
a / b = 1.400000
解説: int / int の結果はintになります(整数の除算)。
7 ÷ 5 = 1.4 ですが、小数点以下は切り捨てられて 1 になります。
整数同士の割り算は切り捨てを常に意識しましょう。
確認問題2 ― int と double を混ぜる
int a = 7;
double b = 5.0;
printf("a / b = %f\n", a / b);
出力結果は?
a / b = 1.400000
a / b = 1.000000
a / b = 1
解説: int と double を混ぜた計算では、intが自動的にdoubleに昇格します(暗黙の型変換)。
7.0 ÷ 5.0 = 1.4 → %f で 1.400000 と表示。
片方がdoubleなら結果もdoubleです。
確認問題3 ― (double)キャスト
int a = 7, b = 5;
printf("a / b = %f\n", (double)a / b);
出力結果は?
エラー
a / b = 1.000000
a / b = 1.400000
解説: (double)a で aをdoubleに明示的にキャストすると、double ÷ int となり、bも自動的にdoubleに昇格します。
7.0 ÷ 5.0 = 1.4 → 1.400000。
int変数同士でも、一方をキャストすれば小数計算ができます。
確認問題4 ― 剰余演算子(%)
int a = 17, b = 5;
printf("%d / %d = %d あまり %d\n", a, b, a/b, a%b);
出力結果は?
17 / 5 = 3 あまり 2
17 / 5 = 3.4 あまり 0
17 / 5 = 2 あまり 3
解説: a / b = 17 ÷ 5 = 3(切り捨て)/ a % b = 17 ÷ 5 の余り = 2。
%は余りを求める演算子で、int型のみに使えます。double型には使えません。
偶数/奇数判定や桁取り出しでよく使います(例: n%2==0 → 偶数)。
確認問題5 ― 演算子の優先順位
数学と同じく、* と / は + と - より先に計算されます。
int a = 2 + 3 * 4;
printf("a = %d\n", a);
出力結果は?
a = 20
a = 14
a = 24
a = 9
解説: 数学と同じで、C言語でも * / % は + - より優先順位が高い。
① 3 * 4 = 12 を先に計算
② 2 + 12 = 14
左から右に読むのではなく、優先順位の高い演算から先に行われます。
確認問題6 ― 括弧で計算順序を変える
括弧を使うと、中の計算が優先されます。
int a = (2 + 3) * 4;
printf("a = %d\n", a);
出力結果は?
a = 14
a = 24
a = 20
a = 5
解説: ( ) 内の計算が最優先。
① (2 + 3) = 5
② 5 * 4 = 20
優先順位に迷ったら括弧を明示的につけるのがおすすめ。可読性も上がります。
確認問題7 ― double に % を使うと?
剰余演算子 % はどんな型にでも使える?
double a = 7.0, b = 2.0;
printf("%f\n", a % b);
何が起こる?
1.000000 と表示される
コンパイルエラー
0.000000 と表示される
3.500000 と表示される
解説: % 演算子は整数型にしか使えません。double型に対して使うとコンパイルエラーになります。
浮動小数点の剰余が欲しい場合は、#include <math.h> の fmod(a, b) を使います。
確認問題8 ― 負の数の除算
負の数を int で割るとどうなる?
int a = -7, b = 2;
printf("%d\n", a / b);
出力結果は?
-3
-4
-3.5
3
解説: C99以降、整数の除算は「0 に近い方向」に切り捨てられます(truncation toward zero)。
-7 / 2 の数学的な結果は -3.5。0 に近い方向に切り捨てるので -3 になります(-4 ではない)。
剰余も一致するように決まっていて、-7 % 2 = -1 です(a = (a/b)*b + a%b が成り立つ)。
確認問題9 ― キャストする位置の違い
キャストを「どこに」書くかで結果が変わります。
int a = 7, b = 2;
printf("%f\n", (double)(a / b));
出力結果は?
3.500000
3.000000
3
コンパイルエラー
解説: キャストの位置が重要。
① 括弧の中 a / b が先に計算される(int 同士 → 7/2 = 3、切り捨て)
② その結果 3 を (double) でキャスト → 3.0
③ %f で表示 → 3.000000
正しく小数で割るには、割り算の前にキャスト: (double)a / b。割り算の時点で一方が double なら結果も double になります。
この講座の理解を深めるおすすめ書籍
サイトで動きを理解し、書籍で演習量を補うと効果的です
📘
苦しんで覚えるC言語
MMGames 著
初心者向けの定番入門書。丁寧な解説で基礎を固められます。
Amazonで見る
📗
新・明解C言語 入門編
柴田望洋 著
図解が豊富で、演習問題も充実。大学の教科書としても採用多数。
Amazonで見る
📙
プログラミング言語C 第2版
B.W.カーニハン, D.M.リッチー 著
通称K&R。C言語の原典。基礎を終えた後のステップアップに最適。
Amazonで見る
※ 上記リンクはアフィリエイトリンクです。購入によりサイト運営を支援いただけます。