C言語の基礎(do文とwhile文)

スポンサーリンク
C言語

前回は、処理を繰り返すプログラムのうちfor文をご紹介した。for文は繰り返しの回数はあらかじめ決まっていた。今回は、条件に合うあいだ繰り返すdo文とwhile文をご紹介しよう。

do文

以前、if文を取り上げた際に、次のようなプログラムを考えた。

読み込んだ整数が偶数ならば、「偶数である」と表示する。
//読み込んだ整数が偶数なら、偶数であると表示するプログラム
#include <stdio.h>

int main(void)
{
    int n;
    printf("整数を入力してください:");
    scanf("%d",&n);
    if ( n%2 == 0)
      printf("入力された整数は偶数です。\n");
}

このプログラムでは、整数値の読み込みと表示が1回に限られる。これを、偶数か奇数であるかを判定するように変更するとともに、do文を使って好きなだけ繰り返して行えるように変更してみよう。

do {
     繰り返しを行う処理
} while(繰り返し継続の条件式);
//読み込んだ整数が偶数か奇数かを判定するプログラム(好きなだけ繰り返す))
#include <stdio.h>

int main(void)
{
    int retry;  //繰り返すか
    do {
        int n;
        printf("整数を入力してください:");
        scanf("%d",&n);
        if ( n%2 == 0)
            printf("入力された整数は偶数です。\n");
        else
            printf("入力された整数は奇数です。\n");

        printf("もう一度?(Yes-0/No-1) :");
        scanf("%d",&retry);
    } while(retry == 0);

    return 0;
}

実行結果

整数を入力してください:7
入力された整数は奇数です。
もう一度?(Yes-0/No-1) :0
整数を入力してください:8
入力された整数は偶数です。
もう一度?(Yes-0/No-1) :1

このdo文は、条件が成立しているか否かにかかわらず一度は処理が実行される。繰り返しの判定を繰り返しを行う処理の後で行うのだ。これを処理の前に行うのが、次に取り上げるwhile文である。

while文

前回のfor文で、正の整数を読み込んで、その数まで0からカウントアップするプログラムを考えた。

//正の整数を読み込んで、その数まで0からカウントアップするプログラム
#include <stdio.h>

int main(void)
{
    int num;
    
    printf("正の整数を入力してください:");
    scanf("%d",&num);
    
    for (int i = 0; i <= num; i++)
        printf("%d\n",i);
        
    return 0;
    
}

このプログラムをwhile文で0までカウントダウンするように書き換えてみよう。

while (繰り返し継続の条件式)
     繰り返しを行う処理
//正の整数を読み込んで、その数から0までカウントダウンするプログラム
#include <stdio.h>

int main(void)
{
    int num;
    
    printf("正の整数を入力してください:");
    scanf("%d",&num);
    
    while(num >= 0)  {
        printf("%d\n",num);
        num--;      //デクリメント
    }
        
    return 0;
    
}

実行結果

正の整数を入力してください:5
5
4
3
2
1
0

ところが、次の場合は、どうだろうか。

正の整数を入力してください:-1

入力した数値が負の場合は、何も表示されない。繰り返しの判定を前に行っていることがわかる。

まとめ

  • do文  後判定繰返し:繰り返しを行う処理をした後に継続条件の判定を行う。
  • while文 前判定繰返し:繰り返しを行う処理をする前に継続条件の判定を行う。

いかがであろうか。この小文でC言語に少しでも興味を持っていただけたら幸いである。

(参考文献)新・明解C言語 入門編 第2版 柴田望洋著(SBクリエイティブ)

基礎C言語 (株)アンク著(インプレス )

コメント

タイトルとURLをコピーしました