三大基本制御構造 技術資料
目次
― 順次・選択・反復を理解し、読みやすいコードを書くために ―
1. はじめに
構造化プログラミングでは、順次(Sequence)・選択/条件分岐(Selection)・反復/繰り返し(Iteration)の 3 つだけであらゆるアルゴリズムを表現できるとされます。
本資料では C# を題材に、各制御構造の役割・典型的な書式・学習時の注意点を体系立ててまとめます。初学者への授業資料やリファレンスとしてご活用ください。
2. 三大基本制御構造とは
制御構造 | 目的 | 主な C# 文 |
---|---|---|
順次 | 上から下へ命令を一行ずつ実行 | 代入文 / メソッド呼び出し など |
選択(条件分岐) | 条件に応じて実行経路を切り替える | if … else, switch … case |
反復(繰り返し) | 条件成立中、またはコレクション要素ごとに処理を繰り返す | for, while, do … while, foreach |
3. 各制御構造の詳細
3-1. 順次 — Sequence
- 定義: プログラムの最も基本的な流れ。一文実行後に次の文へ移る。
- 特徴: 可読性が高く、デバッグもしやすい。
int score = 80; // 1. 変数の宣言と代入
score += 5; // 2. 加算
Console.WriteLine(score); // 3. 出力
- ポイント:
- 方法を分けたいときはメソッドに切り出し、“順次”の粒度を小さくすると読みやすい。
- ; の付け忘れはコンパイルエラーの定番。
3-2. 選択 — Selection
3-2-A. if … else
基本形
if (temperature >= 37.5)
{
Console.WriteLine("発熱があります");
}
else
{
Console.WriteLine("平熱です");
}
- 複数条件: else if を使う。
- スコープ: 波かっこ {} を省くとバグを生みやすいので原則省略しない。
3-2-B. switch … case
switch (command)
{
case "attack":
DoAttack();
break;
case "defend":
DoDefend();
break;
default:
ShowHelp();
break;
}
- C# 8 以降は switch 式 が使え、式として値を返せる。
- fall-through(break を忘れて次の case へ流れる)に注意。
3-3. 反復 — Iteration
ループ文 | 典型場面 | 停止条件 | 備考 |
---|---|---|---|
for | 回数が決まっている | カウンタ | インデックス付き処理に便利 |
while | 条件が変動 | 条件式 | 先頭で判定 |
do … while | 最低1回実行 | 条件式 (末尾) | 入力検証など |
foreach | コレクション要素ごと | なし(列挙子) | 破壊的操作は不可 |
for (int i = 0; i < 10; i++)
{
Console.WriteLine($"カウント: {i}");
}
- 制御文: break(直近ループから脱出)・continue(次の反復へスキップ)
- 無限ループ: 条件を書き間違えると while (true) 相当になり CPU を占有するため注意。
4. 制御構造を組み合わせたサンプル
課題: ユーザーが 0 ~ 100 の点数を入力 → 合否判定(60 点以上合格)を 3 回まで繰り返し表示する。
for (int trial = 1; trial <= 3; trial++) // 反復
{
Console.Write($"[{trial}/3] 点数を入力してください: ");
int score = int.Parse(Console.ReadLine()); // 順次
if (score >= 60) // 選択
{
Console.WriteLine("合格です\n");
}
else
{
Console.WriteLine("不合格です\n");
}
}
- 組み合わせにより、実践的なロジックを簡潔に表現できる。
5. よくある落とし穴とベストプラクティス
落とし穴 | 予防策 |
---|---|
波かっこ省略で意図しない文が if / ループの外に | 必ず {} を付ける |
switch の break 抜け忘れ | コーディング規約 & レビューで検出 |
ループ回数オーバーによる例外 (IndexOutOfRangeException) | 境界条件をテスト+Length を使う |
早すぎる最適化 (goto, フラグ乱用) | 三大制御構造+メソッド分割で十分表現できる |
6. まとめ
- 三大基本制御構造はプログラミングの「文法」だけでなく、設計思想(構造化プログラミング)そのもの。
- 「まずは順次 → 必要に応じて条件分岐 → 繰り返しを抽象化して再利用」という発想で書くと、バグが減り保守性が向上。
- C# では豊富な言語拡張(LINQ、switch 式、foreach とのジェネリック連携など)により、三大構造を活かしながら記述量を抑えられる。
学習の次のステップ
- メソッド抽出と例外処理(try-catch-finally)
- 関数型の表現(ラムダ式、LINQ Where/Select)
- 非同期制御(async / await)
訪問数 2 回, 今日の訪問数 1回
ディスカッション
コメント一覧
まだ、コメントがありません