配列変数同士で格納されている数値データを交換してみよう その1💖💖💖

ソーラー「みなさん こんにちは😊」


アレサ「こんにちは😊」


ソーラー「


さてさて


今日は


          配列とfor文を用いて



    配列変数同士で格納されている数値データを交換するプログラムを実行してみたいと思います。



まずは恒例の


次のプログラムをご覧ください


👇


#include <stdio.h>


int main(void) {


int hairetu[5];


int i = 0;


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


hairetu[i] = i;


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

}

/*👆

配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

を初期化すると同時に配列変数に格納された数値

0

1

2

3

4

printf出力表示するようにしています*/

printf("\n");

//🌞改行しています

return 0;

}


ビルド実行結果


01234


ソーラー「


このプログラムでは


ビルド実行結果は


01234


となっています。



配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

数値

0

1

2

3

4

が代入されているのがわかります。


配列変数

hairetu[0]には0



hairetu[1]には1が代入されていますが


配列変数

hairetu[0]と配列変数[1]に


格納されている数値を


交換するプログラムを実行してみたいと思います。」



ソーラー「まず思いつくのが


hairetu[0]=hairetu[1];



配列変数hairetu[0]

配列変数hairetu[1]

直接

代入する方法です。



う~ん


確かに


hairetu[0]=hairetu[1];


を実行すればよさそうなものですが


それだと


配列変数hairetu[0]

格納される数値は1


配列変数hairetu[1]

格納される数値も1


になってしまいます。


そこで


まずは


配列変数hairetu[0]

格納される数値0



int型の変数aに代入してから


hairetu[0]=hairetu[1];



実行します。


配列変数hairetu[0]

格納される数値は1


配列変数hairetu[1]

格納される数値も1


になりますが


hairetu[1]=a;



0を格納した変数aを


配列変数hairetu[1]


に代入することにより


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


0


になります。


配列変数hairetu[0]

0


配列変数hairetu[1]

1


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


配列変数hairetu[0]

1


配列変数hairetu[1]

0

が格納されている状態に


変更されるというわけだね。」


そのプログラムはこちらとなります。


#include <stdio.h>


int main(void) {


int hairetu[5];


int i = 0;


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


hairetu[i] = i;


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

}

/*👆

配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

を初期化すると同時に配列変数に格納された数値

0

1

2

3

4

printf出力表示するようにしています*/


printf("\n");

//🌞改行しています


int a;


a = hairetu[0];


hairetu[0] = hairetu[1];


hairetu[1] = a;


/*


配列変数

hairetu[0]

配列変数

hairetu[1]

に格納されている数値を交換しました*/


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


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

}


printf("\n");

//🌞改行しています



return 0;

}


ビルド実行結果


01234

10234


ソーラー「やったね(^_-)-☆」


アレサ「(´▽`*)


配列変数

hairetu[0]

に格納されている数値0

配列変数

hairetu[1]

に格納されている数値1


が交換されました。」














配列変数


hairetu[0]と配列変数[1]に


格納されている数値を


交換する方法です







配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

格納されている数値を

0

1

2

3

4

から

4

3

2

1

0

順序を逆に入れ替えるかが


ポイントになりそうです」



_______________________

実は


4から


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

格納されている数値

0

1

2

3

4

を引くと

4

3

2

1

0

になります


つまり


4から


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]



4-hairetu[0]

4-hairetu[1]

4-hairetu[2]

4-hairetu[3]

4-hairetu[4]


のように引くと


4

3

2

1

0


がえられます。


あとは


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

4-hairetu[0]

4-hairetu[1]

4-hairetu[2]

4-hairetu[3]

4-hairetu[4]

hairetu[0] = 4-hairetu[0];

hairetu[1] = 4-hairetu[1];

hairetu[2] = 4-hairetu[2];

hairetu[3] = 4-hairetu[3];

hairetu[4] = 4-hairetu[4];


を代入する


すなわち


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

4

3

2

1

0


を代入して


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


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


}



実行すれば


ビルド実行結果に


43210


を表示させることができます


            solarplexussより


おっと ソーラーたちには ひ・み・つ💖だよ

_______________________


ソーラー「そうなんだよ。


まずは


いきなりですが


次のプログラムをご覧ください


#include <stdio.h>


int main(void) {


int hairetu[5];


int a = 0;


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


hairetu[a] = a;


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

}

/*👆

配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

を初期化すると同時に配列変数に格納された数値

0

1

2

3

4

printf出力表示するようにしています*/


printf("\n");

//🌞改行しています


hairetu[0] = 4-hairetu[0];

hairetu[1] = 4-hairetu[1];

hairetu[2] = 4-hairetu[2];

hairetu[3] = 4-hairetu[3];

hairetu[4] = 4-hairetu[4];


/*🌞配列変数に格納されている数値を順序を逆に入れ替えました。


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


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


}


printf("\n");

//🌞改行しています


return 0;

}



ビルド実行結果


01234

43210


アレサ「とても上手に


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

に格納されている数値が


0

1

2

3

4

から

4

3

2

1

0


に変更されています



これはどのような仕組みになっているのですか?(´▽`*)」


