C言語のきほん|順次・選択・繰り返し構造

プログラムはこの3つでできている!「順次・選択・繰り返し」を押さえると、アルゴリズムが一気に組めるよ。

アルゴリズムを作るとき、実は土台になる“型”が3つあります。
それが 順次選択繰り返し です。これらをまとめて 基本制御構造 と呼びます。

どんなに複雑な処理でも、よく見ると結局は

  • 上から順にやる(順次)
  • 条件で分ける(選択)
  • 同じことを何回もやる(繰り返し)

の組み合わせでできています。ここが理解できると、アルゴリズムが「書けない…」から「組み立てられる!」に変わっていきますよ。

基本制御構造は3つだけ

まずは全体像を表で押さえます。

構造何をする?C言語で対応する代表
順次上から順に実行普通に上から書いた処理
選択条件で分岐if, switch
繰り返し条件や回数で反復while, for, do-while

流れ図(フローチャート)でも、この3つを描ければ、ほとんどの処理が表現できます。

順次構造:上から順に進むだけ

順次構造は、いちばん基本で、すべてのプログラムの土台です。
「入力 → 計算 → 表示」みたいな流れは、だいたい順次構造です。

流れ図っぽいイメージ

シンプルなプログラム例

「歩いた歩数と1歩の距離から合計距離を出す」プログラム例です。

ファイル名:7_4_1.c

#include <stdio.h>

int main(void)
{
    int steps;
    double stride;
    double distance;

    printf("歩数を入力してください > ");
    scanf("%d", &steps);

    printf("1歩の長さ(m)を入力してください > ");
    scanf("%lf", &stride);

    /* 合計距離 = 歩数 × 1歩の長さ */
    distance = steps * stride;

    printf("合計距離は%.2f mです。\n", distance);
    printf("メッセージ: 上から順に実行するのが順次構造だよ。\n");

    return 0;
}

順次構造は「ただ上から順に実行」なので、流れを追いやすいのが特徴です。

選択構造:条件で処理を分ける

選択構造は、「もし〜ならA、そうでなければB」を表現する構造です。
流れ図では判断(ひし形)で Yes / No に分岐する形になります。

流れ図

シンプルなプログラム例

「点数が合格ライン以上か」で分岐するプログラム例です。

ファイル名:7_4_2.c

#include <stdio.h>

int main(void)
{
    int score;

    printf("点数を入力してください > ");
    scanf("%d", &score);

    /* 条件で分岐する */
    if (score >= 60) {
        printf("合格ラインをクリアしました。\n");
    } else {
        printf("あと少し!次はきっと大丈夫。\n");
    }

    printf("メッセージ: 条件で処理を分けるのが選択構造だよ。\n");
    return 0;
}

ここで大事なのは、「条件式が真か偽か」で流れが変わることです。

繰り返し構造:同じ処理を何度も行う

繰り返し構造は、「指定回数」「条件を満たす間」などで処理を繰り返す構造です。
流れ図ではループ端記号を使う場合もありますが、初学者には判断記号で書く形のほうが分かりやすいことが多いです。

流れ図

シンプルなプログラム例

「入力された正の数だけ合計する」シンプルなプログラム例です。

ファイル名:7_4_3.c

#include <stdio.h>

int main(void)
{
    int x;
    int sum = 0;

    printf("正の整数を入力してください(0以下で終了)\n");

    while (1) {
        printf("入力 > ");
        scanf("%d", &x);

        /* 判断:0以下ならループを抜ける */
        if (x <= 0) {
            break;
        }

        /* ここが繰り返される処理 */
        sum += x;
    }

    printf("合計は%dです。\n", sum);
    printf("メッセージ: 条件を満たす間くり返すのが繰り返し構造だよ。\n");
    return 0;
}

この例は「無限ループ+break」で書いていますが、見方としてはこうです。

  • 入力する
  • 正の数なら加算して続ける
  • 0以下なら終了する

まさに流れ図の判断分岐をそのままコードにした形です。

3つの構造は組み合わせて使う

実際のプログラムは、順次だけ、選択だけ、繰り返しだけ…ではなく、だいたい組み合わせになります。

たとえば「5回入力して、もし負の値なら無視して、正の値だけ合計する」なら、

  • 5回繰り返す(繰り返し)
  • 入力して(順次)
  • 正かどうかで分ける(選択)
  • 合計する(順次)

みたいに混ざります。

流れ図とコードの対応をざっくり結びつける

流れ図の見た目C言語での形目印
まっすぐ下へ順次上から順に書いてある
ひし形でYes/No選択if の条件分岐
矢印が戻る繰り返しwhile/for、または break で抜ける

この対応が見えるようになると、流れ図を見た瞬間に「この部分はif」「ここはwhile」みたいに自然に変換できるようになっていきます。