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


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


int a=1;


do{

何かの命令文

a++;}while(a<5) のように記述します


while(a<5) は改行して


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回目の繰り返しにゃんこ



アレサ「この後付けwhile{}文において


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++;}


のブロック{}内の命令文


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);

}

のように記述した後


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

次に継続処理方法a++;



記述するか


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

前にa++;


を記述するのか?


ということになってきますが


どちらに記述するかは


その時の目的次第となります


前置きwhile文

while (a<6){

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

a++;}

に相当するものを


実行したいなら


do{

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

a++;}

のように


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

次にa++;



記述することになります


do{a++;

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

}


と記述してしまうと



プログラムの実行結果は


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

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

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

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

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


となってしまいます



一般的に

継続処理方法

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++;}


のブロック{}内の命令文


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

a++;


a<6、つまり変数aが6より小さい値をとる間


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


条件式


a++;


の位置はどこに設定されてもかまいません



do{a++;

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

}


while (a<6);


と記述されていたなら


do{a++;

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

}


のブロック{}内の命令文


a++;

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



a<6、つまり変数aが6より小さい値をとる間


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



条件式


a++;


の位置はどこに設定されなければならないと定められているわけではありません



さらにいえば


継続処理方法

a++;


を記述しなくても


かまいません。


ですが

前置きwhile文

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++;


を実行する


という


命令文をくりかえすものだからです。


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


とりあえず


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++;}


のブロック{}内の命令文


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++;}


のブロック{}内の命令文


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++;}


のブロック{}内の命令文


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++;}


のブロック{}内の命令文


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++;}


のブロック{}内の命令文


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

a++;


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



前置きwhile文のプログラムと


後付けdo{}while文の仕組みは非常によくにています。


この後付けdo{}while文の例

先ほどの前置き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をもちます


ですので


while (a<6){

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

a++;}



ブロック{}内の命令文


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

a++;


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



初期化式を

int a=7;

としたときの


  後付けwhile{}文 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回目の繰り返しにゃんこ


と表示されます。」


ソーラー「このように


後付けwhile文


do{}while文では


while文の時と同じく


初期化式は


int a=7;


となっていて


while (a<6);


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


にゃんと


プログラムの実行結果


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


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


アレサ「それは


do{

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

a++;}


のブロック{}内の命令文


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

a++;


の実行の後に


do{

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

a++;}


のブロック{}内の命令文

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

a++;}



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


while (a<6);


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


do{

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

a++;}

が実行されてから

while (a<6);



実行されることになります」



ソーラー「


このプログラムでは


まず


int a=7;


do{

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

a++;}


が実行されることになります


この場合


do{

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

a++;}

のブロック{}内の命令文


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++;}

のブロック{}内の命令文



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);

a++;


が実行されるので


初期化式

int a=7;

により


aの値が7


となっていると


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


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

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++;}


while (a<6);


を用いたプログラムを


実行してみると・・・」

👇

#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回目の繰り返しにゃんこ


から


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


そして


a++により


aに格納される値は1ずつ増加していき


aに5が代入された状態で


do{a++;

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

}


while (a<6);


が実行されることになります


a++;


の実行により


aに格納される値は6となり


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


が実行されるので


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



表示されることになります


その後


while (a<6);


が実行されると


a<6



偽の値0をもつことになるので


do{a++;

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

}


のブロック{}内の命令文


a++;

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


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



このように


do{

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

a++;}



do{a++;

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

}

では


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



a++;


の記述する位置には


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


ね💖」






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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る