前回は、処理を繰り返すプログラムのうち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言語 (株)アンク著(インプレス )
コメント