後づけwhile文 do{}while()文の基本設定にもwhile文と同じく初期化式、継続処理方法、条件式が用いられます 例えばint a;do{a++;}while(a<5) のように記述します

ソーラー「それでは!


while()文につづいて


あとづけwhile()文の


do{}while()文の登場です。


その前に


前置きwhile()文のプログラムをもう1度実行していきましょう。


前置きwhile()文が用いられたプログラムは


次のようなものでしたね


#pragma warning(disable: 4996)


#include <stdio.h>


int main(void) {


int a=1;


while (a<6){

printf("%d回目の繰り返しにゃんこ\n",a);

a++;}

return 0;

}

コンパイル結果

1回目の繰り返しにゃんこ

2回目の繰り返しにゃんこ

3回目の繰り返しにゃんこ

4回目の繰り返しにゃんこ

5回目の繰り返しにゃんこ



ソーラー「そして 新たに登場する


あとづけwhile文である


     do{}while()文を


もちいて


今のプログラムをかきかえると


次のプログラムのようになります。


#pragma warning(disable: 4996)


#include <stdio.h>


int main(void) {


int a=1;


do{

printf("%d回目の繰り返しにゃんこ\n",a);

a++;}


while (a<6);


return 0;

}


コンパイル結果

1回目の繰り返しにゃんこ

2回目の繰り返しにゃんこ

3回目の繰り返しにゃんこ

4回目の繰り返しにゃんこ

5回目の繰り返しにゃんこ



アレサ「ここで


int a=1;

前置きwhile文の初期化式


a++;

前置きwhile文の継続処理方法


a<6は前置きwhile文の条件式に相当します。


前置きwhile文と後づけwhile文の違いは


do{

printf("%d回目の繰り返しにゃんこ\n",a);

a++;}


と記述した後に


繰り返しの条件を定めるwhile(a<6);


を記述することにあります。


while (a<6);


と記述したなら


while (a<6)の条件式a<6を満たす間


do{

printf("%d回目の繰り返しにゃんこ\n",a);

a++;}


を繰り返すこととなります。


もう少し詳しく


今のこのプログラムを


考察してみます。


#pragma warning(disable: 4996)


#include <stdio.h>


int main(void) {


int a=1;


do{

printf("%d回目の繰り返しにゃんこ\n",a);

a++;}


while (a<6);


return 0;

}


コンパイル結果

1回目の繰り返しにゃんこ

2回目の繰り返しにゃんこ

3回目の繰り返しにゃんこ

4回目の繰り返しにゃんこ

5回目の繰り返しにゃんこ



まず 繰り返したい命令文


printf("%d回目の繰り返しにゃんこ\n",a);



do{}のブロック{}内に記述します


do{

printf("%d回目の繰り返しにゃんこ\n",a);

}


次にa++;



do{}のブロック{}内に記述するのですが


a++;

の位置を


do{

printf("%d回目の繰り返しにゃんこ\n",a);

a++;}


と記述するか


do{a++;

printf("%d回目の繰り返しにゃんこ\n",a);

}


と記述するかは決まりがありません。


なぜなら


do{

printf("%d回目の繰り返しにゃんこ\n",a);

a++;}


while (a<6);


という命令文は


do{

printf("%d回目の繰り返しにゃんこ\n",a);

a++;}

a<6、つまり変数aが6以下の値をとる間


ずっと繰り返して実行せよという命令文であり



do{a++;

printf("%d回目の繰り返しにゃんこ\n",a);

}


while (a<6);


と記述されていたなら


do{a++;

printf("%d回目の繰り返しにゃんこ\n",a);

}

a<6、つまり変数aが6以下の値をとる間


ずっと繰り返して実行せよという命令文なのです。


a++;


の位置は定められているわけではありません。


ですが


while (a<6){

printf("%d回目の繰り返しにゃんこ\n",a);

a++;}



do{}while()文で書き換えるなら


do{

printf("%d回目の繰り返しにゃんこ\n",a);

a++;}



a++;


printf("%d回目の繰り返しにゃんこ\n",a);

のあとに記述する必要があります。


なぜなら


do{

printf("%d回目の繰り返しにゃんこ\n",a);

a++;}


while (a<6);




do{a++;

printf("%d回目の繰り返しにゃんこ\n",a);

}


while (a<6);



全く同じ命令文というわけではありません。


do{a++;

printf("%d回目の繰り返しにゃんこ\n",a);

}


while (a<6);



a++;


が実行された後


printf("%d回目の繰り返しにゃんこ\n",a);


を実行する


という命令を


繰り返すものであり


do{

printf("%d回目の繰り返しにゃんこ\n",a);

a++;}


while (a<6);



printf("%d回目の繰り返しにゃんこ\n",a);


が実行された後


a++;


