天国にいけるC言語入門 ヘキサ構造体 ver3.2128
後づけ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文 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++;
の記述する位置には
気を付ける必要があります。
ね💖」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます