条件文
データの保存方法や演算子の使い方を学んだところで、次はプログラムに判断をさせましょう。条件分岐を使えば、状況に応じてコードの動作を変えることができます。
1. if文
if ステートメントは、条件が true の場合にのみ、コードブロックを実行します。
CPP
if (score >= 60) {
std::cout << "You passed!" << std::endl;
}
💡 ヒント: 条件は括弧内に記述する必要があります。このコードブロックでは中括弧
{} が使用されています。
(1) ▶ サンプル:1:偶数か奇数かを判定する(難易度 ⭐)
CPP
#include iostream
int main() {
int num;
std::cout << "Enter a number: ";
std::cin >> num;
if (num % 2 == 0) {
std::cout << num << " is even." << std::endl;
}
if (num % 2 != 0) {
std::cout << num << " is odd." << std::endl;
}
return 0;
}
2. if-else
互いに排他的な2つのケースがある場合:
CPP
if (score >= 60) {
std::cout << "Passed!" << std::endl;
} else {
std::cout << "Failed." << std::endl;
}
💡 ヒント: 2つの分岐のうち、必ずどちらか一方だけが実行されます。両方が実行されることも、どちらも実行されないこともありません。
(1) ▶ サンプル:2:改良版 偶数・奇数チェッカー(難易度 ⭐)
CPP
#include iostream
int main() {
int num;
std::cout << "Enter a number: ";
std::cin >> num;
if (num % 2 == 0) {
std::cout << num << " is even." << std::endl;
} else {
std::cout << num << " is odd." << std::endl;
}
return 0;
}
3. if-else if-else の連鎖
複数の条件の場合:
CPP
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 << "Monday";
break;
case 2:
std::cout << "Tuesday";
break;
// ... more cases ...
default:
std::cout << "Invalid day";
}
💡 ヒント: 各ケースの最後に
break; を付けるのを忘れないでください。これを付けないと、実行は次のケースへと進んでしまいます。default は、他のケースに一致しないすべての値を処理します。
▶ サンプル 3: switch-case を使った成績分類 (難易度 ⭐⭐)
CPP
#include iostream
int main() {
char grade;
std::cout << "Enter grade (A-F): ";
std::cin >> grade;
switch (grade) {
case 'A':
std::cout << "Excellent!" << std::endl;
break;
case 'B':
std::cout << "Good job!" << std::endl;
break;
case 'C':
std::cout << "Average." << std::endl;
break;
case 'D':
std::cout << "Below average." << std::endl;
break;
case 'F':
std::cout << "Failed." << std::endl;
break;
default:
std::cout << "Invalid grade." << std::endl;
}
return 0;
}
5. 条件(三項)演算子
単純なif-else文の省略形:
CPP
// Instead of:
int max;
if (a > b) max = a;
else max = b;
// Write:
int max = (a > b) ? a : b;
💡 ヒント: 三項演算子は単純な条件判定に便利です。複雑なロジックの場合は、可読性を高めるために if-else 構文を使いましょう。
6. よくある落とし穴
(1) 6.1 == の代わりに = を使う
CPP
if (x = 5) { // ❌ x becomes 5, condition is always true
解法: 定数を左側に移動させる:
CPP
if (5 == x) { // ✅ If you accidentally write 5 = x, the compiler will error
(2) 6.2 中括弧の書き忘れ
中括弧がない場合、if/else文に属するのは最初の文のみです:
CPP
if (score >= 60)
std::cout << "Passed!" << std::endl;
std::cout << "Great!" << std::endl; // ❌ This runs REGARDLESS
必ず中括弧を使用してください。1行だけのブロックであっても同様です。これによりバグを防ぐことができます。
(3) ▶ サンプル:4:最大値を求める(難易度 ⭐)
CPP
#include iostream
int main() {
int a, b, c;
std::cout << "Enter three numbers: ";
std::cin >> a >> b >> c;
int max = a;
if (b > max) max = b;
if (c > max) max = c;
std::cout << "The maximum is: " << max << std::endl;
return 0;
}
❓ よくある質問
Q なぜ
if (x = 5) ではコンパイルエラーが発生しないのですか?A C++ では、代入式
x = 5 は値 5(代入された値)を返します。ゼロ以外の値は真とみなされるため、この条件は常に真となります。コンパイル時にこの間違いを検出するには、if (5 == x) と記述してください。Q
if (5) とだけ記述してもいいですか?A はい。C++ では、0 は false、0 以外の値はすべて true となります。ただし、
if (5) と記述するのは意味が不明確です。可読性を高めるために、ブール式を使用してください。Q switch-case 文は浮動小数点数を扱えますか?
A いいえ。
switch は整数型(int、char、enum)でのみ動作します。浮動小数点数の条件分岐には、if-else を使用してください。Q なぜif-elseの連鎖では、いつも最初の分岐が実行されてしまうのでしょうか?
A 条件を注意深く確認してください。各分岐にデバッグ出力を行って、実際にどのコードパスが実行されているかを追跡してみてください。
📖 まとめ
ifは、条件が真のときにコードを実行しますif-elseには 2 つのブランチがあり、そのうち 1 つだけが実行されるif-else if-elseチェーンは複数の条件を処理しますswitch-caseは、単一変数の複数値チェックに対応しています- 三項演算子
? :は、単純な if-else の省略形です。 - 必ず中括弧を使用し、
=と==の違いに注意してください
📝 練習問題
-
初心者(難易度 ⭐): 数値の入力を求め、それが正、負、またはゼロのいずれであるかを出力するプログラムを作成してください。
-
中級(難易度 ⭐⭐): 3つの数値を入力してもらい、それらを昇順で出力するプログラムを作成してください。
-
上級(難易度 ⭐⭐⭐): メニュー付きの簡単な電卓を作成してください。ユーザーから2つの数値と演算子(+, -, *, /)を入力してもらい、演算を実行します。ゼロ除算については適切に処理してください。