を実行せよ


という


命令文だからです。


さらにいえば


a++;


を記述しなくても


かまいません。


その違いは後ほど考察していきましょうね(⋈◍>◡<◍)。✧♡


ここでは


do{

printf("%d回目の繰り返しにゃんこ\n",a);

a++;}

a<6の間繰り返される様子を見ていきましょう。




int a=1;


do{

printf("%d回目の繰り返しにゃんこ\n",a);

a++;}


が実行されると


まず


do{

printf("%d回目の繰り返しにゃんこ\n",a);

a++;}

の中の


printf("%d回目の繰り返しにゃんこ\n",a);


が実行され


1回目の繰り返しにゃんこ



コマンドプロンプト画面に表示されます。


その後

a++;により


aの値は

1から2に増加します。

そのとき

while (a<6);

の条件式

a<6は真の値1をもつので


do{

printf("%d回目の繰り返しにゃんこ\n",a);

a++;}


の繰り返しは実行されます。


a=2となった状態で


do{

printf("%d回目の繰り返しにゃんこ\n",a);

a++;}

が実行されるわけですが



まず


printf("%d回目の繰り返しにゃんこ\n",a);



が実行され


2回目の繰り返しにゃんこ



コマンドプロンプト画面に表示されます。


その後


a++;により


aの値は

2から3に増加します。


そのとき

while (a<6);

の条件式

a<6は真の値1をもつので


do{

printf("%d回目の繰り返しにゃんこ\n",a);

a++;}


の繰り返しは実行されます。


a=3となった状態で


do{

printf("%d回目の繰り返しにゃんこ\n",a);

a++;}

が実行されるわけですが



まず


printf("%d回目の繰り返しにゃんこ\n",a);



が実行され


3回目の繰り返しにゃんこ



コマンドプロンプト画面に表示されます。


その後


a++;により


aの値は

3から4に増加します。


そのとき

while (a<6);

の条件式

a<6は真の値1をもつので


do{

printf("%d回目の繰り返しにゃんこ\n",a);

a++;}


の繰り返しは実行されます。



a=4となった状態で


do{

printf("%d回目の繰り返しにゃんこ\n",a);

a++;}

が実行されるわけですが



まず


printf("%d回目の繰り返しにゃんこ\n",a);



が実行され


4回目の繰り返しにゃんこ



コマンドプロンプト画面に表示されます。


その後


a++;により


aの値は

4から5に増加します。


そのとき

while (a<6);

の条件式

a<6は真の値1をもつので


do{

printf("%d回目の繰り返しにゃんこ\n",a);

a++;}


の繰り返しは実行されます。


a=5となった状態で


do{

printf("%d回目の繰り返しにゃんこ\n",a);

a++;}

が実行されるわけですが



まず


printf("%d回目の繰り返しにゃんこ\n",a);



が実行され


5回目の繰り返しにゃんこ



コマンドプロンプト画面に表示されます。


その後


a++;により


aの値は

5から6に増加します。


そのとき

while (a<6);

の条件式

a<6は偽の値0をもつので


do{

printf("%d回目の繰り返しにゃんこ\n",a);

a++;}


の繰り返しは実行されません。


このwhile文のプログラムと


do{}while文のプログラムは非常によくにています。


この例ではコンパイル結果もおなじになっていますの。」


ソーラー「


ですが😊


ちがいがあるんだな~これが~」


アレサ「そうなんですの😊


これら2つのプログラムの


初期化式である


int aに7を代入して


コンパイルしてみますの。


初期化式を

int a=7;

としたときの


    while()文の場合


#pragma warning(disable: 4996)


#include <stdio.h>


int main(void) {


int a=7;


while (a<6){

printf("%d回目の繰り返しにゃんこ\n",a);

a++;}

return 0;

}


コンパイル結果

続行するには何かキーを押してください . . ._


となります。」


アレサ「int a=7;


より


aの値は


while (a<6)の条件式a<6の条件を満たさないので


a<6は偽の値0をもちます


ですので


printf("%d回目の繰り返しにゃんこ\n",a);


の繰り返しは🍎1🍎も実行されません。



初期化式を

int a=7;

としたときの


  do{}while文の場合


#pragma warning(disable: 4996)


#include <stdio.h>


int main(void) {


int a=7;


do{

printf("%d回目の繰り返しにゃんこ\n",a);

a++;}


while (a<6);


return 0;

}


コンパイル結果

7回目の繰り返しにゃんこ


と表示されます。」


ソーラー「このようにdo{}while文では


while文の時と同じく


int a=7;


となっていて


while (a<6);


の条件式a<6をみたしていませんが


コンパイル結果

7回目の繰り返しにゃんこ


を表示していま~す。\(^o^)/」


アレサ「それは


