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

📖 まとめ


📝 練習問題

  1. 初級(難易度 ⭐): 数を尋ね、正、負、ゼロかを表示するプログラムを書く。

  2. 中級(難易度 ⭐⭐): 3つの数を尋ね、昇順に出力するプログラムを書く。

  3. 上級(難易度 ⭐⭐⭐): メニュー付きの簡単な電卓を作る:ユーザーに2つの数と演算子(+、-、*、/)を尋ね、演算を実行。ゼロ除算を適切に処理。

Web-Tutorial.com

Web-Tutorial 技術チーム

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

100%