配列変数の中に適当に格納されている数値を最も大きな数値から順に配列変数に入れ替えるプログラムを実行してみよう。 その2💖💖💖

先ほどは


配列宣言


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


と数値が代入されている状態に入れ替える手順を観察するために


4つのプログラム実行しました



まずは


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

}


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


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

}


printf("\n");


}


return 0;

}


ビルド実行結果


01234

10234

12034

12304

12340


ソーラー「→(´▽`*)


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

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

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

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

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


と数値が格納されている状態から


配列変数 hairetu[0]に格納されている数値は1

配列変数 hairetu[1]に格納されている数値は2

配列変数 hairetu[2]に格納されている数値は3

配列変数 hairetu[3]に格納されている数値は4

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


と数値が格納されている状態へ


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]


に格納されている数値が入れ替わっているのが観察できます。


次に


配列変数 hairetu[0]に格納されている数値は1

配列変数 hairetu[1]に格納されている数値は2

配列変数 hairetu[2]に格納されている数値は3

配列変数 hairetu[3]に格納されている数値は4

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


と数値が格納されている状態で


今のと同じ


2回目のプログラムを実行すると


#include <stdio.h>


int main(void) {


int hairetu[5];


hairetu[0] = 1;

hairetu[1] = 2;

hairetu[2] = 3;

hairetu[3] = 4;

hairetu[4] = 0;


int i;


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;

}


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


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

}


printf("\n");


}

}



ビルド実行結果


12340

21340

23140

23410

23410


ソーラー「ビルド実行結果を見てもお分かりになられますように


今度は


配列変数 hairetu[0]に格納されている数値は1

配列変数 hairetu[1]に格納されている数値は2

配列変数 hairetu[2]に格納されている数値は3

配列変数 hairetu[3]に格納されている数値は4

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


と数値が格納されている状態から


配列変数 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]


に格納されている数値が入れ替わっているのが観察できます


次に


配列変数 hairetu[0]に格納されている数値は2

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

配列変数 hairetu[2]に格納されている数値は4

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

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


と数値が格納されている状態で


今のと同じ3回目のプログラムを実行すると


#include <stdio.h>


int main(void) {


int hairetu[5];


hairetu[0] = 2;

hairetu[1] = 3;

hairetu[2] = 4;

hairetu[3] = 1;

hairetu[4] = 0;


int i;


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;

}


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


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

}


printf("\n");


}

}


ビルド実行結果


23410

32410

34210

34210

34210


ソーラー「ビルド実行結果を見てもお分かりになられますように


今度は


配列変数 hairetu[0]に格納されている数値は2

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

配列変数 hairetu[2]に格納されている数値は4

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

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


と数値が格納されている状態から


配列変数 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]


に格納されている数値が


入れ替割っているのが観察できます。


次に


配列変数 hairetu[0]に格納されている数値は3

配列変数 hairetu[1]に格納されている数値は4

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

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

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


と数値が格納されている状態で


今のと同じ4回目のプログラムを実行すると


#include <stdio.h>


int main(void) {


int hairetu[5];


hairetu[0] = 3;

hairetu[1] = 4;

hairetu[2] = 2;

hairetu[3] = 1;

hairetu[4] = 0;


int i;


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;

}


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


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

}


printf("\n");


}

}


ビルド実行結果


34210

43210

43210

43210

43210


ソーラー「このビルド実行結果を見てもお分かりになられますように


今度は


配列変数 hairetu[0]に格納されている数値は3

配列変数 hairetu[1]に格納されている数値は4

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

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

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


と数値が格納されている状態から


配列変数 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]

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


と数値が格納されている状態へ


格納されている数値を


入れ替える基本的な手順となっています。



1回目から4回目のプログラムの実行結果を


まとめて表示すると


1回目

01234

10234

12034

12304

12340


2回目

12340

21340

23140

23410

23410


3回目

23410

32410

34210

34210

34210


4回目

34210

43210/*

この時点で01234から43210に数値を入れ替えることに成功しました*/

43210

43210

43210


となっています。」



ソーラー「結局


配列変数

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


と数値が格納されている状態へ


数値を入れ替えるには


4回

以下の命令文を繰り返すと

👇


int i;


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;

}


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


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

}


printf("\n");


}




ソーラー「→良いわけなんだね。



というわけで


今までの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



数値が格納されている状態に


入れ替えるプログラムは


次のようになります。


#include <stdio.h>


int main(void) {


int hairetu[5];


hairetu[0] = 1;

hairetu[1] = 2;

hairetu[2] = 3;

hairetu[3] = 4;

hairetu[4] = 0;


int i;


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;

}



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


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

}


printf("\n");


}

//🌞👆1回目です


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;

}




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


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

}


printf("\n");


}

//🌞👆2回目です


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;

}


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


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

}


printf("\n");


}


//🌞👆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;

}


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


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

}


printf("\n");


}


//🌞👆4回目です


return 0;

}


ビルド実行結果


01234

10234

12034

12304

12340

21340

23140

23410

23410

32410

34210

34210

34210

43210👈01234から43210に数値を入れ替えることに成功しました

43210

43210

43210



アレサ「ついに


配列変数

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

}


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


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

}


printf("\n");


}


が4回繰り返されている部分があるね。


この部分を


for文を用いて短くまとめてプログラムを書き換えると


#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 n;


for (n = 1; n < 5; 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;

}




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


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

}


printf("\n");


}

}


return 0;

}



ビルド実行結果


01234

10234

12034

12304

12340

21340

23140

23410

23410

32410

34210

34210

34210

43210👈01234から43210に数値を入れ替えることに成功しました

43210

43210

43210


ソーラー「となりますが


こちらのプログラムを


用いることはないんだ😊」


アレサ「?短くプログラムが記述できているのに


なぜなのですの?」





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

作者を応援しよう!

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

応援したユーザー

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