do{

printf("%d回目の繰り返しにゃんこ\n",a);

a++;}


の実行の後に


do{

printf("%d回目の繰り返しにゃんこ\n",a);

a++;}



繰り返しを行うか行わないかを決めるwhile文


while (a<6);


が実行されるからなんですの」



ソーラー「


このプログラムではまず


まず


int a=7;


do{

printf("%d回目の繰り返しにゃんこ\n",a);

a++;}


が実行されて


do{

printf("%d回目の繰り返しにゃんこ\n",a);

a++;}

の中の


printf("%d回目の繰り返しにゃんこ\n",a);


が実行されて


7回目の繰り返しにゃんこ


がコマンドプロンプト画面に表示されます。


その後


a++;により


aの値は7から8になります。


aの値が8になっているので


命令文を繰り返すはたらきのある


while (a<6);


の条件式a<6の値が偽である0になり


do{

printf("%d回目の繰り返しにゃんこ\n",a);

a++;}


繰り返されることはありません。


ですので


コンパイル結果

7回目の繰り返しにゃんこ



7回目の繰り返しにゃんこが


コマンドプロンプト画面に表示されることになります。


while文の場合は


int a=7;


while (a<6){

printf("%d回目の繰り返しにゃんこ\n",a);

a++;}


の形式からもうかがえるように


while (a<6)の条件式a<6が満たされる場合のみ


printf("%d回目の繰り返しにゃんこ\n",a);


が実行されるので


初期化式

int a=7;

により


aの値が7


となっていると


while (a<6)の条件式a<6が満たされないので


printf("%d回目の繰り返しにゃんこ\n",a);


の繰り返しは1回も実行されず


コマンドプロンプト画面には


なにも表示されないことになるのですの」



ソーラー「1回繰り返しにゃんこ🐈」


アレサ「1回も表示されないにゃんこ🐈」



solarplexussです


そして

最後に


do{

printf("%d回目の繰り返しにゃんこ\n",a);

a++;}


while (a<6);




do{a++;

printf("%d回目の繰り返しにゃんこ\n",a);

}


while (a<6);


の違いについて考察してみましょう。


実際にプログラムを組んで


コンパイル結果をくらべてみたらよくわかると思います。


do{

printf("%d回目の繰り返しにゃんこ\n",a);

a++;}


を用いたプログラムを


コンパイルすると


#pragma warning(disable: 4996)


#include <stdio.h>


int main(void) {


int a=1;


do{

printf("%d回目の繰り返しにゃんこ\n",a);

a++;}


while (a<6);


return 0;

}


コンパイル結果

1回目の繰り返しにゃんこ

2回目の繰り返しにゃんこ

3回目の繰り返しにゃんこ

4回目の繰り返しにゃんこ

5回目の繰り返しにゃんこ


solarplexuss


「このようなコンパイル結果がえられます。


では次に


a++;

の位置を前に持ってきた


do{a++;

printf("%d回目の繰り返しにゃんこ\n",a);

}


を用いたプログラムを


コンパイルすると


#pragma warning(disable: 4996)


#include <stdio.h>


int main(void) {


int a=1;


do{a++;

printf("%d回目の繰り返しにゃんこ\n",a);

}


while (a<6);


return 0;

}


コンパイル結果


2回目の繰り返しにゃんこ

3回目の繰り返しにゃんこ

4回目の繰り返しにゃんこ

5回目の繰り返しにゃんこ

6回目の繰り返しにゃんこ


solarplexuss


「このようなコンパイル結果がえられます。


ちがいがでてきましたね(⋈◍>◡<◍)。✧♡


これが説明したかったんだ・・・


これは


printf("%d回目の繰り返しにゃんこ\n",a);


の前に


a++;


を記述したことによるものなのです。



int a=1;


do{a++;

printf("%d回目の繰り返しにゃんこ\n",a);

}


while (a<6);


この命令文が実行されると


まず

int a=1;

により


変数aに1が格納されることになるのですが


do{a++;

printf("%d回目の繰り返しにゃんこ\n",a);

}


と記述されているために


a++;



printf("%d回目の繰り返しにゃんこ\n",a);


の先に


実行されてしまいます。


a++;



変数aが今格納している値1に1を加えたを


変数aに格納する働きがあるので


変数aに格納される値は2になります。


そして


printf("%d回目の繰り返しにゃんこ\n",a);


が実行されるので


2回目の繰り返しにゃんこ


から


コマンドプロンプト画面に表示されることとなります。


このように


do{

printf("%d回目の繰り返しにゃんこ\n",a);

a++;}



do{a++;

printf("%d回目の繰り返しにゃんこ\n",a);

}

では


プログラムの実行結果に違いがでてきますので



a++;


の記述する位置には


気を付ける必要があります。


ね💖」






  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます