12 while 文

条件が真である限り処理を繰り返す while 文を学ぶ。
繰り返し処理はプログラムの真骨頂で、コンピュータが最も得意なことのひとつ。


12-1 while 文の基本構文

while (条件式) {
    /* 条件が真の間、繰り返される処理 */
}

条件式が真(0以外)の間、ブロック内の処理を繰り返す。
条件式が偽(0)になった時点でループを抜ける。

✅ while 文を使うときは必ず次の3点を意識する:
① カウンター変数の初期化(ループの前)
条件式(いつまで繰り返すか)
③ カウンター変数の更新(ループの中)
12_01_while_basic.c
#include <stdio.h>

int main(void)
{
    int i = 1;        /* ① 初期化 */
    while (i <= 3) { /* ② 条件式 */
        printf("%d回目\n", i);
        i++;          /* ③ 更新 */
    }
    return 0;
}
1回目
2回目
3回目

12-2 無限ループと注意点

③の更新処理を忘れると、条件式が永遠に真のままになり無限ループになる。

int i = 1;
while (i < 3) {
    printf("%d\n", i);
    /* i++ を忘れた → 永遠に 1 を出力し続ける */
}
⚠ 無限ループが起きたら Ctrl + C でプログラムを強制終了できる。
Visual Studio では「デバッグの停止」ボタン(■)でも止められる。

12-3 よく使うパターン

カウントアップ(1〜N)

12_02_countup.c
#include <stdio.h>

int main(void)
{
    int i = 1;
    while (i <= 5) {
        printf("%d ", i);
        i++;
    }
    printf("\n");
    return 0;
}
1 2 3 4 5

カウントダウン(N〜1)

12_03_countdown.c
#include <stdio.h>

int main(void)
{
    int i = 5;
    while (i >= 1) {
        printf("%d ", i);
        i--;
    }
    printf("\n");
    return 0;
}
5 4 3 2 1

合計の計算

12_04_sum.c
#include <stdio.h>

int main(void)
{
    int i = 1;
    int sum = 0;       /* 合計を入れる変数は必ず 0 で初期化 */

    while (i <= 10) {
        sum += i;      /* sum = sum + i と同じ */
        i++;
    }
    printf("1〜10の合計 = %d\n", sum);
    return 0;
}
1〜10の合計 = 55

12-4 while と if の組み合わせ

ループの中に if 文を入れることで、条件を満たすものだけを処理できる。

12_05_evenInLoop.c
#include <stdio.h>

int main(void)
{
    int i = 1;
    while (i <= 10) {
        if (i % 2 == 0) {       /* 偶数のときだけ表示 */
            printf("%d ", i);
        }
        i++;
    }
    printf("\n");
    return 0;
}
2 4 6 8 10

12-5 演習

📝 演習① 1〜N を表示する

整数 N を入力して、1 から N までの整数を1行ずつ表示するプログラムを作れ。

12_06_count1toN.c
#include <stdio.h>

int main(void)
{
    int n, i;
    printf("N を入力してください: ");
    scanf("%d", &n);

    /* ここに while 文を書く */

    return 0;
}
答えの例を表示
#include <stdio.h>

int main(void)
{
    int n, i;
    printf("N を入力してください: ");
    scanf("%d", &n);

    i = 1;
    while (i <= n) {
        printf("%d\n", i);
        i++;
    }
    return 0;
}
📝 演習② 1〜N の合計

整数 N を入力して、1 から N までの合計を表示するプログラムを作れ。

12_07_sumToN.c
#include <stdio.h>

int main(void)
{
    int n, i, sum;
    printf("N を入力してください: ");
    scanf("%d", &n);

    /* ここに while 文を書く */

    return 0;
}
答えの例を表示
#include <stdio.h>

int main(void)
{
    int n, i, sum;
    printf("N を入力してください: ");
    scanf("%d", &n);

    i = 1;
    sum = 0;
    while (i <= n) {
        sum += i;
        i++;
    }
    printf("1〜%d の合計 = %d\n", n, sum);
    return 0;
}

12-6 理解度チェック

Q1. 次のコードの出力として正しいものはどれか。

int i = 0;
while (i < 3) {
    printf("Hello\n");
    i++;
}
解説を表示

正解:ウ

i = 0, 1, 2 の3回、条件 i < 3 が真になる。

Q2. 次のコードはどうなるか。

int i = 1;
while (i < 3) {
    printf("%d\n", i);
    /* i の更新なし */
}
解説を表示

正解:エ

i が変化しないため条件が常に真のまま。無限ループになる。

Q3. 次のコードで sum の最終値はどれか。

int i = 1, sum = 0;
while (i <= 4) {
    sum += i;
    i++;
}
解説を表示

正解:ウ

1 + 2 + 3 + 4 = 10

Q4. 次のコードで最初に表示される数はどれか。

int i = 5;
while (i < 3) {
    printf("%d\n", i);
    i++;
}
解説を表示

正解:エ

i = 5 は最初から条件 i < 3 を満たさないので、1回も実行されない。