演算子: 計算のルール
割り算の罠と、超重要な「余り」の使い方。
% (剰余)
割り算の余りを求める演算子。
整数除算
整数同士の割り算は小数点以下が切り捨てられる。
短絡評価
左側だけで結果が確定する場合、右側を評価しない仕組み。
詳細解説
整数同士の割り算の罠
初心者が最もハマる罠の一つが「割り算」です。数学では 5 ÷ 2 = 2.5
ですが、C言語の整数同士の計算では 5 / 2 = 2 となります。小数点以下は
切り捨てられます。
2.5という結果が欲しい場合は、5.0 / 2.0
のように、どちらかを実数(浮動小数点数)にする必要があります。
プログラマの友「%(余り)」
%
演算子は、割り算の余りを求めます。これは単なる計算だけでなく、アルゴリズムの基礎になります。
-
n % 2 == 0→ 偶数判定 -
n % 10→ 1の位を取り出す - ループ処理で特定の間隔で処理を実行する
演算子一覧
// 四則演算int a = 10, b = 3;
// 1. 割り算の罠(整数同士=整数)printf("%d\n", a / b); // 3 (3.333...ではない!)printf("%f\n", (double)a / b); // 3.333...
// 2. 余り(剰余)// 偶数判定やループ処理で多用する超重要演算子printf("%d\n", a % b); // 1 (10 ÷ 3 = 3 余り 1)実践テクニック
インクリメントは単独で使う
<code>i++</code> と <code>++i</code> の違いは、式の中で使うと発生します。バグの元なので、単独の行として書くのが安全で確実なスタイルです。
// インクリメント(1増やす)int i = 0;
// 推奨: 単独で使うi++;++i;
// 非推奨: 式の中で使う(副作用の温床)// a = i++ + ++i; // 動作は未定義!絶対ダメ。短絡評価を活用する
<code>&&</code> 演算子の「左がダメなら右は見ない」という性質を利用して、安全なコード、いわゆる「ガード節」のような書き方ができます。
// 論理演算と短絡評価// A && B : Aが偽なら、Bは実行されない!
if (ptr != NULL && *ptr == 10) { // ptrがNULLなら右側は評価されないので安全 // これを逆にするとクラッシュする printf("Safe!\n");}演習課題
課題1: うるう年判定
西暦 year が「4で割り切れる かつ 100で割り切れない(または400で割り切れる)」ときに真となる条件式を書いてください。
解答例を見る
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { printf("Leap year!\n");} 課題2: 時間変換
秒数(例: 3661秒)を入力として、「1時間1分1秒」のように変換する計算式を考えてください。ヒント: / と % を使います。
合格ライン
5 / 2 が 2 になる理由を説明できる
% 演算子を使って偶数判定ができる
インクリメントを単独行で書いている