for (zokkouhantei = 1; zokkouhantei == 1;){} 文をはdo{}while文に簡単に置き換えることができます

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


いよいよ


最終段階ね


今さっきのエピソードでは


for (zokkouhantei = 1; zokkouhantei == 1;) {}文を使って


配列変数に適当に格納されている数値データを


大きい数値データから順に


配列変数に


入れ替え直すことに成功したワンw



マックス「いったい、にゃん😽のことお?」




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



先ほどは


for (zokkouhantei = 1; zokkouhantei == 1;){} 文を使って


配列宣言

int hairetu[5];

により

生成される


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]


hairetu[0]に格納されている数値は0

hairetu[1]に格納されている数値は1

hairetu[2]に格納されている数値は2

hairetu[3]に格納されている数値は3

hairetu[4]に格納されている数値は4


と数値が代入されている状態から


hairetu[0]に格納されている数値は4

hairetu[1]に格納されている数値は3

hairetu[2]に格納されている数値は2

hairetu[3]に格納されている数値は1

hairetu[4]に格納されている数値は0



大きな数値から順に数値が代入されている状態に


変更することができたわ



そのプログラムはこちらです


👇

#include <stdio.h>


int main(void) {


int hairetu[5];


hairetu[0] = 0;

hairetu[1] = 1;

hairetu[2] = 2;

hairetu[3] = 3;

hairetu[4] = 4;


int i;


for (i = 0; i < 5; i++) {


printf("%d", hairetu[i]);

}


printf("\n");

//🌞改行しています


int zokkouhantei;



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


zokkouhantei = 0;


int k;


for (k = 0; k < 4; k++) {



if (hairetu[k] <= hairetu[k + 1]) {


int a;


a = hairetu[k];


hairetu[k] = hairetu[k + 1];


hairetu[k + 1] = a;


zokkouhantei = 1;

}


for (i = 0; i < 5; i++) {


printf("%d", hairetu[i]);

}


printf("\n");


}//👈🌞ここまでがfor (k = 0; k < 4; k++) のブロック{}内の命令文です

}//👈🌞ここまでがfor (zokkouhantei = 1; zokkouhantei == 1;) のブロック{}内の命令文です

return 0;

}



プログラムの実行結果


01234

10234☆

12034☆

12304☆

12340☆

21340□

23140□

23410□

23410□

32410〇

34210〇

34210〇

34210〇

43210▽

43210▽

43210▽

43210▽

43210◎

43210◎

43210◎

43210◎


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

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



マックス「おもいだしたにゃ~😸」




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




このプログラムのfor (zokkouhantei = 1; zokkouhantei == 1;){}文は



          do{}while文に



書き換えることができるの



それも


何も考えずに機械的に・・・ね💖



マックス「にゃんと😽


そんなことができるのかにゃん」



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


今のプログラムの


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

👇


int zokkouhantei;



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


zokkouhantei = 0;


int k;


for (k = 0; k < 4; k++) {



if (hairetu[k] <= hairetu[k + 1]) {


int a;


a = hairetu[k];


hairetu[k] = hairetu[k + 1];


hairetu[k + 1] = a;


zokkouhantei = 1;

}


for (i = 0; i < 5; i++) {


printf("%d", hairetu[i]);

}


printf("\n");


}//👈🌞ここまでがfor (k = 0; k < 4; k++) のブロック{}内の命令文です

}//👈🌞ここまでがfor (zokkouhantei = 1; zokkouhantei == 1;) のブロック{}内の命令文です


👆



初期化式は


int zokkouhantei;



zokkouhantei = 1


により構成されているの


条件式は


zokkouhantei == 1


となっているわね


継続処理方法は記述されていないわ


そして


int zokkouhantei;


for (zokkouhantei = 1; zokkouhantei == 1;){}文である




👇


int zokkouhantei;//🌞初期化式


     👇初期化式     👇条件式

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


zokkouhantei = 0;


int k;


for (k = 0; k < 4; k++) {



if (hairetu[k] <= hairetu[k + 1]) {


int a;


a = hairetu[k];


hairetu[k] = hairetu[k + 1];


hairetu[k + 1] = a;


zokkouhantei = 1;

}


for (i = 0; i < 5; i++) {


printf("%d", hairetu[i]);

}


printf("\n");


}//👈🌞ここまでがfor (k = 0; k < 4; k++) のブロック{}内の命令文です

}//👈🌞ここまでがfor (zokkouhantei = 1; zokkouhantei == 1;) のブロック{}内の命令文です


👆



により


最低1回は実行されることになるのが


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

👇

zokkouhantei = 0;


int k;


for (k = 0; k < 4; k++) {



if (hairetu[k] <= hairetu[k + 1]) {


int a;


a = hairetu[k];


hairetu[k] = hairetu[k + 1];


hairetu[k + 1] = a;


zokkouhantei = 1;

}


for (i = 0; i < 5; i++) {


printf("%d", hairetu[i]);

}


printf("\n");


}

👆

というわけなの



マックス「

初期化式

条件式

