404 Not Found

404 Not Found


nginx

条件文

データの保存方法や演算子の使い方を学んだところで、次はプログラムに判断をさせましょう。条件分岐を使えば、状況に応じてコードの動作を変えることができます。


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 条件を注意深く確認してください。各分岐にデバッグ出力を行って、実際にどのコードパスが実行されているかを追跡してみてください。

📖 まとめ


📝 練習問題

  1. 初心者(難易度 ⭐): 数値の入力を求め、それが正、負、またはゼロのいずれであるかを出力するプログラムを作成してください。

  2. 中級(難易度 ⭐⭐): 3つの数値を入力してもらい、それらを昇順で出力するプログラムを作成してください。

  3. 上級(難易度 ⭐⭐⭐): メニュー付きの簡単な電卓を作成してください。ユーザーから2つの数値と演算子(+, -, *, /)を入力してもらい、演算を実行します。ゼロ除算については適切に処理してください。

Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%