天国にいけるC言語入門 ヘキサ構造体 ver3.2128
for (zokkouhantei = 1; zokkouhantei == 1;) 文を用いて配列変数の中に適当に格納されている数値を最も大きな数値から順に配列変数に入れ替えてみよう
for (zokkouhantei = 1; zokkouhantei == 1;) 文を用いて配列変数の中に適当に格納されている数値を最も大きな数値から順に配列変数に入れ替えてみよう
以下 エクセレントC言語入門
さあっ
今日はさらに応用よ
for (zokkouhantei = 1; zokkouhantei == 1;) 文を使って
配列変数に適当に格納されている数値データを
大きい数値データから順に
配列変数に
入れ替え直してみましょう
マックス「いったい、にゃんのことお?」
以下 エクセレントC言語入門より
具体的にはね
配列宣言
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
と
大きな数値から順に数値が代入されている状態に
入れ替えるのよ
それを
for (zokkouhantei = 1; zokkouhantei == 1;) 文を使っておこなってみるわね
そのプログラムはこちらです
👇
#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 で終了しました。
このウィンドウを閉じるには、任意のキーを押してください...
マックス「な、なんだ?このプログラムは?
なにがおこなわれているかわからにゃ~い😸
以下 エクセレント言語入門より
このプログラムは
(kの値を
0,1,2,3と変えながら)
配列変数
hairetu[k]に格納されている数値が hairetu[k + 1]より同じか小さければ
hairetu[k]とhairetu[k + 1]に格納されている数値を交換するプログラムなのよ
マックス「はいぃ? もっと優しくぅ」
以下 エクセレント言語入門より
このプログラムではまず
int hairetu[5];
hairetu[0] = 0;
hairetu[1] = 1;
hairetu[2] = 2;
hairetu[3] = 3;
hairetu[4] = 4;
の実行により
int hairetu[5];
により
配列変数
hairetu[0]
hairetu[1]
hairetu[2]
hairetu[3]
hairetu[4]
が生成され
配列変数に
数値データ
0
1
2
3
4
が
hairetu[0] = 0;
hairetu[1] = 1;
hairetu[2] = 2;
hairetu[3] = 3;
hairetu[4] = 4;
と代入されているの
マックス「まずは
配列変数
hairetu[0]
hairetu[1]
hairetu[2]
hairetu[3]
hairetu[4]
に数値データ
0
1
2
3
4
を代入してきたか」
以下 エクセレントC言語入門より
次に
int i;
for (i = 0; i < 5; i++) {
printf("%d", hairetu[i]);
}
を実行することにより
配列変数
hairetu[0]
hairetu[1]
hairetu[2]
hairetu[3]
hairetu[4]
に格納されている数値データ
0
1
2
3
4
を
横に並べて
01234
と表示しているの
マックス「ここまでは簡単じゃないか
幸先いいじゃないか」
以下 エクセレントC言語入門より
次に
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;) のブロック{}内の命令文です
の実行ね
マックス「これが なんだかよくわからないぞ」
以下 エクセレントC言語入門より
まず
int zokkouhantei;
を実行して
int型の変数zokkouhantei
を作製しているの
そうでないと
for (zokkouhantei = 1; zokkouhantei == 1;)
のなかで
int型の変数zokkouhantei
を用いることはできないの
マックス「それは そのとおり
分かりやすい」
以下 エクセレントC言語入門より
では いよいよ
👇
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;) のブロック{}内の命令文です
👆
の実行に移っていくわけね
for (zokkouhantei = 1; zokkouhantei == 1;) {}
は
条件式
zokkouhantei == 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");
}
👆
を実行する命令文なの
マックス「
条件式
zokkouhantei == 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");
}
👆
を繰り返し実行するのか?
for (zokkouhantei = 1; zokkouhantei == 1;)
で
zokkouhantei = 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");
}
👆
が
ずっと
繰り返し実行されることにならないか?
以下 エクセレントC言語入門より
そうなの
ただし
それは
zokkouhantei
に
1が代入されたまま変化しない場合のお話なの
もし
for (zokkouhantei = 1; zokkouhantei == 1;) {}のブロック{}内で
zokkouhantei に
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回目の
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");
}
👆
の繰り返し実行がはじまるのか
??
おや
いきなり
zokkouhantei = 0;
の実行か
あれえ
このままだと
zokkouhanteiに1以外の数値データ0が代入されるので
もう
次の2回目の
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");
}
👆
の繰り返し実行はおこらないんじゃないか?
以下 エクセレントC言語入門より
そのとおりなの
このまま
zokkouhanteiに1以外の数値データ0が代入されたままだと
2回目の
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");
}
👆
の繰り返し実行はおこらないの
だけど
再びブロック{}内で
zokkouhantei = 0;
のあとに
zokkouhantei = 1;
が実行されて
zokkouhanteiに1が代入されたなら
2回目の
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");
}
👆
の繰り返し実行はおこなわれるのよ
マックス「ふ~ん
なんだかよくわからないが
面白い仕組みだな
そして
次は
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");
}
の実行か
これ分かった(*´▽`*)
int k;
は
for (k = 0; k < 4; k++)
のなかで
kが使用できるようにするために
実行されているんだろう
以下 エクセレントC言語入門より
そのとおり!
マックス「
で
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");
}
の実行だが
k=0
k=1
k=2
k=3
の場合ごとに
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");
}
のブロック{}内の命令文
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");
が
繰り返し実行されることになるんだろう?
以下 エクセレントC言語入門より
そう
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++){}のブロック{}内の命令文
👇
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");
👆
を
kの値を
0
1
2
3
と変化させながら
4回繰り返すプログラムなのよ
具体的には
k=0のとき
if (hairetu[k] <= hairetu[k + 1])
の
hairetu[k] <= hairetu[k + 1]
は
hairetu[0] <= hairetu[1]
となるのだけど
hairetu[0] <= hairetu[1]
が成立するなら
hairetu[0]と hairetu[1]に格納されている数値を交換し
そのときの
配列変数
hairetu[0]
hairetu[1]
hairetu[2]
hairetu[3]
hairetu[4]
に格納されている数値を
for (i = 0; i< 5; i++) {
printf("%d", hairetu[i]);
}
をつかって横に並べて表示し
次に
k=1のとき
if (hairetu[k] <= hairetu[k + 1])
の
hairetu[k] <= hairetu[k + 1]
は
hairetu[1] <= hairetu[2]
となるのだけど
hairetu[1] <= hairetu[2]
が成立するなら
hairetu[1]と hairetu[2]に格納されている数値を交換し
そのときの
配列変数
hairetu[0]
hairetu[1]
hairetu[2]
hairetu[3]
hairetu[4]
に格納されている数値を
for (i = 0; i< 5; i++) {
printf("%d", hairetu[i]);
}
をつかって横に並べて表示し
次に
k=2のとき
if (hairetu[k] <= hairetu[k + 1])
の
hairetu[k] <= hairetu[k + 1]
は
hairetu[2] <= hairetu[3]
となるのだけど
hairetu[2] <= hairetu[3]
が成立するなら
hairetu[2]と hairetu[3]に格納されている数値を交換し
そのときの
配列変数
hairetu[0]
hairetu[1]
hairetu[2]
hairetu[3]
hairetu[4]
に格納されている数値を
for (i = 0; i< 5; i++) {
printf("%d", hairetu[i]);
}
をつかって横に並べて表示し
次に
k=3のとき
if (hairetu[k] <= hairetu[k + 1])
の
hairetu[k] <= hairetu[k + 1]
は
hairetu[3] <= hairetu[4]
となるのだけど
hairetu[3] <= hairetu[4]
が成立するなら
hairetu[3]と hairetu[4]に格納されている数値を交換し
そのときの
配列変数
hairetu[0]
hairetu[1]
hairetu[2]
hairetu[3]
hairetu[4]
に格納されている数値を
for (i = 0; i< 5; i++) {
printf("%d", hairetu[i]);
}
をつかって横に並べて表示するというものなのよ
まず
このプログラムでは
配列変数
hairetu[0]
hairetu[1]
hairetu[2]
hairetu[3]
hairetu[4]
に
数値
0
1
2
3
4
が代入されています。
そして
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");
}
の実行が行われます
if (hairetu[k] <= hairetu[k + 1])が注目ポイントなのよ
まず
k=0のとき
if (hairetu[k] <= hairetu[k + 1])
は
if (hairetu[0] <= hairetu[1])
となるわね
hairetu[0]に格納されている数値0
が
hairetu[1]に格納されている数値1
より
小さいので
hairetu[0] <= hairetu[1]
が成立し
int a;
a = hairetu[0];
hairetu[0] = hairetu[1];
hairetu[1] = a;
が実行されることになります
ですので
hairetu[0]に格納されている数値0
と
hairetu[1]に格納されている数値1
が交換されて
hairetu[0]に格納されている数値が1
hairetu[1]に格納されている数値が0
になり
配列変数
hairetu[0]
hairetu[1]
hairetu[2]
hairetu[3]
hairetu[4]
に格納されている数値
は
1
0
2
3
4
になります
次に
zokkouhantei = 1;
の実行により
zokkouhanteiに1が代入されるのね
これで
もう
2回目の
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");
}
👆
の繰り返し実行は確定ね
なぜなら
zokkouhanteiに1が代入されると
for (zokkouhantei = 1; zokkouhantei == 1;)
の条件式
zokkouhantei == 1
は
1==1となり
真の値1をもつことになるからなの
そして
配列変数hairetu[0]に格納されている数値
配列変数hairetu[1]に格納されている数値
配列変数hairetu[2]に格納されている数値
配列変数hairetu[3]に格納されている数値
配列変数hairetu[4]に格納されている数値
を横に並べて表示する命令文
for (i = 0; i< 5; i++) {
printf("%d", hairetu[i]);
}
が実行されることにより
10234
が表示されています。
ビルド実行結果のこの部分
👇
01234
10234👈
をみても
hairetu[0]に格納されている数値0
と
hairetu[1]に格納されている数値1
が交換されて
hairetu[0]に格納されている数値が1
hairetu[1]に格納されている数値が0
になっているのがわかります。
次に
k=1のとき
hairetu[1]に格納されている数値0
が
hairetu[2]に格納されている数値2
より
小さいので
hairetu[1] <= hairetu[2]
が成立し
int a;
a = hairetu[1];
hairetu[1] = hairetu[2];
hairetu[2] = a;
が実行されることになるわね
ですので
hairetu[1]に格納されている数値0
と
hairetu[2]に格納されている数値2
が交換されて
hairetu[1]に格納されている数値が2
hairetu[2]に格納されている数値が0
になります
次に
zokkouhantei = 1;
の実行により
zokkouhanteiに1が代入されるのね
これで
もう
2回目の
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");
}
👆
の繰り返し実行は確定ね
なぜなら
zokkouhanteiに1が代入されると
for (zokkouhantei = 1; zokkouhantei == 1;)
の条件式
zokkouhantei == 1
は
1==1となり
真の値1をもつことになるからなの
そして
配列変数hairetu[0]に格納されている数値
配列変数hairetu[1]に格納されている数値
配列変数hairetu[2]に格納されている数値
配列変数hairetu[3]に格納されている数値
配列変数hairetu[4]に格納されている数値
を横に並べて表示する命令文
for (i = 0; i< 5; i++) {
printf("%d", hairetu[i]);
}
が実行されることにより
12034
が表示されます。
ビルド実行結果のこの部分
👇
01234
10234👈
12034👈
12304
12340
21340
23140
23410
32410
34210
34210
34210
43210
43210
43210
43210
43210
43210
43210
43210
をみても
hairetu[1]に格納されている数値0
と
hairetu[2]に格納されている数値2
が交換されて
hairetu[1]に格納されている数値が2
hairetu[2]に格納されている数値が0
になっているのがわかります。
次に
k=2のとき
hairetu[2]に格納されている数値0
が
hairetu[3]に格納されている数値3
より
小さいので
hairetu[2] <= hairetu[3]
が成立し
int a;
a = hairetu[2];
hairetu[2] = hairetu[3];
hairetu[3] = a;
が実行されることになります
ですので
hairetu[2]に格納されている数値0
と
hairetu[3]に格納されている数値3
が交換されて
hairetu[2] <= hairetu[3]
が成立し
hairetu[2]に格納されている数値は3
hairetu[3]に格納されている数値は0
になります
次に
zokkouhantei = 1;
の実行により
zokkouhanteiに1が代入されるのね
これで
もう
2回目の
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");
}
👆
の繰り返し実行は確定ね
なぜなら
zokkouhanteiに1が代入されると
for (zokkouhantei = 1; zokkouhantei == 1;)
の条件式
zokkouhantei == 1
は
1==1となり
真の値1をもつことになるからなの
そして
配列変数hairetu[0]に格納されている数値
配列変数hairetu[1]に格納されている数値
配列変数hairetu[2]に格納されている数値
配列変数hairetu[3]に格納されている数値
配列変数hairetu[4]に格納されている数値
を横に並べて表示する命令文
for (i = 0; i< 5; i++) {
printf("%d", hairetu[i]);
}
が実行されることにより
12304
が表示されます。
ビルド実行結果のこの部分
👇
01234
10234
12034👈
12304👈
12340
21340
23140
23410
32410
34210
34210
34210
43210
43210
43210
43210
43210
43210
43210
43210
をみても
hairetu[2]に格納されている数値0
と
hairetu[3]に格納されている数値3
が交換されて
hairetu[2]に格納されている数値が3
hairetu[3]に格納されている数値が0
になっているのがわかります。
次に
k=3のとき
hairetu[3]に格納されている数値0
が
hairetu[4]に格納されている数値4
より
小さいので
hairetu[3] <= hairetu[4]
が成立し
int a;
a = hairetu[3];
hairetu[3] = hairetu[4];
hairetu[4] = a;
が実行されることになるよね
ですので
hairetu[3]に格納されている数値0
と
hairetu[4]に格納されている数値4
が交換されて
hairetu[3] <= hairetu[4]
が成立し
hairetu[3]に格納されている数値が4
hairetu[4]に格納されている数値が0
になります
次に
zokkouhantei = 1;
の実行により
zokkouhanteiに1が代入されるのね
これで
もう
2回目の
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");
}
👆
の繰り返し実行は確定ね
なぜなら
zokkouhanteiに1が代入されると
for (zokkouhantei = 1; zokkouhantei == 1;)
の条件式
zokkouhantei == 1
は
1==1となり
真の値1をもつことになるからなの
そして
配列変数hairetu[0]に格納されている数値
配列変数hairetu[1]に格納されている数値
配列変数hairetu[2]に格納されている数値
配列変数hairetu[3]に格納されている数値
配列変数hairetu[4]に格納されている数値
を横に並べて表示する命令文
for (i = 0; i< 5; i++) {
printf("%d", hairetu[i]);
}
が実行されることにより
12340
が表示されます。
ビルド実行結果のこの部分
👇
01234
10234
12034
12304👈
12340👈
21340
23140
23410
32410
34210
34210
34210
43210
43210
43210
43210
43210
43210
43210
43210
をみても
hairetu[3]に格納されている数値0
と
hairetu[4]に格納されている数値4
が交換されて
hairetu[4]に格納されている数値は4
hairetu[3]に格納されている数値は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");
}
return 0;
}
が実行されると
プログラムの実行結果
01234
10234👈
12034👈
12304👈
12340👈
21340
23140
23410
32410
34210
34210
34210
43210
43210
43210
43210
43210
43210
43210
43210
の👈の部分が表示されることになるの
4回数値交換が行われて
1番小さな数値0を1番右端に移動させて表示することができました
👇
01234
10234
12034
12304
12340👈1番小さな数値0が右端に来ました
👆
このとき
配列変数
hairetu[0] 😊
hairetu[1] 😊
hairetu[2] 😊
hairetu[3] 😊
hairetu[4] 😊
に格納されている数値は
0
1
2
3
4
から
1
2
3
4
0
になっています。
少し変化したね(´▽`*)
😊ここで😊
配列変数
hairetu[0]
hairetu[1]
hairetu[2]
hairetu[3]
hairetu[4]
に格納されている数値が
1
2
3
4
0
と格納されている
この状態で
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");
}
👆
の繰り返し実行は終了となります
zokkouhantei = 1;
が実行されて
zokkouhanteiに1が代入されているので
for (zokkouhantei = 1; zokkouhantei == 1;) の
条件式
zokkouhantei ==1
は
1==1となり
真の値1
をもつことになり
2回目の
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");
}
👆
の繰り返し実行が始まることになります
配列変数
hairetu[0]
hairetu[1]
hairetu[2]
hairetu[3]
hairetu[4]
に格納されている数値が
1
2
3
4
0
と格納されている状態で
2回目の
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");
}
👆
の繰り返し実行が始まるとどうなるのかしら
まず
zokkouhantei = 0;
により
zokkouhanteiに0が代入されることになるわね
次に
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]);
}
の実行となるの
kの値を
0,1,2,3と変えながら
”hairetu[k]に格納されている数値が hairetu[k + 1]より小さければ
hairetu[k]とhairetu[k + 1]に格納されている数値を交換するプログラム”
が実行されるのね
まず
k=0のとき
if (hairetu[k] <= hairetu[k + 1]) {
int a;
a = hairetu[k];
hairetu[k] = hairetu[k + 1];
hairetu[k + 1] = a;
zokkouhantei=0;
}
for (i = 0; i< 5; i++) {
printf("%d", hairetu[i]);
}
printf("\n");
}
の
kに0が代入された
if (hairetu[0] <= hairetu[1]) {
int a;
a = hairetu[0];
hairetu[0] = hairetu[1];
hairetu[1] = a;
zokkouhantei=1;
}
for (i = 0; i< 5; i++) {
printf("%d", hairetu[i]);
}
printf("\n");
}
が実行されることになります
hairetu[0]に格納されている数値1
が
hairetu[1]に格納されている数値2
より
小さいので
if (hairetu[0] <= hairetu[1])
の
hairetu[0]<=hairetu[1]
が成立し
hairetu[0]に格納されている数値1
と
hairetu[1]に格納されている数値2
が交換されて
hairetu[0]に格納されている数値が2
hairetu[1]に格納されている数値が1
になっているのが
ビルド実行結果のこの部分
👇
01234
10234
12034
12304
12340👈
21340👈
23140
23410
23410
34210
34210
34210
43210
43210
43210
43210
43210
43210
43210
43210
をみてもわかります。
次に
zokkouhantei=1;
の実行により
zokkouhanteiには1が代入されることになります
この時点でもう
3回目の
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");
}
👆
の繰り返し実行の確定なの
なぜなら
zokkouhanteiに1が代入されると
for (zokkouhantei = 1; zokkouhantei == 1;)
の条件式
zokkouhantei == 1
は
1==1となり
真の値1をもつことになるからなの
for (i = 0; i < 5; i++) {
printf("%d", hairetu[i]);
}
により
プログラムの実行結果
👇
01234
10234
12034
12304
12340
21340👈
23140
23410
23410
34210
34210
34210
43210
43210
43210
43210
43210
43210
43210
43210
の👈の部分が表示されるのね
次に
k=1のとき
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");
}
の
kに1が代入された
if (hairetu[1] <= hairetu[2]) {
int a;
a = hairetu[1];
hairetu[1] = hairetu[2];
hairetu[2] = a;
zokkouhantei=1;
}
for (i = 0; i< 5; i++) {
printf("%d", hairetu[i]);
}
printf("\n");
}
が実行されることになります
hairetu[1]に格納されている数値1
が
hairetu[2]に格納されている数値3
より
小さいので
if (hairetu[1] <= hairetu[2])
の
hairetu[1]<=hairetu[2]
が成立し
hairetu[1]に格納されている数値1
と
hairetu[2]に格納されている数値3
が交換されて
hairetu[1]に格納されている数値が3
hairetu[2]に格納されている数値が1
になっているのが
ビルド実行結果のこの部分
👇
01234
10234
12034
12304
12340
21340👈
23140👈
23410
23410
34210
34210
34210
43210
43210
43210
43210
43210
43210
43210
43210
をみてもわかります。
次に
zokkouhantei = 1;
の実行により
zokkouhanteiに1が代入されるのね
この時点でもう
3回目の
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");
}
👆
の繰り返し実行の確定なの
なぜなら
zokkouhanteiに1が代入されると
for (zokkouhantei = 1; zokkouhantei == 1;)
の条件式
zokkouhantei == 1
は
1==1となり
真の値1をもつことになるからなの
そして
for (i = 0; i < 5; i++) {
printf("%d", hairetu[i]);
}
の実行により
プログラムの実行結果
👇
01234
10234
12034
12304
12340
21340
23140👈
23410
23410
34210
34210
34210
43210
43210
43210
43210
43210
43210
43210
43210
の👈の部分が表示されるのね
次に
k=2のとき
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");
}
の
kに2が代入された
if (hairetu[2] <= hairetu[3]) {
int a;
a = hairetu[2];
hairetu[2] = hairetu[3];
hairetu[3] = a;
zokkouhantei=1;
}
for (i = 0; i< 5; i++) {
printf("%d", hairetu[i]);
}
printf("\n");
}
が実行されることになります
hairetu[2]に格納されている数値1
が
hairetu[3]に格納されている数値4
より
小さいので
if (hairetu[2] <= hairetu[3])
の
hairetu[2]<=hairetu[3]
が成立し
hairetu[2]に格納されている数値1
と
hairetu[3]に格納されている数値4
が交換されて
hairetu[2]に格納されている数値が4
hairetu[3]に格納されている数値が1
になっているのが
ビルド実行結果のこの部分
👇
01234
10234
12034
12304
12340
21340
23140👈
23410👈
23410
34210
34210
34210
43210
43210
43210
43210
43210
43210
43210
43210
をみてもわかります。
次に
zokkouhantei = 1;
の実行により
zokkouhanteiに1が代入されるのね
この時点でもう
3回目の
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");
}
👆
の繰り返し実行の確定なの
なぜなら
zokkouhanteiに1が代入されると
for (zokkouhantei = 1; zokkouhantei == 1;)
の条件式
zokkouhantei == 1
は
1==1となり
真の値1をもつことになるからなの
そして
for (i = 0; i < 5; i++) {
printf("%d", hairetu[i]);
}
により
プログラムの実行結果
👇
01234
10234
12034
12304
12340
21340
23140
23410👈
23410
34210
34210
34210
43210
43210
43210
43210
43210
43210
43210
43210
の👈の部分が表示されるのね
さてさて
このとき
配列変数
hairetu[0]に格納されている数値は2
hairetu[1]に格納されている数値は3
hairetu[2]に格納されている数値は4
hairetu[3]に格納されている数値は1
hairetu[4]に格納されている数値は0
となっています
次に
k=3のとき
if (hairetu[k] <= hairetu[k + 1]) {
int a;
a = hairetu[k];
hairetu[k] = hairetu[k + 1];
hairetu[k + 1] = a;
zokkouhantei=0;
}
for (i = 0; i< 5; i++) {
printf("%d", hairetu[i]);
}
printf("\n");
}
の
kに3が代入された
if (hairetu[3] <= hairetu[4]) {
int a;
a = hairetu[3];
hairetu[3] = hairetu[4];
hairetu[3] = a;
zokkouhantei=1;
}
for (i = 0; i< 5; i++) {
printf("%d", hairetu[i]);
}
printf("\n");
}
が実行されることになる・・・のですが
hairetu[3]に格納されている数値1
が
hairetu[4]に格納されている数値0
を比較してみると
hairetu[3]に格納されている数値1
は
hairetu[4]に格納されている数値0
より小さくないので
if (hairetu[3] <= hairetu[4])
の
hairetu[3]<=hairetu[4]は成立せず
if (hairetu[3] <= hairetu[4]){}のブロック{}内の命令文
👇
int a;
a = hairetu[3];
hairetu[3] = hairetu[4];
hairetu[3] = a;
zokkouhantei=1;
}
は実行されないので
hairetu[3]に格納されている数値1
と
hairetu[4]に格納されている数値0
は交換されません。
zokkouhantei=1;
も実行されませんが
zokkouhanteiには1が代入されたままですね
ですので
3回目の
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");
}
👆
の繰り返し実行の確定なの
なぜなら
zokkouhanteiに1が代入されると
for (zokkouhantei = 1; zokkouhantei == 1;)
の条件式
zokkouhantei == 1
は
1==1となり
真の値1をもつことになるからなの
そして
配列変数
hairetu[0]に格納されている数値は2
hairetu[1]に格納されている数値は3
hairetu[2]に格納されている数値は4
hairetu[3]に格納されている数値は1
hairetu[4]に格納されている数値は0
のまま変化しないことが
続く
配列変数hairetu[0]に格納されている数値
配列変数hairetu[1]に格納されている数値
配列変数hairetu[2]に格納されている数値
配列変数hairetu[3]に格納されている数値
配列変数hairetu[4]に格納されている数値
を並べて表示する命令文
for (i = 0; i< 5; i++) {
printf("%d", hairetu[i]);
}
の実行結果をみてもわかります
プログラムの実行結果は
01234
10234
12034
12304
12340
21340
23140
23410👈
32410👈
34210
34210
34210
43210
43210
43210
43210
43210
43210
43210
43210
となっていますね。
確かに
配列変数
hairetu[0]に格納されている数値は2
hairetu[1]に格納されている数値は3
hairetu[2]に格納されている数値は4
hairetu[3]に格納されている数値は1
hairetu[4]に格納されている数値は0
のまま変化していませんね。
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番小さな数値0を
1番右端に移動させることができましたが
2回目の
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");
}
👆
の繰り返し実行により
0につづいて
2番目に小さな数値1を
右端から2番目に
移動させて表示することができました
このとき
配列変数
hairetu[0]
hairetu[1]
hairetu[2]
hairetu[3]
hairetu[4]
に格納されている数値は
2
3
4
1
0
になっています。
いいところまできたじゃない(( ̄ー ̄)ニヤリ)
この
配列変数
hairetu[0]
hairetu[1]
hairetu[2]
hairetu[3]
hairetu[4]
に格納されている数値が
2
3
4
1
0
の状態で
3回目の
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");
}
👆
の繰り返し実行が始まるわよ
まずは
恒例の
zokkouhantei = 0;
の実行ね
これで
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");
}
の実行ね
kの値を
0,1,2,3と変えながら
hairetu[k]に格納されている数値が hairetu[k + 1]より小さければ
hairetu[k]とhairetu[k + 1]に格納されている数値を交換するプログラムが実行されるのね
まず
k=0のとき
if (hairetu[k] <= hairetu[k + 1]) {
int a;
a = hairetu[k];
hairetu[k] = hairetu[k + 1];
hairetu[k + 1] = a;
zokkouhantei=1;
}
のkに0が代入された
if (hairetu[0] <= hairetu[1]) {
int a;
a = hairetu[0];
hairetu[0] = hairetu[1];
hairetu[1] = a;
zokkouhantei=1;
}
が実行されることになります
if (hairetu[k] <= hairetu[k + 1])
は
if (hairetu[0] <= hairetu[1])
を表すことになります
hairetu[0]に格納されている数値2
が
hairetu[1]に格納されている数値3
より
小さいので
hairetu[0]<=hairetu[1]
が成立し
if (hairetu[0] <= hairetu[1])に続くブロック内 {}の命令文
int a;
a = hairetu[0];
hairetu[0] = hairetu[1];
hairetu[1] = a;
zokkouhantei=1;
が実行されることになります
hairetu[0]に格納されている数値2
と
hairetu[1]に格納されている数値3
が交換されて
hairetu[0]に格納されている数値が3
hairetu[1]に格納されている数値が2
になっているのが
ビルド実行結果のこの部分
👇
01234
10234
12034
12304
12340
21340
23140
23410👈
32410👈
34210
34210
34210
43210
43210
43210
43210
43210
43210
43210
43210
をみてもわかります。
次に
zokkouhantei=1;
により
zokkouhanteiに1が代入されることになります
これで
もう
4回目の
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");
}
👆
の繰り返し実行は確定ね
なぜなら
zokkouhanteiに1が代入されると
for (zokkouhantei = 1; zokkouhantei == 1;)
の条件式
zokkouhantei == 1
は
1==1となり
真の値1をもつことになるからなの
次に
k=1のとき
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");
}
の
kに1が代入された
if (hairetu[1] <= hairetu[2]) {
int a;
a = hairetu[1];
hairetu[1] = hairetu[2];
hairetu[1] = a;
zokkouhantei=1;
}
for (i = 0; i< 5; i++) {
printf("%d", hairetu[i]);
}
printf("\n");
}
が実行されることになります
if (hairetu[k] <= hairetu[k + 1])
は
if (hairetu[1] <= hairetu[2])
を表すことになります
hairetu[1]に格納されている数値2
が
hairetu[2]に格納されている数値4
より
小さいので
hairetu[1]<=hairetu[2]
が成立し
if (hairetu[1] <= hairetu[2])に続くブロック{}内の命令文
👇
int a;
a = hairetu[1];
hairetu[1] = hairetu[2];
hairetu[1] = a;
zokkouhantei=1;
が実行されることになります
hairetu[1]に格納されている数値2
と
hairetu[2]に格納されている数値4
が交換されて
hairetu[1]に格納されている数値が4
hairetu[2]に格納されている数値が2
になっているのが
ビルド実行結果のこの部分
👇
01234
10234
12034
12304
12340
21340
23140
23410👈
32410👈
34210
34210
34210
43210
43210
43210
43210
43210
43210
43210
43210
をみてもわかります。
zokkouhantei=1;
の実行により
zokkouhanteiに1が代入されることになります
これで
もう
4回目の
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");
}
👆
繰り返し実行は確定ね
なぜなら
zokkouhanteiに1が代入されると
for (zokkouhantei = 1; zokkouhantei == 1;)
の条件式
zokkouhantei == 1
は
1==1となり
真の値1をもつことになるからなの
このとき
配列変数
hairetu[0]に格納されている数値は3
hairetu[1]に格納されている数値は4
hairetu[2]に格納されている数値は2
hairetu[3]に格納されている数値は1
hairetu[4]に格納されている数値は0
となっています
for (i = 0; i < 5; i++) {
printf("%d", hairetu[i]);
}
の実行により
プログラムの実行結果の
👇
01234
10234
12034
12304
12340
21340
23140
23410
32410
34210👈
34210
34210
43210
43210
43210
43210
43210
43210
43210
43210
👈で示す部分が表示されるのね
次に
k=2のとき
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");
}
の
kに2が代入された
if (hairetu[2] <= hairetu[3]) {
int a;
a = hairetu[2];
hairetu[2] = hairetu[3];
hairetu[2] = a;
zokkouhantei=1;
}
for (i = 0; i< 5; i++) {
printf("%d", hairetu[i]);
}
printf("\n");
}
が実行されることになります
if (hairetu[k] <= hairetu[k + 1])
は
if (hairetu[2] <= hairetu[3])
を表すことになります
このとき
if (hairetu[2] <= hairetu[3])に続くブロック{}内の命令文
👇
int a;
a = hairetu[2];
hairetu[2] = hairetu[3];
hairetu[2] = a;
zokkouhantei=1;
👆
は実行されません
なぜなら
hairetu[2]に格納されている数値2
と
hairetu[3]に格納されている数値1
を比較してみると
hairetu[2]に格納されている数値2
は
hairetu[3]に格納されている数値1
より小さくないので
hairetu[2]<=hairetu[3]
が成立しないからです
ですので
if (hairetu[2] <= hairetu[3])に続くブロック{}内の命令文
👇
int a;
a = hairetu[2];
hairetu[2] = hairetu[3];
hairetu[2] = a;
zokkouhantei=1;
👆
は実行されず
hairetu[2]に格納されている数値2
と
hairetu[3]に格納されている数値1
は交換されません。
ですので
配列変数hairetu[0]に格納されている数値は3
配列変数hairetu[1]に格納されている数値は4
配列変数hairetu[2]に格納されている数値は2
配列変数hairetu[3]に格納されている数値は1
配列変数hairetu[4]に格納されている数値は0
のまま変化しないことが
続いて実行される
配列変数hairetu[0]に格納されている数値
配列変数hairetu[1]に格納されている数値
配列変数hairetu[2]に格納されている数値
配列変数hairetu[3]に格納されている数値
配列変数hairetu[4]に格納されている数値
を並べて表示する命令文
for (i = 0; i< 5; i++) {
printf("%d", hairetu[i]);
}
の実行結果をみてもわかります
ビルド実行結果は
01234
10234
12034
12304
12340
21340
23140
23410
32410
34210👈
34210👈
34210
43210
43210
43210
43210
43210
43210
43210
43210
となります
配列変数hairetu[0]
配列変数hairetu[1]
配列変数hairetu[2]
配列変数hairetu[3]
配列変数hairetu[4]
に格納されている数値データは変化していませんね
このとき
配列変数hairetu[0]に格納されている数値は3
配列変数hairetu[1]に格納されている数値は4
配列変数hairetu[2]に格納されている数値は2
配列変数hairetu[3]に格納されている数値は1
配列変数hairetu[4]に格納されている数値は0
となっています
zokkouhantei=1;
も実行されませんが
すでに
zokkouhanteiには1が代入されていますね
ですので
4回目の
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");
}
👆
繰り返し実行は確定ね
なぜなら
zokkouhanteiに1が代入されると
for (zokkouhantei = 1; zokkouhantei == 1;)
の条件式
zokkouhantei == 1
は
1==1となり
真の値1をもつことになるからなの
次に
k=3のとき
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");
}
の
ブロック{}内の命令文
👇
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");
👆
が実行されることになります
kに3が代入された
if (hairetu[3] <= hairetu[4]) {
int a;
a = hairetu[2];
hairetu[2] = hairetu[3];
hairetu[2] = a;
zokkouhantei=1;
}
for (i = 0; i< 5; i++) {
printf("%d", hairetu[i]);
}
printf("\n");
}
が実行されることになるの
if (hairetu[k] <= hairetu[k + 1])
は
if (hairetu[3] <= hairetu[4])
を表すことになります
hairetu[3]に格納されている数値2
と
hairetu[4]に格納されている数値1
を比較してみると
hairetu[3]に格納されている数値2
は
hairetu[4]に格納されている数値1
より小さくないので
if (hairetu[3] <= hairetu[4]) {
int a;
a = hairetu[2];
hairetu[2] = hairetu[3];
hairetu[2] = a;
zokkouhantei=1;
}
のブロック{}内の命令文
int a;
a = hairetu[2];
hairetu[2] = hairetu[3];
hairetu[2] = a;
zokkouhantei=1;
が実行されることはありません
ですので
hairetu[3]に格納されている数値2
と
hairetu[4]に格納されている数値1
は交換されません。
配列変数hairetu[0]に格納されている数値は3
配列変数hairetu[1]に格納されている数値は4
配列変数hairetu[2]に格納されている数値は2
配列変数hairetu[3]に格納されている数値は1
配列変数hairetu[4]に格納されている数値は0
のまま変化しないことが
続いて実行される
配列変数hairetu[0]に格納されている数値
配列変数hairetu[1]に格納されている数値
配列変数hairetu[2]に格納されている数値
配列変数hairetu[3]に格納されている数値
配列変数hairetu[4]に格納されている数値
を並べて表示する命令文
for (i = 0; i< 5; i++) {
printf("%d", hairetu[i]);
}
の実行結果をみてもわかります
ビルド実行結果は
01234
10234
12034
12304
12340
21340
23140
23410
32410
34210
34210👈
34210👈
43210
43210
43210
43210
43210
43210
43210
43210
となっていますね
配列変数hairetu[0]
配列変数hairetu[1]
配列変数hairetu[2]
配列変数hairetu[3]
配列変数hairetu[4]
に格納されている数値は
3
4
2
1
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");
}
のブロック}内の命令文を
3回も実行してきました
kの値を
0,1,2,3と変えながら
hairetu[k]に格納されている数値が hairetu[k + 1]より小さければ
hairetu[k]とhairetu[k + 1]に格納されている数値を交換するプログラムを
🌞3回も🌞
繰り返して実行してきましたが
1回目の繰り返しのときは
12340
のように
1番小さな数値0を1番右端に移動させることができました。
そののち
2回目の繰り返しのときは
23410
のように
2番目に小さな数値1を
0の左隣の
右端から2番目に移動させることができました。
そののち
3回目の繰り返しのときは
34210
のように
3番目に小さな数値2を
1の左隣の
右端から3番目に
移動させて
表示することができました
このとき
配列変数
hairetu[0]
hairetu[1]
hairetu[2]
hairetu[3]
hairetu[4]
に格納されている数値は
3
4
2
1
0
になっています。
ふふっ
おやおや~?
だんだん
配列変数
hairetu[0]
hairetu[1]
hairetu[2]
hairetu[3]
hairetu[4]
に
大きな数値から順に数値が格納されだしているとおもいませんか?
きのせいかな?
ふふつ
さて
配列変数
hairetu[0]
hairetu[1]
hairetu[2]
hairetu[3]
hairetu[4]
に
3
4
2
1
0
が格納されている状態で
4回目の
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");
}
👆
の繰り返し実行が始まることになります
まずは
zokkouhantei = 0;
の実行ですね
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");
の実行ね
まず
k=0のとき
if (hairetu[k] <= hairetu[k + 1]) {
int a;
a = hairetu[k];
hairetu[k] = hairetu[k + 1];
hairetu[k + 1] = a;
zokkouhantei = 1;
}
のkに0が代入された
if (hairetu[0] <= hairetu[1]) {
int a;
a = hairetu[0];
hairetu[0] = hairetu[1];
hairetu[1] = a;
zokkouhantei = 1;
}
が実行されることになります
if (hairetu[k] <= hairetu[k + 1])
は
if (hairetu[0] <= hairetu[1])
を表すことになります
hairetu[0]に格納されている数値3
が
hairetu[1]に格納されている数値4
より
小さいので
hairetu[0]<=hairetu[1]
が成立し
if (hairetu[0] <= hairetu[1])につづくブロック{}内の命令文
👇
int a;
a = hairetu[0];
hairetu[0] = hairetu[1];
hairetu[1] = a;
zokkouhantei = 1;
👆
が実行されることになります
ですので
hairetu[0]に格納されている数値3
と
hairetu[1]に格納されている数値4
が交換されて
hairetu[0]に格納されている数値が4
hairetu[1]に格納されている数値が3
になっているのが
プログラムの実行結果のこの部分
👇
01234
10234
12034
12304
12340
21340
23140
23410
32410
34210
34210
34210👈
43210👈
43210
43210
43210
43210
43210
43210
43210
をみてもわかります。
____________________________________________________
この時点で
配列変数
hairetu[0]に格納されている数値は4
hairetu[1]に格納されている数値が3
hairetu[2]に格納されている数値が2
hairetu[3]に格納されている数値が1
hairetu[4]に格納されている数値が0
と
なっています。
4回目の
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");
}
👆
の繰り返し実行により
すなわち
kの値を
0,1,2,3と変えながら
"hairetu[k]に格納されている数値が hairetu[k + 1]より小さければ
hairetu[k]とhairetu[k + 1]に格納されている数値を交換するプログラム"
を
4回実行することにより
配列変数
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
と数値が格納されている状態へ
数値の大きな順に
配列変数に格納されている数値を入れ替えることができました。
____________________________________________________
まだ
k=0,1,2,3と数値を変えていく中の
k=0
の段階で
配列変数hairetu[0]に格納されている数値は4
配列変数hairetu[1]に格納されている数値は3
配列変数hairetu[2]に格納されている数値は2
配列変数hairetu[3]に格納されている数値は1
配列変数hairetu[4]に格納されている数値は0
になったね
次に実行される命令文は
zokkouhantei = 1;
なので
5回目の
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");
}
👆
の繰り返し実行確定ね
なぜなら
zokkouhanteiに1が代入されると
for (zokkouhantei = 1; zokkouhantei == 1;)
の条件式
zokkouhantei == 1
は
1==1となり
真の値1をもつことになるからなの
そして
for (i = 0; i < 5; i++) {
printf("%d", hairetu[i]);
}
の実行により
プログラムの実行結果のこの部分
👇
01234
10234
12034
12304
12340
21340
23140
23410
32410
34210
34210
34210
43210👈
43210
43210
43210
43210
43210
43210
43210
の
43210👈
が表示されることになるの
k=1のとき
if (hairetu[k] <= hairetu[k + 1]) {
int a;
a = hairetu[k];
hairetu[k] = hairetu[k + 1];
hairetu[k + 1] = a;
zokkouhantei=1;
}
のkに1が代入された
if (hairetu[1] <= hairetu[2]) {
int a;
a = hairetu[1];
hairetu[1] = hairetu[2];
hairetu[2] = a;
zokkouhantei=1;
}
が実行されることになります
if (hairetu[k] <= hairetu[k + 1])
は
if (hairetu[1] <= hairetu[2])
を表すことになります
hairetu[1]に格納されている数値3
は
hairetu[2]に格納されている数値2
より
大きいので
hairetu[1]<=hairetu[2]
は成立しないので
if (hairetu[1] <= hairetu[2])に続くブロック{}内の命令文
👇
int a;
a = hairetu[1];
hairetu[1] = hairetu[2];
hairetu[2] = a;
zokkouhantei=1;
👆
が実行されることはありません
ですので
hairetu[1]に格納されている数値3
と
hairetu[2]に格納されている数値2
が交換されることはありませんし
zokkouhantei=1;
👆
が実行されることもありませんが
すでに
zokkouhanteiには1が代入されています
ですので
5回目の
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");
}
👆
の繰り返し実行は確定ね
なぜなら
zokkouhanteiに1が代入されると
for (zokkouhantei = 1; zokkouhantei == 1;)
の条件式
zokkouhantei == 1
は
1==1となり
真の値1をもつことになるからなの
それとは関係なく
for (i = 0; i < 5; i++) {
printf("%d", hairetu[i]);
}
は実行されるので
プログラムの実行結果のこの部分
👇
01234
10234
12034
12304
12340
21340
23140
23410
32410
34210
34210
34210
43210
43210👈
43210
43210
43210
43210
43210
43210
の
43210👈
が表示されることになるの
k=2のとき
if (hairetu[k] <= hairetu[k + 1]) {
int a;
a = hairetu[k];
hairetu[k] = hairetu[k + 1];
hairetu[k + 1] = a;
zokkouhantei=1;
}
のkに2が代入された
if (hairetu[2] <= hairetu[3]) {
int a;
a = hairetu[2];
hairetu[2] = hairetu[3];
hairetu[3] = a;
zokkouhantei=1;
}
が実行されることになります
if (hairetu[k] <= hairetu[k + 1])
は
if (hairetu[2] <= hairetu[3])
を表すことになります
hairetu[2]に格納されている数値2
は
hairetu[3]に格納されている数値1
より
大きいので
hairetu[2]<=hairetu[3]
は成立しないので
if (hairetu[2] <= hairetu[3])に続くブロック{}内の命令文
👇
int a;
a = hairetu[2];
hairetu[2] = hairetu[3];
hairetu[3] = a;
zokkouhantei=1;
👆
が実行されることはありません
ですので
hairetu[2]に格納されている数値2
と
hairetu[3]に格納されている数値1
が交換されることはありません
zokkouhantei=1;
👆
が実行されることもありませんが
すでに
zokkouhanteiには1が代入されています
ですので
5回目の
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");
}
👆
の繰り返し実行は確定ね
なぜなら
zokkouhanteiに1が代入されると
for (zokkouhantei = 1; zokkouhantei == 1;)
の条件式
zokkouhantei == 1
は
1==1となり
真の値1をもつことになるからなの
それとは関係なく
for (i = 0; i < 5; i++) {
printf("%d", hairetu[i]);
}
は実行されるので
プログラムの実行結果のこの部分
👇
01234
10234
12034
12304
12340
21340
23140
23410
32410
34210
34210
34210
43210
43210
43210👈
43210
43210
43210
43210
43210
の
43210👈
が表示されることになるの
次に
k=3のとき
if (hairetu[k] <= hairetu[k + 1]) {
int a;
a = hairetu[k];
hairetu[k] = hairetu[k + 1];
hairetu[k + 1] = a;
zokkouhantei=1;
}
のkに3が代入された
if (hairetu[3] <= hairetu[4]) {
int a;
a = hairetu[3];
hairetu[3] = hairetu[4];
hairetu[4] = a;
zokkouhantei=1;
}
が実行されることになります
if (hairetu[k] <= hairetu[k + 1])
は
if (hairetu[3] <= hairetu[4])
を表すことになります
hairetu[3]に格納されている数値3
は
hairetu[4]に格納されている数値1
より
大きいので
hairetu[3]<=hairetu[4]
は成立しないので
if (hairetu[3] <= hairetu[4])に続くブロック{}内の命令文
👇
int a;
a = hairetu[3];
hairetu[3] = hairetu[4];
hairetu[4] = a;
zokkouhantei=1;
👆
が実行されることはありません
hairetu[3]に格納されている数値2
と
hairetu[4]に格納されている数値1
が交換されることはありません
zokkouhantei=1;
👆
が実行されることもありませんが
すでに
zokkouhanteiには1が代入されています
ですので
5回目の
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");
}
👆
繰り返し実行は確定ね
なぜなら
zokkouhanteiに1が代入されると
for (zokkouhantei = 1; zokkouhantei == 1;)
の条件式
zokkouhantei == 1
は
1==1となり
真の値1をもつことになるからなの
それとは関係なく
for (i = 0; i < 5; i++) {
printf("%d", hairetu[i]);
}
は実行されるので
プログラムの実行結果のこの部分
👇
01234
10234
12034
12304
12340
21340
23140
23410
32410
34210
34210
34210
43210
43210
43210
43210👈
43210
43210
43210
43210
43210👈
が表示されることになるの
k=1
k=2
k=3
の場合は
配列変数hairetu[0]に格納されている数値は4
配列変数hairetu[1]に格納されている数値は3
配列変数hairetu[2]に格納されている数値は2
配列変数hairetu[3]に格納されている数値は1
配列変数hairetu[4]に格納されている数値は0
のままです
とりあえず
4回
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");
}
👆
の繰り返し実行により
いいかえるなら
4回
kの値を0,1,2,3と変えながら
hairetu[k]に格納されている数値が hairetu[k + 1]より小さければ
hairetu[k]とhairetu[k + 1]に格納されている数値を交換するプログラム
を実行することにより
最初の目的だった
配列変数
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
と数値が格納されている状態に
変更することができました
なにはともあれ
これで
4回目の
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");
}
👆
の繰り返し実行の終了です
ついいまの
4回目の
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");
}
👆
の繰り返し
において
kの値を
0
1
2
3
と変えながら
if (hairetu[k] <= hairetu[k + 1]) {
int a;
a = hairetu[k];
hairetu[k] = hairetu[k + 1];
hairetu[k + 1] = a;
zokkouhantei = 1;
}
が実行されましたが
k=0のときの実行において
zokkouhantei=1;
が実行されていたので
5回目の
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");
}
👆
の繰り返し実行が開始されます
まず
zokkouhantei = 0;
により
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");
}
が実行されることになります
kが
0
1
2
3
と値を変えながら
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");
が実行されるのね
まず
k=0のとき
if (hairetu[k] <= hairetu[k + 1]) {
int a;
a = hairetu[k];
hairetu[k] = hairetu[k + 1];
hairetu[k + 1] = a;
zokkouhantei=1;
}
のkに0が代入された
if (hairetu[0] <= hairetu[1]) {
int a;
a = hairetu[0];
hairetu[0] = hairetu[1];
hairetu[0] = a;
zokkouhantei=1;
}
が実行されることになります
if (hairetu[k] <= hairetu[k + 1])
は
if (hairetu[0] <= hairetu[1])
を表すことになります
hairetu[0]に格納されている数値4
は
hairetu[1]に格納されている数値3
より
大きいので
hairetu[0]<=hairetu[1]
は成立しないので
if (hairetu[0] <= hairetu[1])に続くブロック{}内の命令文
👇
int a;
a = hairetu[0];
hairetu[0] = hairetu[1];
hairetu[1] = a;
zokkouhantei=1;
👆
が実行されることはありません
ですので
hairetu[0]に格納されている数値4
と
hairetu[1]に格納されている数値3
が交換されることはありません
zokkouhantei=1;
👆
が実行されることもありませんが
すでに
💖zokkouhanteiには0が代入されています💖
それとは関係なく
for (i = 0; i < 5; i++) {
printf("%d", hairetu[i]);
}
は実行されるので
プログラムの実行結果のこの部分
👇
01234
10234
12034
12304
12340
21340
23140
23410
32410
34210
34210
34210
43210
43210
43210
43210
43210👈
43210
43210
43210
の
43210👈
が表示されることになるの
次に
k=1のとき
if (hairetu[k] <= hairetu[k + 1]) {
int a;
a = hairetu[k];
hairetu[k] = hairetu[k + 1];
hairetu[k + 1] = a;
zokkouhantei=1;
}
のkに1が代入された
if (hairetu[1] <= hairetu[2]) {
int a;
a = hairetu[1];
hairetu[1] = hairetu[2];
hairetu[1] = a;
zokkouhantei=1;
}
が実行されることになります
if (hairetu[k] <= hairetu[k + 1])
は
if (hairetu[1] <= hairetu[2])
を表すことになります
hairetu[1]に格納されている数値3
は
hairetu[2]に格納されている数値2
より
大きいので
hairetu[1]<=hairetu[2]
は成立しないので
if (hairetu[1] <= hairetu[2])に続くブロック{}内の命令文
👇
int a;
a = hairetu[1];
hairetu[1] = hairetu[2];
hairetu[2] = a;
zokkouhantei=1;
👆
が実行されることはありません
ですので
hairetu[1]に格納されている数値3
と
hairetu[2]に格納されている数値2
が交換されることはありません
zokkouhantei=1;
👆
が実行されることもありませんが
すでに
💖zokkouhanteiには0が代入されています💖
それとは関係なく
for (i = 0; i < 5; i++) {
printf("%d", hairetu[i]);
}
は実行されるので
プログラムの実行結果のこの部分
👇
01234
10234
12034
12304
12340
21340
23140
23410
32410
34210
34210
34210
43210
43210
43210
43210
43210
43210👈
43210
43210
の
43210👈
が表示されることになるの
次に
k=2のとき
if (hairetu[k] <= hairetu[k + 1]) {
int a;
a = hairetu[k];
hairetu[k] = hairetu[k + 1];
hairetu[k + 1] = a;
zokkouhantei=1;
}
のkに2が代入された
if (hairetu[2] <= hairetu[3]) {
int a;
a = hairetu[2];
hairetu[2] = hairetu[3];
hairetu[2] = a;
zokkouhantei=1;
}
が実行されることになります
if (hairetu[k] <= hairetu[k + 1])
は
if (hairetu[2] <= hairetu[3])
を表すことになります
hairetu[2]に格納されている数値2
は
hairetu[3]に格納されている数値1
より
大きいので
hairetu[2]<=hairetu[3]
は成立しないので
if (hairetu[2] <= hairetu[3])に続くブロック{}内の命令文
👇
int a;
a = hairetu[2];
hairetu[2] = hairetu[3];
hairetu[3] = a;
zokkouhantei=1;
👆
が実行されることはありません
ですので
hairetu[2]に格納されている数値2
と
hairetu[3]に格納されている数値1
が交換されることはありません
zokkouhantei=1;
👆
が実行されることもありませんが
すでに
💖zokkouhanteiには0が代入されています💖
それとは関係なく
for (i = 0; i < 5; i++) {
printf("%d", hairetu[i]);
}
は実行されるので
プログラムの実行結果のこの部分
👇
01234
10234
12034
12304
12340
21340
23140
23410
32410
34210
34210
34210
43210
43210
43210
43210
43210
43210
43210👈
43210
の
43210👈
が表示されることになるの
次に
k=3のとき
if (hairetu[k] <= hairetu[k + 1]) {
int a;
a = hairetu[k];
hairetu[k] = hairetu[k + 1];
hairetu[k + 1] = a;
zokkouhantei=1;
}
のkに2が代入された
if (hairetu[3] <= hairetu[4]) {
int a;
a = hairetu[3];
hairetu[3] = hairetu[4];
hairetu[3 = a;
zokkouhantei=1;
}
が実行されることになります
if (hairetu[k] <= hairetu[k + 1])
は
if (hairetu[3] <= hairetu[4])
を表すことになります
hairetu[3]に格納されている数値1
は
hairetu[4]に格納されている数値0
より
大きいので
hairetu[3]<=hairetu[4]
は成立しないので
if (hairetu[3] <= hairetu[4])に続くブロック{}内の命令文
👇
int a;
a = hairetu[3];
hairetu[3] = hairetu[4];
hairetu[4] = a;
zokkouhantei=1;
👆
が実行されることはありません
ですので
hairetu[3]に格納されている数値1
と
hairetu[4]に格納されている数値0
が交換されることはありません
zokkouhantei=1;
👆
が実行されることもありませんが
すでに
💖zokkouhanteiには0が代入されています💖
それとは関係なく
for (i = 0; i < 5; i++) {
printf("%d", hairetu[i]);
}
は実行されるので
プログラムの実行結果のこの部分
👇
01234
10234
12034
12304
12340
21340
23140
23410
32410
34210
34210
34210
43210
43210
43210
43210
43210
43210
43210
43210👈
の
43210👈
が表示されることになるの
そして
zokkouhanteiには0が代入されているので
for (zokkouhantei = 1; zokkouhantei == 1;) の
条件式
zokkouhantei == 1
は偽の値1をもつことになるので
6回目の
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 (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");
}
👆
の繰り返し実行をおこなえば
すなわち
kの値を
0,1,2,3
と変えながら
hairetu[k]に格納されている数値が hairetu[k + 1]より小さければ
hairetu[k]とhairetu[k + 1]に格納されている数値を交換するプログラムを
繰り返し実行し続けていけば
やがて
(*´▽`*)いつかは(*^▽^*)
配列変数
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
と
大きいほうの数値から配列変数に順に数値が格納されている状態に変更することができます
もちろん
配列変数
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]に格納されている数値は1
hairetu[1]に格納されている数値は3
hairetu[2]に格納されている数値は2
hairetu[3]に格納されている数値は4
hairetu[4]に格納されている数値は0
のように数値が格納されている状態でも
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");
}
👆
の繰り返し実行をおこなえば
すなわち
ひたすら
kの値を0,1,2,3と変えながら
hairetu[k]に格納されている数値が hairetu[k + 1]より小さければ
hairetu[k]とhairetu[k + 1]に格納されている数値を交換するプログラムを
繰り返し実行し続けていけば
hairetu[0]に格納されている数値は4
hairetu[1]に格納されている数値は3
hairetu[2]に格納されている数値は2
hairetu[3]に格納されている数値は1
hairetu[4]に格納されている数値は0
と
大きいほうの数値から配列変数に順に数値が格納されている状態に変更することができます
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます