1. do~while文の記述方法
while文とfor文は、いずれも前判定で繰り返しを行う制御文です。それに対して、do~while文は、まず処理を実行してから、繰り返すかどうかを判定します。この特徴により、少なくとも1回は必ず処理が実行されます。
【書き方】
do {
文;
} while (継続条件式);
- まず文を実行してから、継続条件の判定を行う。
- 継続条件式が真である間、文を繰り返し実行。
- while文は一度も実行されないことがあるが(最初から条件が’偽’のとき)、 do~while文ではとりあえず 1回は文を実行する。
- 文は複合文({ }で囲んだ文の集合)も可。
- 単文なら { } 省略可。
- 継続条件式の後の(;)を忘れないよう注意。
// 0を入力するまで加算を繰り返す例
#include <stdio.h>
int main(void)
{
int wa = 0, data;
do { // ループ開始
printf("整数値入力> ");
scanf("%d", &data); // dataを入力
wa += data; // waに加算
printf("wa = %d\n", wa);
} while (data != 0); // dataが0でない間ループ
return 0;
}
【実行結果例】
整数値入力> 3
wa = 3
整数値入力> 5
wa = 8
整数値入力> 8
wa = 16
整数値入力> 0
wa = 16
※ 水色文字はキーボードからの入力
2. while文とdo~while文の比較
while文の例
// while文を用いて -1 まで繰り返す
#include <stdio.h>
int main(void)
{
int a[] = {1, 2, 3, 4, -1}, b[5] = {0};
// 配列aの内容を配列bにコピー
int i = 0;
while (a[i] != -1) {
b[i] = a[i];
i++;
}
// 配列bの内容を確認
for (i = 0; i < 5; i++)
printf("%d ", b[i]);
printf("\n");
return 0;
}
【実行結果例】
1 2 3 4 0 ← –1はコピーされない
do~while文の例
// do~while文を用いて -1 まで繰り返す
#include <stdio.h>
int main(void)
{
int a[] = {1, 2, 3, 4, -1}, b[5] = {0};
// 配列aの内容を配列bにコピー
int i = 0;
do {
b[i] = a[i];
} while (a[i++] != -1);
// 配列bの内容を確認
for (i = 0; i < 5; i++)
printf("%d ", b[i]);
printf("\n");
return 0;
}
【実行結果例】
1 2 3 4 -1 ← -1もコピーされる
〇 演習問題
do~while文を使って、以下のフローチャートをプログラミングしなさい。
問1

【実行結果例】
整数値を入力 500
data1 = 500
整数値を入力 300
data1 = 200
整数値を入力 250
data1 = -50
※ 水色文字はキーボードからの入力
問2

【実行結果例】
文字列入力 computer
str2 = computer
※ 水色文字はキーボードからの入力
解答例
// 問1
#include <stdio.h>
int main(void)
{
int data1 = 1000;
int data2;
do {
printf("整数値を入力 ");
scanf("%d", &data2);
data1 = data1 - data2;
printf("data1 = %d\n", data1);
} while (data1 > 0);
return 0;
}
// 問2
#include <stdio.h>
int main( void )
{
char str1[100], str2[100];
int i;
printf("文字列入力 ");
scanf( "%99s", str1 );
i = 0;
do {
str2[i] = str1[i];
} while (str1[i++] != '\0');
printf("str2 = %s\n", str2);
return 0;
}
コメント