第6章の5 while文

1. while文の記述方法

while文は、繰り返し構造を実現するための基本的な制御文です。ループに入る前に条件をチェックする前判定で条件を評価し、条件が満たされている間だけ処理を繰り返します。条件が満たされなくなると、繰り返しを終了し、次の処理に進みます。

【書き方】
while (継続条件式) {
  文;
}

  • 継続条件が真である間、文を繰り返し実行。
  • 継続条件式がはじめから偽の場合は一度も実行されない。
  • 文は複合文({}で囲んだ文の集合)も可。
  • 単文の場合には { } は省略可能。

while文の使用例 サンプルプログラム

// 配列要素を-1まで表示する
#include <stdio.h>

int main(void)
{
    int i;
    int a[] = {1300, 4320, 985, 2130, -1};    // -1でループ終了

    i = 0;
    while (a[i] != -1) {    // a[i]が-1でない間ループ
        printf("%d\n", a[i]);
        i++;
    }

    return 0;
}

【実行結果例】
1300
4320
985
2130

for文と異なり、初期設定式および再設定式は while文の外に記述する。

2. while文とfor文の比較

  • for文も while文も共に反復制御を行うが、一般に for文は「○回処理を繰り返す」ときに使用し、while文は「~の間処理を繰り返す」ときに使用する。
  • ただし、while文を用いても「○回処理を繰り返す」という制御は可能である。(以下の例を参考のこと)

while文の例

// while文を用いて10回処理を繰り返す
#include <stdio.h>

int main(void)
{
    int a = 0;          // 初期設定式
    while (a < 10) {    // 継続条件式
        printf("%2d ", a);
        a++;            // 再設定式
    }
    printf("\n");

    return 0;
}

for文の例

// for文を用いて10回処理を繰り返す
#include <stdio.h>

int main(void)
{
    // 初期設定式; 継続条件式; 再設定式
    for (int a = 0; a < 10; a++) {
        printf("%2d ", a);
    }
    printf("\n");

    return 0;
}

【実行結果例】
0 1 2 3 4 5 6 7 8 9

〇 演習問題

問1

while 文を用いてプログラムを作成しなさい。

【実行結果例】
総和 = 5050

問2

while 文を用いてプログラムを作成しなさい。

【実行結果例】
整数値入力 > 3
wa = 3
整数値入力 > 5
wa = 8
整数値入力 > 8
wa = 16
整数値入力 > 0

水色文字はキーボードからの入力

問3

scanf関数を用いて同じ長さの文字列を2つ入力しなさい。
この2つの文字列が同じ文字列ならば、「等しい文字列を入力」と画面表示し、 異なるならば、「異なる文字列を入力」と画面表示しなさい。

【実行結果例】
同じ長さの文字列を2つ入力しなさい
abcde
abcde
等しい文字列を入力

水色文字はキーボードからの入力

問4

0~9 までの数字を、0 から1個ずつ増やしながら 10行表示しなさい。

【実行結果例】
0
01
012
0123
01234
012345
0123456
01234567
012345678
0123456789

解答例

// 問1
#include <stdio.h>

int main(void)
{
    int wa, i;

    wa = 0;
    i = 1;
    while (i <= 100) {
        wa = wa + i;
        i++;
    }
    printf("総和 = %d\n", wa);

    return 0;
}
// 問2
#include <stdio.h>

int main(void)
{
    int wa, data;

    wa = 0;
    printf("整数値入力 > ");
    scanf("%d", &data);

    while (data != 0) {
        wa = wa + data;
        printf("wa = %d\n", wa);
        printf("整数値入力 > ");
        scanf("%d", &data);
    }

    return 0;
}
// 問3
#include <stdio.h>

int main(void)
{
    char str1[100], str2[100];
    int flg = 0;
    int i = 0;

    printf("同じ長さの文字列を2つ入力しなさい\n");
    scanf("%99s", str1 );
    scanf("%99s", str2 );

    while (str1[i] != '\0') {
        if (str1[i] != str2[i]) {
            flg++;          // 異なる場合チェック
        }
        i++;
    }
    if (flg == 0) {
        printf("等しい文字列を入力\n");
    }
    else {
        printf("異なる文字列を入力\n");
    }

    return 0;
}

// ※このプログラムは、同じ長さの文字列を入力しないと正しい判定はできません。
// 問4
#include <stdio.h>

int main(void)
{
    int n = 0;
    while (n < 10) {
        int i = 0;
        while (i <= n) {
            printf("%d", i);
            i++;
        }
        printf("\n");
        n++;
    }

    return 0;
}

コメント