前判定の「while」と後判定の「do-while」

博士

while文は前に習ったぞい。今回は後から判定するdo-while文じゃ。
とりあえずwhile文とdo-while文を並べて比較してみようかの。

前判定
while文

フローチャート「while文」
後判定
do-while文

フローチャート「do-while文」
博士「ここをチェックじゃ」

見て分かると思うが、do-while文の方は、一度は繰り返す文を実行するわけじゃ。
普通のwhile文は条件が偽(no)なら繰り返す文は、一回も実行されないんじゃがの。

実行文

博士

プログラムと実行結果をそれぞれ見てみるとしようかの。

while文

#include <stdio.h>
main()
{
   int i=0;
   while(i>0) {
      printf("test\n");
   }
}

do-while文

#include <stdio.h>
main()
{
   int i=0;
   do {
      printf("test\n");
   } while(i>0);
}

実行結果

while文
何も表示されない
do-while文
test
博士「(^^♪」

こんな風になるんじゃぞ。
さてと分かっているかどうかテストをするかのう。

次のプログラム1、2、3を実行した際、表示される数値を答えよ。

困った顔の博士

3は2の条件式++iをi++に変えただけじゃが・・・。


ぷうさん「怒」

手抜きだー!ブーブー!!








プログラム1

#include <stdio.h>
main()
{
   int data[]={10,20,30,40,50,0};
   int i=0,goukei=0;
   do {
      if (goukei>100) break;
      goukei=goukei+data[i++];
   } while (data[i]);
   printf("goukei=%d",goukei);
}

プログラム2

#include <stdio.h>
main()
{
   int data[]={60,20,50,40,80,-1};
   int i=0,goukei=0;
   do {
      if (data[i]>50) continue;
      goukei=goukei+data[i];
   } while (data[++i]>0);
   printf("goukei=%d",goukei);
}

プログラム3

#include <stdio.h>
main()
{
   int data[]={60,20,50,40,80,-1};
   int i=0,goukei=0;
   do {
      if (data[i]>50) continue;
      goukei=goukei+data[i];
   } while (data[i++]>0);
   printf("goukei=%d",goukei);
}

答えは・・・?

困った顔のぷうさん

・・・う~んと・・ここでこれを足して、これはスキップして・・う~んと、う~んと・・・・・あ~メモがぐしゃぐしゃになっちった!!


博士「ここをチェックじゃ」

・・・どうしても分からんかったら、実際にプログラムを入力してやってみたらどうじゃ?
値の変化がよく分かるぞ!

そうじゃな、繰り返す文の最後に、
printf("goukei=%d i=%d\n",goukei,data[i]);
を入れたらいいじゃろう。


ぷうさん「怒」

・・・だから、Cのソフトはないんだって言ったでしょ?


困った顔の博士

そ、そうじゃった、そうじゃった。


ぷうさん「?」

博士・・・怪しい・・・・・・誰かからの差し金か?・・はたまたスパイか?


困った顔の博士

な、なんでスパイなんかしにゃならんのじゃ?
お前さんの事など探ってもしかたなかろうに。


ぷうさん

・・・それもそうだ・・・。


困った顔の博士

と、とにかく今はプログラムの値じゃ。どうじゃ、計算できたかの?


ぷうさん「怒」

・・・また、すぐ話をそらす・・・・


博士

正解じゃったら今日は終わりにしようと思ったんじゃが。
(本当はもっとするつもりだったんじゃが。)


困った顔のぷうさん

あっ、ち、ちょっと待って!え~とぉ~…。

///正解だったら今口は終わりということで、俄然パワーアップ!
ぷうさんは、真剣に考えたのであった。

プログラム1~3の答え

ぷうさん「(^^♪」

『1は、150』で、『2は、110』。
それで、『3は、109』!!


博士「Good!」

よくできたのお。3つとも正解じゃ。「i++と++i」の違いも忘れておらんかったらしいの。
それじゃ、また明日。


ぷうさん「怒」

ちょっと待てっ!

///長老が消えるより早くぷうさんが叫んだ。

ぷうさん

どうも怪しいんだよなあ・・・
そうだ!もしかして、まあじょさんに頼まれたとか☆
・・・私にでもなんとか理解できれば、まあじょさんなら絶対大丈夫だという保証(安心惑)を得る為によこした、とか?


困った顔の博士

(ギクッ!)
な、何を言っとるんじゃな?わしは本当にお前さんの事が心配で・・
別にモルモットになんてことは・・・ととと・・


ぷうさん「怒」

ふーん、ヘーえ、そうだったんだあ・・・マージョ(魔女)の使い魔だったんだ!
魔族め、成敗してくれようぞ!


困った顔の博士

あ、あのじゃなあ・・・ちとRPGのやりすぎじゃないのかの?


ぷうさん「×」

ぶーぶー!ちょっとはずれーっ!
正しくは『RPG作成にのめり込みすぎた』なのだ!


博士

威張って言えることかの、それが。


ぷうさん「?」

自分はどうなのよ、自分は?


困った顔の博士

あ・・い、いや・・じゃが、お前さんの事を心配してというのは本当じゃぞ。
ま、まあとにかく今日はこれで。

///言うが早いが姿を消した長老だった。

ぷうさん「怒」

あっ、逃げたっ!・・・ったく!


困った顔のぷうさん

でも、その通りだったりして・・それに・・Cのソフトかあ・・パソコンはメモリに余裕がないし・・・予算も、ない。
やっぱ、机上シミュレーションでいくしかないか。・・・でも、そんなんで大丈夫かな?
・・・・・・

///第3日目の夜、うんず君の前で頬杖をつき、ぶつぶつ言うぷうさんの姿が遅くまであったそうな・・・。

三日目 C言語らしい書き方 目次

二日目へ

ぷうさんの七日間戦争 三日目

四日目へ