条件分岐の基礎: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;
}