最低1回は実行されることになる命令文がブロック{}内に記述されている・・・


部品わけができるのか・・・」



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


ところで


do{}while文の仕組みについて考えてみない?



do{}while文は


まず

初期化式を記述する


次に


do{}while文を記述する



do{}whileの{}内には


最低1回は繰り返されることになる命令文を記述する


そして


do{}while(条件式);//🌞セミコロンは忘れやすいのでご注意ください


のように


whileの後に条件式を記述する


という仕組みになっているわね



準備は整ったわ



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

👇


int zokkouhantei;



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


zokkouhantei = 0;


int k;


for (k = 0; k < 4; k++) {



if (hairetu[k] <= hairetu[k + 1]) {


int a;


a = hairetu[k];


hairetu[k] = hairetu[k + 1];


hairetu[k + 1] = a;


zokkouhantei = 1;

}


for (i = 0; i < 5; i++) {


printf("%d", hairetu[i]);

}


printf("\n");


}//👈🌞ここまでがfor (k = 0; k < 4; k++) のブロック{}内の命令文です

}//👈🌞ここまでがfor (zokkouhantei = 1; zokkouhantei == 1;) のブロック{}内の命令文です

return 0;

}

👆



機械的に何も考えず


do{}while文に変換するには


👇


int zokkouhantei;



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


zokkouhantei = 0;


int k;


for (k = 0; k < 4; k++) {



if (hairetu[k] <= hairetu[k + 1]) {


int a;


a = hairetu[k];


hairetu[k] = hairetu[k + 1];


hairetu[k + 1] = a;


zokkouhantei = 1;

}


for (i = 0; i < 5; i++) {


printf("%d", hairetu[i]);

}


printf("\n");


}//👈🌞ここまでがfor (k = 0; k < 4; k++) のブロック{}内の命令文です

}//👈🌞ここまでがfor (zokkouhantei = 1; zokkouhantei == 1;) のブロック{}内の命令文です

return 0;

}

👆



初期化式


int zokkouhantei;



zokkouhantei = 1



まず


int zokkouhantei;


zokkouhantei = 1;


と記述し


次に


do{}while(条件式);


を記述するの


do{}while(条件式);


のブロック{}内には


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



ブロック{}内の


最低1回は繰り返されることになる命令文


zokkouhantei = 0;


int k;


for (k = 0; k < 4; k++) {



if (hairetu[k] <= hairetu[k + 1]) {


int a;


a = hairetu[k];


hairetu[k] = hairetu[k + 1];


hairetu[k + 1] = a;


zokkouhantei = 1;

}


for (i = 0; i < 5; i++) {


printf("%d", hairetu[i]);

}


printf("\n");


}//👈🌞ここまでがfor (k = 0; k < 4; k++) のブロック{}内の命令文です

を記述し


do{}while(条件式);


の条件式の部分に


for (zokkouhantei = 1; zokkouhantei == 1;) の条件式


zokkouhantei == 1



記述すればいいの


となると


do{}while文は次のようになるわ


👇


int zokkouhantei;//🌞初期化式


zokkouhantei = 1;//🌞初期化式


do {


zokkouhantei = 0;


int k;


for (k = 0; k < 4; k++) {



if (hairetu[k] <= hairetu[k + 1]) {


int a;


a = hairetu[k];


hairetu[k] = hairetu[k + 1];


hairetu[k + 1] = a;


zokkouhantei = 1;

}


for (i = 0; i < 5; i++) {


printf("%d", hairetu[i]);

}


printf("\n");


}

} while (zokkouhantei == 1);//🌞条件式


👆

これで完成ね


あとは


この


do{}while文を用いてプログラムを構成して実行してみると


👇



#include <stdio.h>


int main(void) {


int hairetu[5];


hairetu[0] = 0;

hairetu[1] = 1;

hairetu[2] = 2;

hairetu[3] = 3;

hairetu[4] = 4;


int i;


for (i = 0; i < 5; i++) {


printf("%d", hairetu[i]);

}


printf("\n");

//🌞改行しています


int zokkouhantei;//🌞初期化式


zokkouhantei = 1;//🌞初期化式


do {


zokkouhantei = 0;


int k;


for (k = 0; k < 4; k++) {



if (hairetu[k] <= hairetu[k + 1]) {


int a;


a = hairetu[k];


hairetu[k] = hairetu[k + 1];


hairetu[k + 1] = a;


zokkouhantei = 1;

}


for (i = 0; i < 5; i++) {


printf("%d", hairetu[i]);

}


printf("\n");


}

} while (zokkouhantei == 1);//🌞条件式


return 0;

}


プログラムの実行結果


01234

10234

12034

12304

12340

21340

23140

23410

23410

32410

34210

34210

34210

43210

43210

43210

43210

43210

43210

43210

43210


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

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



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



なんと


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



同じ実行結果が得られるのよ


このように簡単に


int zokkouhantei;


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



int zokkouhantei;


zokkouhantei = 1;


do{}while(zokkouhantei == 1);文



に置き換えることができるの



  さあ、みんな 



        未来へはばたいていくのよ


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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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