三大基本制御構造 技術資料

― 順次・選択・反復を理解し、読みやすいコードを書くために ―


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回

C#,条件式,繰り返し

Posted by hidepon