ソーラー「ははっ


ここの仕組みがどうなっているかだよね。



           それは勘だよ




( ̄∇ ̄;)ハッハッハ


ではなく


簡単、簡単


ビルド実行結果

01234

から

43210

に変更したいのだったね。


そこで


01234

43210


01234

43210


のようにくっつけて

並べて

よく見ると


上の段と下の段の数値を足したものは


0+4=4

1+3=4

2+2=4

3+1=4

4+0=4


の計算結果をみてもわかるように


すべて合計値が🌷4🌸になっています。


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]


に格納されている数値が

0

1

2

3

4

だとすると


4から


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

格納されている数値

0

1

2

3

4

を引くと

4

3

2

1

0

がえられるってわけさ(^_-)-☆


つまり


4から


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]



4-hairetu[0]

4-hairetu[1]

4-hairetu[2]

4-hairetu[3]

4-hairetu[4]


のように引くと


4

3

2

1

0


がえられるというわけなんだね。


あとは


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

4-hairetu[0]

4-hairetu[1]

4-hairetu[2]

4-hairetu[3]

4-hairetu[4]

hairetu[0] = 4-hairetu[0];

hairetu[1] = 4-hairetu[1];

hairetu[2] = 4-hairetu[2];

hairetu[3] = 4-hairetu[3];

hairetu[4] = 4-hairetu[4];


のように代入する


つまり


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

4

3

2

1

0


を代入して


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


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


}



実行すれば


ビルド実行結果に


43210


を表示させることができるというわけなんだ」


アレサ「美しい仕組みになっているのですの。」


ソーラー「今のプログラムの中の


hairetu[0] = 4-hairetu[0];

hairetu[1] = 4-hairetu[1];

hairetu[2] = 4-hairetu[2];

hairetu[3] = 4-hairetu[3];

hairetu[4] = 4-hairetu[4];


の部分を


配列とfor文を用いて


int i;


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


hairetu[i] = 4-hairetu[i];

}



短くかきかえることができます。


書き換えた


プログラムも実行してみようかな


#include <stdio.h>


int main(void) {


int hairetu[5];


int a = 0;


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


hairetu[a] = a;


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

}

/*👆

配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

を初期化すると同時に配列変数に格納された数値

0

1

2

3

4

printf出力表示するようにしています*/


printf("\n");

//🌞改行しています

int i;



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


hairetu[i] = 4 - hairetu[i];

}


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


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


}


printf("\n");

//🌞改行しています


return 0;

}



ビルド実行結果


01234

43210



ソーラー「よく考えたら


これは


すごいことだよね。


もし


配列変数が

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

hairetu[9998]

hairetu[9999]

と10000個あり


hairetu[0]=0;

hairetu[1]=1;

hairetu[2]=2;

hairetu[3]=3;

hairetu[4]=4;

hairetu[9998]=9998;

hairetu[9999]=9999;


と数値

0

1

2

3

4

9998

9999


が代入されていたとしても


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


hairetu[i] = 9999-hairetu[i];

}


を実行することにより


簡単に


hairetu[0]=9999;

hairetu[1]=9998;

hairetu[2]=9997;

hairetu[3]=9996;

hairetu[4]=9995;

hairetu[9998]=1;

hairetu[9999]=0;


を実行して


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

hairetu[9998]

hairetu[9999]



0

1

2

3

4

9998

9999


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


順序を逆に入れ替えて


9999

9998

9997

9996

9995

3

2

1


数値を代入することができるからね。」

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

作者を応援しよう!

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

応援したユーザー

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