C言語入門(ループ処理その3:do-while文)

C言語

どうもサンチョです!

前回はループ処理のwhile文について学びました。
今回はwhile文の派生型であるdo-while文に触れていきましょう。

前回の練習問題の解答例

まずは前回の練習問題の解答例から説明していきます。
※前回の記事はこちら ⇒C言語入門(ループ処理その2:while文)の練習問題

問1はforをwhileに書き換えるものでした。

#include<stdio.h>
int main() {
    int array[5] = { 92, 83, 71, 40, 57 };
    int i, sum;
    sum = 0;
    i = 0;
    while(i < 5){
        sum = sum + array[i]; // 点数の合計値を計算
        i++;
    }
    printf("平均点は%0.2f\n", sum / 5.0);
}

これは簡単でしたね。

問2は最大公約数を求めるプログラムを作成するものでした。
こちらは結構歯ごたえがあったのではないでしょうか?

#include<stdio.h>
int main() {
    int num1, num2, tmp;
    num1 = 81;
    num2 = 12;
    tmp = num1 % num2;

    while(tmp != 0){
        num1 = num2;
        num2 = tmp;
        tmp = num1 % num2;
    }
    printf("最大公約数は%dです。",num2);
}

毎回入れ替えるプログラムを書くのは大変ですが、ループ処理ならこんなに簡単に実現できます。
更にループ処理の良いところは、使用する値が変化してもプログラムは書き換え不要という点です。

do-while文

while文は条件を満たしている場合にループする処理でした。
そのため、条件を満たしていない場合は最初から処理が実行されません。
これはfor文にも同じことが言えます。

そのため、何らかの処理を行ってからループ処理を行いたいという場合は、
一度whileの外に処理を書いてからwhileに入らないといけません。
しかし、そうすると同じ内容の処理が2回でてくるので気持ち悪いです。
※プログラミングにおいて同じ文が何度も出てくるのは好ましくないため。

そんなときこそdo-while文の出番です。
まずはイメージをつかむために、以下のサンプルをコピペして実行してみてください。

#include<stdio.h>
int main() {
    int i;
    printf("** while *****************\n");
    i = 0;
    while (i > 0) {
        printf("%d\n", i);
        i--;
    }
    printf("\n** do-while **************\n");
    i = 0;
    do {
        printf("%d\n", i);
        i--;
    } while (i > 0);
}

実行結果は以下の通りです。

このサンプルは変数「i」に格納されている値が0になるまでカウントダウンするプログラムですが
「i = 0」としてしまっているのでwhile文は実行されません。
一方、do-while文は処理が実行されて「0」が表示されています。

do-whileの構成要素

do-while文は次の要素で構成されています。

do{
    処理内容
}while( 条件式 );

既にサンプルの動きによってイメージできていると思いますが、
do-while文は最初に処理が一度実行されてからループ条件が判定されます。
それ以外はwhile文と考え方は同じです。

練習問題

【問1】前回の練習問題で作成した問2:最大公約数を求めるプログラムをdo-while文に修正してください。
※前回の練習問題はこちら⇒C言語入門(ループ処理その2:while文)の練習問題

まとめ

今回はdo-while文についてまとめました。
解説だけだと用途が分かり辛かったもしれませんね。

一般的には値を外部から受け取るプログラムを書く場合に重宝されます。
外部から受け取る場合、サンプルのように値が「0」である場合もあるためです。

お詫び&次回予告

ここまで記事を作成して気が付いたのですが…
値の入力方法とif文の解説を忘れてましたあああああ!!

いやはや…特にif文の説明がない状態だと、ループの「条件式」って意味不明ですよね(´・ω・`)
というワケで、次回は値の入力方法とif文について触れていきます!

では、今回もお疲れ様でした!

コメント

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