C++: 条件分岐
最終更新:2026-08-31
データを格納し演算子を使えるようになったら、次はプログラムに意思決定をさせる。条件分岐を使えば、コードは状況に応じて異なる応答ができる。
1. if文
if文は、条件がtrueのときだけコードブロックを実行する。
TEXT
📖 参照専用
if (score >= 60) {
std::cout << "合格!" << std::endl;
}
💡 ヒント: 条件は括弧内に入れる必要がある。コードブロックは波括弧
{}を使う。
▶ サンプル 1:偶数・奇数判定(難易度 ⭐)
CPP
#include <iostream>
int main() {
int num;
std::cout << "数を入力: ";
std::cin >> num;
if (num % 2 == 0) {
std::cout << num << "は偶数です。" << std::endl;
}
if (num % 2 != 0) {
std::cout << num << "は奇数です。" << std::endl;
}
return 0;
}
2. if-else
2つの相互排他的なケースがある場合:
TEXT
📖 参照専用
if (score >= 60) {
std::cout << "合格!" << std::endl;
} else {
std::cout << "不合格。" << std::endl;
}
💡 ヒント: 2つの分岐のうち必ず1つだけが実行される——両方もなしもない。
▶ サンプル 2:改良版偶数・奇数判定(難易度 ⭐)
CPP
#include <iostream>
int main() {
int num;
std::cout << "数を入力: ";
std::cin >> num;
if (num % 2 == 0) {
std::cout << num << "は偶数です。" << std::endl;
} else {
std::cout << num << "は奇数です。" << std::endl;
}
return 0;
}
3. if-else if-elseチェーン
複数の条件がある場合:
TEXT
📖 参照専用
if (score >= 90) {
grade = 'A';
} else if (score >= 80) {
grade = 'B';
} else if (score >= 70) {
grade = 'C';
} else if (score >= 60) {
grade = 'D';
} else {
grade = 'F';
}
⚠️ 注意: 順序が重要!条件は上から下へチェックされる。最初に
trueになった条件が勝つ。
4. switch-case
1つの変数を多くの特定の値と比較する場合:
CPP
switch (day) {
case 1:
std::cout << "月曜日";
break;
case 2:
std::cout << "火曜日";
break;
// ... その他のケース ...
default:
std::cout << "無効な曜日";
}
💡 ヒント: 各ケースの最後に
break;を忘れない——ないと、次のケースにフォールスルーする。defaultは他のケースに一致しない値を処理。
▶ サンプル 3:switch-caseで成績分類(難易度 ⭐⭐)
CPP
#include <iostream>
int main() {
char grade;
std::cout << "成績を入力 (A-F): ";
std::cin >> grade;
switch (grade) {
case 'A':
std::cout << "素晴らしい!" << std::endl;
break;
case 'B':
std::cout << "よくできました!" << std::endl;
break;
case 'C':
std::cout << "普通です。" << std::endl;
break;
case 'D':
std::cout << "平均以下。" << std::endl;
break;
case 'F':
std::cout << "不合格。" << std::endl;
break;
default:
std::cout << "無効な成績。" << std::endl;
}
return 0;
}
5. 条件(三項)演算子
単純なif-elseの省略形:
CPP
// 通常の書き方:
int max;
if (a > b) max = a;
else max = b;
// 三項演算子:
int max = (a > b) ? a : b;
💡 ヒント: 三項演算子は単純な条件に便利。複雑なロジックには、読みやすさのためif-elseを使おう。
6. よくある間違い
(1) 6.1 == の代わりに = を使う
TEXT
📖 参照専用
if (x = 5) { // ❌ xが5になり、条件は常にtrue
防御テクニック: 定数を左に置く:
CPP
if (5 == x) { // ✅ 間違って5 = xと書けば、コンパイラがエラーを出す
(2) 6.2 波括弧の忘れ
波括弧がないと、if/elseに属するのは最初の文だけ:
TEXT
📖 参照専用
if (score >= 60)
std::cout << "合格!" << std::endl;
std::cout << "素晴らしい!" << std::endl; // ❌ これは関係なく実行される
常に波括弧を使おう、1行ブロックでも。バグを防げる。
▶ サンプル 4:最大値を探す(難易度 ⭐)
CPP
#include <iostream>
int main() {
int a, b, c;
std::cout << "3つの数を入力: ";
std::cin >> a >> b >> c;
int max = a;
if (b > max) max = b;
if (c > max) max = c;
std::cout << "最大値: " << max << std::endl;
return 0;
}
❓ よくある質問
Q なぜ
if (x = 5)はコンパイルエラーにならない?A C++では、代入
x = 5は代入値5を返す。非ゼロ値は真なので、条件は常にtrue。if (5 == x)と書けば、コンパイル時にこの間違いを検出できる。Q
if (5)と直接書ける?A できる。C++では、0は偽、非ゼロ値は真。しかし
if (5)は不明確——読みやすさのためブール式を使おう。Q switch-caseで浮動小数点数を扱える?
A いいえ。
switchは整数型(int、char、enum)のみ機能。浮動小数点条件にはif-elseを使う。Q なぜif-elseチェーンがいつも最初の分岐を実行する?
A 条件を注意深く確認。どのコードパスが実際に実行されているか追跡するには、各分岐にデバッグ出力を追加。
📖 まとめ
ifは条件がtrueのときコードを実行if-elseは2つの分岐を持ち、必ず1つが実行されるif-else if-elseチェーンは複数の条件を処理switch-caseは単一変数の複数値チェックを処理- 三項演算子
? :は単純なif-elseの省略形 - 常に波括弧を使い、
=と==に注意
📝 練習問題
-
初級(難易度 ⭐): 数を尋ね、正、負、ゼロかを表示するプログラムを書く。
-
中級(難易度 ⭐⭐): 3つの数を尋ね、昇順に出力するプログラムを書く。
-
上級(難易度 ⭐⭐⭐): メニュー付きの簡単な電卓を作る:ユーザーに2つの数と演算子(+、-、*、/)を尋ね、演算を実行。ゼロ除算を適切に処理。