for (i = 1; i == 1;){}文をdo{}while文でかきかえてみよう for (i = 1; i == 1;){}文とdo{}while文はとても仲良しで置き換えることができます

つづきです


以下 エクセレントC言語入門より


ではでは(*´▽`*)


今のプログラムを実行してみましょう



#include <stdio.h>


int main(void) {



int zokkouhantei;


for (zokkouhantei = 1; zokkouhantei == 1;) {


zokkouhantei = 0;


int a;

a = 5;


if (a < 0) {


printf("プログラムは実行されました\n");


zokkouhantei = 1;

}

}

return 0;

}


プログラムの実行結果



C:\Users\solar\source\repos\Project2\Debug\Project2.exe (プロセス 23668) は、コード 0 で終了しました。

このウィンドウを閉じるには、任意のキーを押してください...




マックス「


まあ


もともと


for (zokkouhantei = 1; zokkouhantei == 1;)



zokkouhantei = 1



設定されているので


zokkouhantei == 1



真の値1をもつことになるので



          🌞1回🌞


だけは


for (zokkouhantei = 1; zokkouhantei == 1;){}のブロック{}内の命令文

👇


zokkouhantei = 0;


int a;

a = 5;


if (a < 0) {


printf("プログラムは実行されました\n");


zokkouhantei = 1;

}

👆


実行されるのはあたりまえか



if (a < 0)のaの値によって


zokkouhantei = 1;


が実行されるかどうかが決まる


つまり


条件式

zokkouhantei == 1


が真の値1を持つかどうかが決まる



つまり


条件式

zokkouhantei == 1

が真の値を持つかどうかで


for (zokkouhantei = 1; zokkouhantei == 1;){}のブロック{}内の命令文

👇


zokkouhantei = 0;


int a;

a = 5;


if (a < 0) {


printf("プログラムは実行されました\n");


zokkouhantei = 1;

}

👆


実行されるかどうかがきまるってわけだ


まあ 当たり前か


簡単なことだな





以下 エクセレントC言語入門より


そうね


マックス「・・・まてよ・・・



なんか


            🌞最低1回は🌞


      🌞ブロック{}内の命令文が実行される🌞


って


なんか


そんなことができる方法がなかったか・・・?


なんだったっけ?


あれは そう 確か・・・


1万5千年前だったか・・・


はじめて あいつに出会ったのは・・・


あいつはいうことをきかなかったからなぁ・・・・・


確か あいつの名前は・・・





以下 エクセレントC言語入門




       いか天



じゃなかったかしら?



マックス「ちが~うぅ


思い出した




            🌞最低1回は🌞


      🌞ブロック{}内の命令文が実行される🌞



それは



            🌞do while{}文だ🌞



以下 エクセレントC言語入門より


ここで 


            🌞do while{}文🌞


が出てくるとは・・・


通ね・・・


マックス「


今のプログラム

👇


#include <stdio.h>


int main(void) {



int zokkouhantei;


for (zokkouhantei = 1; zokkouhantei == 1;) {


zokkouhantei = 0;


int a;

a = 5;


if (a < 0) {


printf("プログラムは実行されました\n");


zokkouhantei = 1;

}

}

return 0;

}


プログラムの実行結果



C:\Users\solar\source\repos\Project2\Debug\Project2.exe (プロセス 23668) は、コード 0 で終了しました。

このウィンドウを閉じるには、任意のキーを押してください...


👆



条件式

zokkouhantei == 1

真の値を持つかどうかによって


for (zokkouhantei = 1; zokkouhantei == 1;){}のブロック{}内の命令文


👇

zokkouhantei = 0;


int a;

a = 5;


if (a < 0) {


printf("プログラムは実行されました\n");


zokkouhantei = 1;

}

👆


繰り返し実行されるかどうかきまるんだろう


そして


条件式

zokkouhantei == 1

いずれ

真の値1を持つことになるかならないかにかかわらず



for (zokkouhantei = 1; zokkouhantei == 1;){}のブロック{}内の命令文

👇


zokkouhantei = 0;


int a;

a = 5;


if (a < 0) {


printf("プログラムは実行されました\n");


zokkouhantei = 1;

}

👆


最低一回は実行される


だって



for (zokkouhantei = 1; zokkouhantei == 1;)


のなかで

zokkouhantei = 1

が記述されているので

zokkouhantei == 1

1== 1

となり

真の値1を持つことになるので


最初の1回目の

for (zokkouhantei = 1; zokkouhantei == 1;){}のブロック{}内の命令文

👇

zokkouhantei = 0;


int a;

a = 5;


if (a < 0) {


printf("プログラムは実行されました\n");


zokkouhantei = 1;

}

👆

の繰り返しは


確実に実行されるからなあ にゃはは


これも当たり前か



だったら


int zokkouhantei;


for (zokkouhantei = 1; zokkouhantei == 1;) {


zokkouhantei = 0;


int a;

a = 5;


if (a < 0) {


printf("プログラムは実行されました\n");


zokkouhantei = 1;

}

}


最低1回はブロック{}内の命令文が実行される


do{}while文でかきかえることができるんじゃないか?



以下 エクセレントC言語入門より


そ、それは・・・


なんてすばらしいアイデアなの



マックス「



int zokkouhantei;


for (zokkouhantei = 1; zokkouhantei == 1;) {


zokkouhantei = 0;


int a;

a = 5;


if (a < 0) {


printf("プログラムは実行されました\n");


zokkouhantei = 1;

}

}


do{}while文でおきかえるのは簡単じゃないか?


do{}while文の


ブロック{}内には


最低1回は実行される命令文を記述するので

👇


zokkouhantei = 0;


int a;

a = 5;


if (a < 0) {


printf("プログラムは実行されました\n");


zokkouhantei = 1;

👆


記述すればいいんじゃないか?


そして


zokkouhantei = 1;


により


zokkouhantei に1が代入され


zokkouhantei == 1

1==1

となり

             条件式

         🌞zokkouhantei == 1🌞


真の値1を持つことになれば

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

👇


zokkouhantei = 0;


int a;

a = 5;


if (a < 0) {


printf("プログラムは実行されました\n");


zokkouhantei = 1;

👆


が実行されるようにするには


do{}while文の条件式は


zokkouhantei == 1

で決定でいいんじゃないか(註を参照してください)


となると


int zokkouhantei;


for (zokkouhantei = 1; zokkouhantei == 1;) {


int a;

a = 5;


zokkouhantei = 0;


if (a < 0) {


printf("プログラムは実行されました\n");


zokkouhantei = 1;

}

}


int zokkouhantei ;


zokkouhantei = 1


do {


zokkouhantei = 0;


int a;

a = 5;


if (a < 0) {


printf("プログラムは実行されました\n");


zokkouhantei = 1;

}


}while (zokkouhantei == 1);//🌞条件式はこのように最後に記述します セミコロン;を打ち忘れやすいのでご注意ください


となる


これで決定だ~~~~~~


わおう



☆   ☆   ☆



do{}while文



初期化式

条件式

継続処理方法


の3つにより成り立っています


その


初期化式

条件式

継続処理方法


が決定すれば


do{}while文の完成となります


この場合


do{}while文は

👇


int zokkouhantei ;


zokkouhantei = 1


do {


zokkouhantei = 0;


int a;

a = 5;


if (a < 0) {


printf("プログラムは実行されました\n");


zokkouhantei = 1;

}


}while (zokkouhantei == 1);//🌞条件式はこのように最後に記述します セミコロン;を打ち忘れやすいのでご注意ください


👆のように構成されています



初期化式は


int zokkouhantei ;


zokkouhantei = 1;


となっていますが


int zokkouhantei;


for (zokkouhantei = 1; zokkouhantei == 1;) {}文の


初期化式である


int zokkouhantei ;


zokkouhantei = 1;


そのまま

do{}while文の初期化式に設定しています



do{}while文の条件式は

zokkouhantei == 1

となりますが



これも

int zokkouhantei;


for (zokkouhantei = 1; zokkouhantei == 1;) {}文の


条件式


zokkouhantei == 1



そのまま


do{}while文の条件式に設定しています


for (zokkouhantei = 1; zokkouhantei == 1;) {}文



for (zokkouhantei = 1; zokkouhantei == 1;😊ここの部分😊)


には


zokkouhanteiに格納される値を変化させながら繰り返しをおこなうための


zokkouhantei++;のような


継続処理方法のような記述



みあたりませんねw



ですので


do{}while文にも条件式は設定されていません


☆ ☆ ☆








以下 エクセレントC言語入門より



な、 なんて 技の冴え・・・



マックス「


では


for (i = 1; i == 1;){}文をdo{}while文で置き換えたプログラムを


実行だ!



#include <stdio.h>


int main(void) {



int zokkouhantei;



do {


zokkouhantei = 0;


int a;

a = 5;


if (a < 0) {


printf("プログラムは実行されました\n");


zokkouhantei = 1;

}


} while (zokkouhantei == 1);//🌞セミコロン;を打ち忘れやすいのでご注意ください




return 0;

}


プログラムの実行結果



C:\Users\solar\source\repos\Project2\Debug\Project2.exe (プロセス 6280) は、コード 0 で終了しました。

このウィンドウを閉じるには、任意のキーを押してください...



マックス「このプログラムの場合


1回だけ


do {


zokkouhantei = 0;


int a;

a = 5;


if (a < 0) {


printf("プログラムは実行されました\n");


zokkouhantei = 1;

}


} while (zokkouhantei == 1);//🌞セミコロン;を打ち忘れやすいのでご注意ください


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

👇

zokkouhantei = 0;


int a;

a = 5;


if (a < 0) {


printf("プログラムは実行されました\n");


zokkouhantei = 1;

}

👆

は実行される


まず


zokkouhantei = 0;


に実行により


zokkouhanteiに0が代入される


次に


int a;

a = 5;


により


条件式

a < 0


5<0


となり

a < 0

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


if (a < 0) {


printf("プログラムは実行されました\n");


zokkouhantei = 1;

}


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


printf("プログラムは実行されました\n");


zokkouhantei = 1;



実行されることはない


ということは


zokkouhantei は1の値をとることはなく


ブロック{}内の命令文

👇


zokkouhantei = 0;


int a;

a = 5;


if (a < 0) {


printf("プログラムは実行されました\n");


zokkouhantei = 1;

}

👆


の最初の命令文


zokkouhantei = 0;


により


zokkouhanteiに格納されているデータは0のままとなるので



do {


zokkouhantei = 0;


int a;

a = 5;


if (a < 0) {


printf("プログラムは実行されました\n");


zokkouhantei = 1;

}


} while (zokkouhantei == 1);//🌞セミコロン;を打ち忘れやすいのでご注意ください




while (zokkouhantei == 1)

zokkouhantei == 1



0==1


となり


真の値1をもつことはない


よって


2回目の


do {


zokkouhantei = 0;


int a;

a = 5;


if (a < 0) {


printf("プログラムは実行されました\n");


zokkouhantei = 1;

}


} while (zokkouhantei == 1);//🌞セミコロン;を打ち忘れやすいのでご注意ください


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


zokkouhantei = 0;


int a;

a = 5;


if (a < 0) {


printf("プログラムは実行されました\n");


zokkouhantei = 1;

}


の繰り返し実行が起こることはないってわけだ」



以下 エクセレントC言語入門


とても良い説明ね


そんなあなたに(^_-)-☆


いいね!



1クリック!



マックス「い、いやあ そ、そうか・・・


今のプログラムは


aに5が代入された場合だったろう


今度は


aは-5が代入された場合で


for (i = 1; i == 1;){}文をdo{}while文で置き換えたプログラムを


実行だ!



#include <stdio.h>


int main(void) {



int zokkouhantei;



do {


zokkouhantei = 0;


int a;

a =-5;//👈🌞ここです


if (a < 0) {


printf("プログラムは実行されました\n");


zokkouhantei = 1;

}


} while (zokkouhantei == 1);//🌞セミコロン;を打ち忘れやすいのでご注意ください




return 0;

}


プログラムの実行結果



プログラムは実行されました

プログラムは実行されました

プログラムは実行されました

プログラムは実行されました

プログラムは実行されました

プログラムは実行されました

プログラムは実行されました

プログラムは実行されました


マックス「このプログラムの場合


1回は必ず


do {


zokkouhantei = 0;


int a;

a = 5;


if (a < 0) {


printf("プログラムは実行されました\n");


zokkouhantei = 1;

}


} while (zokkouhantei == 1);//🌞セミコロン;を打ち忘れやすいのでご注意ください


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

👇

zokkouhantei = 0;


int a;

a = 5;


if (a < 0) {


printf("プログラムは実行されました\n");


zokkouhantei = 1;

}

👆

は実行されるんだ


なぜかって?


それは・・・そ~いう仕組みなのだ


まず


zokkouhantei = 0;


の実行により


zokkouhanteiに0が代入される


次に


int a;

a =-5;


により


条件式

a < 0


-5<0


となり

a < 0

真の値1をもつことになるので


if (a < 0) {


printf("プログラムは実行されました\n");


zokkouhantei = 1;

}


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


printf("プログラムは実行されました\n");


zokkouhantei = 1;



実行されるのだ


まず


printf("プログラムは実行されました\n");


が実行されると


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


プログラムは実行されました


が表示される


次に


zokkouhantei = 1;


の実行により


zokkouhantei には1が代入される



zokkouhantei は1の値をとるので



do {


zokkouhantei = 0;


int a;

a = 5;


if (a < 0) {


printf("プログラムは実行されました\n");


zokkouhantei = 1;

}


} while (zokkouhantei == 1);//🌞セミコロン;を打ち忘れやすいのでご注意ください




while (zokkouhantei == 1)

zokkouhantei == 1



1==1


となり


真の値1をもつことになる


よって




do {


zokkouhantei = 0;


int a;

a = 5;


if (a < 0) {


printf("プログラムは実行されました\n");


zokkouhantei = 1;

}


} while (zokkouhantei == 1);//🌞セミコロン;を打ち忘れやすいのでご注意ください


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


zokkouhantei = 0;


int a;

a = 5;


if (a < 0) {


printf("プログラムは実行されました\n");


zokkouhantei = 1;

}


の2回目の繰り返し実行が起こることになるわけだ


2回目の繰り返しでは


まず


zokkouhantei = 0;


の実行により


zokkouhanteiに0が代入される


次に


int a;

a =-5;


により


条件式

a < 0


-5<0


となり

a < 0

真の値1をもつことになるので


if (a < 0) {


printf("プログラムは実行されました\n");


zokkouhantei = 1;

}


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


printf("プログラムは実行されました\n");


zokkouhantei = 1;



実行されるのだ


まず


printf("プログラムは実行されました\n");


が実行されると


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


プログラムは実行されました


が表示される


次に


zokkouhantei = 1;


の実行により


zokkouhantei には1が代入される



zokkouhantei は1の値をとるので



do {


zokkouhantei = 0;


int a;

a = 5;


if (a < 0) {


printf("プログラムは実行されました\n");


zokkouhantei = 1;

}


} while (zokkouhantei == 1);//🌞セミコロン;を打ち忘れやすいのでご注意ください




while (zokkouhantei == 1)

zokkouhantei == 1



1==1


となり


真の値1をもつことになる


よって




do {


zokkouhantei = 0;


int a;

a = 5;


if (a < 0) {


printf("プログラムは実行されました\n");


zokkouhantei = 1;

}


} while (zokkouhantei == 1);//🌞セミコロン;を打ち忘れやすいのでご注意ください


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


zokkouhantei = 0;


int a;

a = 5;


if (a < 0) {


printf("プログラムは実行されました\n");


zokkouhantei = 1;

}


の3回目の繰り返し実行が起こることになるわけだ


以下 ずっと


3回目の繰り返し実行

4回目の繰り返し実行

5回目の繰り返し実行

6回目の繰り返し実行

7回目の繰り返し実行

がおこなわれ


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


プログラムは実行されました

プログラムは実行されました

プログラムは実行されました

プログラムは実行されました

プログラムは実行されました

プログラムは実行されました

プログラムは実行されました

プログラムは実行されました


が表示されつづけるわけだ



まあ


while (zokkouhantei == 1)



条件式


zokkouhantei == 1


が真の値1をとり続ける限り


do {


zokkouhantei = 0;


int a;

a = 5;


if (a < 0) {


printf("プログラムは実行されました\n");


zokkouhantei = 1;

}


} while (zokkouhantei == 1);//🌞セミコロン;を打ち忘れやすいのでご注意ください


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


zokkouhantei = 0;


int a;

a = 5;


if (a < 0) {


printf("プログラムは実行されました\n");


zokkouhantei = 1;

}


が実行され続けるので


プログラムの実行結果


プログラムは実行されました

プログラムは実行されました

プログラムは実行されました

プログラムは実行されました

プログラムは実行されました

プログラムは実行されました

プログラムは実行されました

プログラムは実行されました


が表示されつづけるわけだ


うむ


do while{}文の仕組みはこんなところか?」















































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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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