繰り返し do-while

Last-modified: 2023-01-27 (金) 13:01:39
 

今回の目的

do-while 文の理解と、break, continue 文の理解が目的です。

do-while 文とは

do-while 文は条件の評価されるタイミングが違うだけで、あとは while 文と一緒です。

while 文では、条件は一番最初に調べられ (= 評価され)、条件が成立していない場合、括弧内は実行されませんでした。

do-while 文では、条件が評価される前に、一度括弧内が実行され、その後で条件が評価されます。

while 文では、初めに条件が評価されます。
つまり、while 文では条件が成立していない場合、1回も処理は行われません。

int i;

i = 10;

while(i < 5){
    printf("%d\n", i);
    ++i;
}

printf("%d\n", i);

出力

10

do-while 文では、条件は最後に評価されます。
つまり、条件が成立しているか、していないかにかかわらず、最低1回は処理が行われます

int i;

i = 10;

do {
    printf("%d\n", i);
    ++i;
} while(i < 5);

printf("%d\n", i);

出力

10
11

do-while 文の形式

do-while 文は次のような形式をしています。

do {
    文;
} while(条件);

do-while 文では、まず初めに括弧内の文が実行したあと、条件が調べられます。
while 文との違いはそれだけです。

do-for 文はありません

continue 文

ループを強制的に抜けるには break 文を使うことは既に知っていると思います。
今回は、似たような働きをする continue 文について扱います。

break 文は、以下の図のように強制的にループを終了させる働きをしました。

break.png

一方、continue 文は、括弧内の処理の末尾の次にジャンプします。
continue 文では、ループは終了しませんが、continue 文以降の処理が省かれることになります。

continue.png

break, continue 文は、while, for, do-while 文のすべてで同じように利用できます。
ただし、switch 文では continue 文は利用できません。

以下は 1 から 20 まで表示するプログラムですが、3の倍数は表示されません。

 # include <stdio.h>
int i;

for(i = 1; i <= 20; ++i){
    if(i % 3 == 0){
        continue;
    }

    printf("%d\n", i);
}

課題

課題1

do-while 文を用いて、ユーザーが条件 (0 < x < 10) を満たす整数 x を入力するまで、入力を求めるプログラムを作成しなさい。
また、入力が成功したら、その整数を表示しなさい。

実行例

./a.out
x (0 < x < 10) を入力してください: 9
9
./a.out
x (0 < x < 10) を入力してください: 0
x (0 < x < 10) を入力してください: 10
x (0 < x < 10) を入力してください: 1
1

課題2

1 から入力された整数 n まで表示するプログラムを作成しなさい。
ただし、指定された整数 a の倍数を表示してはいけない。

プログラムには continue 文を用いること。
do-while 文は用いなくてよい。

入力形式

整数 n, a をスペース区切りで入力します。

n a

実行例

./a.out
6 2
1
3
5
./a.out
10 3
1
2
4
5
7
8
10
./a.out
100 1