C言語

【C言語】第2章第6回:while文とdo-while文の違いと使い方

while文とdo-while文は、条件が満たされる間、処理を繰り返すための制御構文です。この章では、それぞれの基本構造や違いについて解説し、実用的な例を示します。

1. while文の基本構造

while文は、条件が真(true)である間、ループを繰り返します。

基本構文

while (条件式) {
    // 繰り返し処理
}

例:1から5までの数を出力

#include <stdio.h>

int main() {
    int i = 1; // 初期化

    while (i <= 5) { // 条件が真の間ループ
        printf("%d\n", i);
        i++; // カウンタを増加
    }

    return 0;
}

解説:

  • int i = 1;:カウンタ変数を1に初期化。
  • i <= 5;:条件が真である間、ループを繰り返します。
  • i++;:各ループの最後にカウンタを増加させます。

2. do-while文の基本構造

do-while文は、必ず1回はループを実行し、その後条件をチェックします。

基本構文

do {
    // 繰り返し処理
} while (条件式);

例:1から5までの数を出力

#include <stdio.h>

int main() {
    int i = 1; // 初期化

    do {
        printf("%d\n", i);
        i++; // カウンタを増加
    } while (i <= 5); // 条件が真の間ループ

    return 0;
}

解説:

  • doブロック内の処理が最初に実行されます。
  • while条件をチェックし、真の場合に次のループを実行します。
  • 少なくとも1回は必ずループを実行します。

3. while文とdo-while文の違い

両者の主な違いは、条件のチェックタイミングにあります:

構文条件チェックのタイミング最小実行回数
whileループの開始前0回
do-whileループの実行後1回

4. 実用的な例

例1:ユーザー入力を検証

#include <stdio.h>

int main() {
    int number;

    do {
        printf("Enter a number greater than 0: ");
        scanf("%d", &number);
    } while (number <= 0); // 入力が0以下の場合は再入力

    printf("You entered: %d\n", number);

    return 0;
}

解説:

  • 少なくとも1回は入力を促します。
  • 入力が0以下の場合、再度入力を求めます。

5. 練習問題

以下の課題に挑戦し、while文とdo-while文の使い方を練習してください。

  1. 1から10までの偶数をwhile文で出力するプログラムを作成してください。
  2. ユーザーに文字列を入力させ、「exit」と入力されるまで繰り返すプログラムをdo-while文で作成してください。
  3. ユーザーに数値を入力させ、その数値の階乗を計算するプログラムをwhile文で作成してください。

6. 練習問題の解答と解説

問1の解答

#include <stdio.h>

int main() {
    int i = 2;

    while (i <= 10) {
        printf("%d\n", i);
        i += 2; // 偶数を出力
    }

    return 0;
}

問2の解答

#include <stdio.h>
#include <string.h>

int main() {
    char input[100];

    do {
        printf("Enter a string (type 'exit' to quit): ");
        scanf("%s", input);
    } while (strcmp(input, "exit") != 0); // 入力が'exit'でない場合ループ

    printf("Program exited.\n");

    return 0;
}

問3の解答

#include <stdio.h>

int main() {
    int number, factorial = 1;

    printf("Enter a positive integer: ");
    scanf("%d", &number);

    int i = 1;
    while (i <= number) {
        factorial *= i; // 階乗を計算
        i++;
    }

    printf("The factorial of %d is %d.\n", number, factorial);

    return 0;
}

7. まとめ

while文とdo-while文を使い分けることで、柔軟な繰り返し処理を実装できます。それぞれの特徴を理解し、必要に応じて適切な構文を選択しましょう。練習問題を通じてスキルを磨いてください!