C++条件分岐とループ制御の基本概念

条件分岐の基礎:if文

C++におけるif文は、指定された条件式の評価結果に基づき、プログラムの実行フローを制御するための構文です。条件式が真(true)と評価された場合、対応するコードブロックが実行されます。

if (条件式) {
    // 条件式が真の場合に実行される処理
}

基本的な使用例

#include <iostream>
using namespace std;

int main() {
    int score = 85;
    if (score >= 60) {
        cout << "合格です" << endl;
    }
    return 0;
}

多分岐条件:if-else-if構造

複数の条件を順次評価する必要がある場合、else if節を用いて連鎖的な条件分岐を実現できます。

if (条件A) {
    // 条件Aが真の場合
} else if (条件B) {
    // 条件Aが偽で条件Bが真の場合
} else if (条件C) {
    // 条件A,Bが偽で条件Cが真の場合
} else {
    // 全ての条件が偽の場合
}

実装例:成績評価システム

#include <iostream>
using namespace std;

int main() {
    int point;
    cout << "得点を入力してください: ";
    cin >> point;
    
    if (point >= 90) {
        cout << "評価: A" << endl;
    } else if (point >= 80) {
        cout << "評価: B" << endl;
    } else if (point >= 70) {
        cout << "評価: C" << endl;
    } else if (point >= 60) {
        cout << "評価: D" << endl;
    } else {
        cout << "評価: F" << endl;
    }
    return 0;
}

多値分岐:switch文

ある式の値に応じて複数の実行パスから選択する場合、switch文が適しています。各caseラベルで特定の値と比較し、一致する場合の処理を記述します。

switch (式) {
    case 値1:
        // 式 == 値1 の場合の処理
        break;
    case 値2:
        // 式 == 値2 の場合の処理
        break;
    default:
        // どの値にも一致しない場合の処理
}

注意点

break文を省略すると、次のcase節の処理も続けて実行される(フォールスルー)ため、意図しない動作を招く可能性があります。

#include <iostream>
using namespace std;

int main() {
    int menuChoice;
    cout << "メニュー番号を選択 (1-3): ";
    cin >> menuChoice;
    
    switch (menuChoice) {
        case 1:
            cout << "新規作成を開始します" << endl;
            break;
        case 2:
            cout << "ファイルを開きます" << endl;
            break;
        case 3:
            cout << "設定画面を表示します" << endl;
            break;
        default:
            cout << "無効な選択です" << endl;
    }
    return 0;
}

列挙型の定義と利用

列挙型(enum)は、関連する定数値をまとめて定義するためのデータ型です。コードの可読性向上に寄与します。

enum 曜日 {
    月曜日,
    火曜日,
    水曜日,
    木曜日,
    金曜日,
    土曜日,
    日曜日
};

// 値の明示的指定も可能
enum 状態コード {
    正常終了 = 0,
    入力エラー = 101,
    計算エラー = 201
};

列挙型の実践的使用

#include <iostream>
using namespace std;

enum 交通信号 {
    赤,
    黄,
    青
};

int main() {
    交通信号 現在の信号 = 青;
    
    switch (現在の信号) {
        case 赤:
            cout << "停止してください" << endl;
            break;
        case 黄:
            cout << "注意して進行してください" << endl;
            break;
        case 青:
            cout << "安全に進行できます" << endl;
            break;
    }
    return 0;
}

反復処理:ループ構造

whileループ

指定された条件が真である限り、コードブロックを繰り返し実行します。

while (継続条件) {
    // 繰り返し実行される処理
}

forループ

カウンタ変数の初期化、継続条件、更新処理を1行にまとめた反復構造です。

for (初期化式; 継続条件; 更新式) {
    // 繰り返し実行される処理
}

九九表の出力例

#include <iostream>
#include <iomanip>
using namespace std;

int main() {
    for (int row = 1; row <= 9; ++row) {
        for (int col = 1; col <= row; ++col) {
            cout << col << "×" << row << "=" 
                 << setw(2) << row * col << "  ";
        }
        cout << endl;
    }
    return 0;
}

ループ制御:breakとcontinue

ループ内での特殊な制御フローを実現するための文です。

  • break: ループ全体を即座に終了
  • continue: 現在の反復のみをスキップ
#include <iostream>
using namespace std;

int main() {
    // breakの使用例
    cout << "break文のデモ:" << endl;
    for (int cnt = 1; cnt <= 10; ++cnt) {
        if (cnt == 5) {
            cout << "cntが5に達したためループを終了" << endl;
            break;
        }
        cout << "カウント: " << cnt << endl;
    }
    
    // continueの使用例
    cout << "\ncontinue文のデモ:" << endl;
    for (int num = 1; num <= 10; ++num) {
        if (num % 2 == 0) {
            continue; // 偶数の場合は出力をスキップ
        }
        cout << "奇数: " << num << endl;
    }
    
    return 0;
}

スコープの概念

変数の有効範囲を定義するスコープには、以下の主要な種類があります。

スコープ種別説明
局所スコープ 関数またはブロック内で宣言された変数 void func() { int localVar = 10; }
グローバルスコープ 関数外部で宣言され、プログラム全体で参照可能 int globalData = 100;
名前空間スコープ 名前空間内で宣言された変数 namespace NS { int value = 5; }
クラススコープ クラス内で宣言されたメンバ変数 class Sample { static int count; };

スコープの実例

#include <iostream>
using namespace std;

int 外部変数 = 50; // グローバルスコープ

void スコープデモ関数() {
    int 関数内変数 = 20; // 関数スコープ
    
    {
        int ブロック内変数 = 30; // ブロックスコープ
        cout << "ブロック内: " << ブロック内変数 << endl;
        // 外部変数、関数内変数、ブロック内変数全てにアクセス可能
    }
    
    // ブロック内変数はここでは参照不可
    cout << "関数内: " << 関数内変数 << endl;
}

int main() {
    スコープデモ関数();
    cout << "メイン関数: " << 外部変数 << endl;
    return 0;
}

タグ: C++ 条件分岐 ループ制御 switch文 列挙型

5月18日 21:08 投稿