配列とfor文を用いて配列変数に格納されているデータを前の配列変数へずらしてみましょう🌻💖💖
ソーラー「配列とfor文を用いた基本的なプログラムが3つ登場してきたね
みんな 大分レベルアップしたんじゃないかな😊
さあ
次に
登場する配列とfor文を用いた4つ目の基本的なプログラムは
配列とfor文を用いて
お隣同士の配列変数に格納されているデータを交換
するプログラムです。
まずは
次のプログラムをご覧ください
👇
#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]
を初期化したあとすぐに
配列変数
hairetu[0]
hairetu[1]
hairetu[2]
hairetu[3]
hairetu[4]
に格納された数値
0
1
2
3
4
を
printf出力表示するようにしています*/
printf("\n");
//🌞改行しています 理由はじきにわかります😊
return 0;
}
ビルド実行結果
01234
ソーラー「
このプログラムでは
配列変数
hairetu[0]
hairetu[1]
hairetu[2]
hairetu[3]
hairetu[4]
に
数値
0
1
2
3
4
が代入されています。
ここで
配列変数同士で格納されている数値を交換するプログラムを実行してみたいと思います。
次のプログラムをご覧ください
#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] = hairetu[1];
hairetu[1] = hairetu[2];
hairetu[2] = hairetu[3];
hairetu[3] = hairetu[4];
hairetu[4] = hairetu[0];
for (a = 0; a < 5; a++) {
printf("%d", hairetu[a]);
}
printf("\n");
//🌞改行しています
return 0;
}
ビルド実行結果
01234
12341
ソーラー「みんな
このプログラムのポイントは
hairetu[0] = hairetu[1];
hairetu[1] = hairetu[2];
hairetu[2] = hairetu[3];
hairetu[3] = hairetu[4];
hairetu[4] = hairetu[0];
なんだよ。
hairetu[0] = hairetu[1];
では
配列変数hairetu[0]に配列変数hairetu[1]
が代入されています。
このとき
配列変数hairetu[0]には
配列変数hairetu[1]に格納されている数値1
が代入されることになります。」
アレサ「
配列変数
hairetu[0]
hairetu[1]
hairetu[2]
hairetu[3]
hairetu[4]
に格納されている数値が
0
1
2
3
4
から
1
2
3
4
1
に変更されています」
ソーラー「本当は
配列変数
hairetu[0]
hairetu[1]
hairetu[2]
hairetu[3]
hairetu[4]
に格納されている数値を
0
1
2
3
4
から
1
2
3
4
0
のように
ビルド実行結果が
01234
12340
となるように
循環しているように
華麗に変更したいんだけど・・・
配列変数
hairetu[0]
hairetu[1]
hairetu[2]
hairetu[3]
hairetu[4]
に格納されている数値が
0
1
2
3
4
から
1
2
3
4
1
に変更されているね。
hairetu[0] = hairetu[1];
hairetu[1] = hairetu[2];
hairetu[2] = hairetu[3];
hairetu[3] = hairetu[4];
hairetu[4] = hairetu[0];
の方法では
hairetu[0] = hairetu[1];
を実行したときに
hairetu[0]に格納されている数値が
0から1に変更されているため
hairetu[4] = hairetu[0];
を
実行しても
hairetu[4]に格納される数値は
0ではなく
1になっているわけだね。
う~ん
どうしたら
hairetu[4]に格納されている数値を
0にすることができるかな?」
アレサ「
hairetu[0] = hairetu[1];
hairetu[1] = hairetu[2];
hairetu[2] = hairetu[3];
hairetu[3] = hairetu[4];
までを実行したのち
直接
hairetu[4]に0を代入する
hairetu[4]=0;
を実行されたら
いいような気がします。
もしくは
変数宣言
int b;
を実行し
生成される変数bに
b=hairetu[0];
と
hairetu[0]に格納されている数値0をあらかじめ代入して確保しておいて
hairetu[0] = hairetu[1];
hairetu[1] = hairetu[2];
hairetu[2] = hairetu[3];
hairetu[3] = hairetu[4];
までを実行したのち
hairetu[4]=b;
を実行し
hairetu[4]に変数bに格納されている元のhairetu[0]の値0
を
代入されても
いいような気がします。」
ソーラー「お いいね。
そのアイデア(´▽`*)
早速
直接
hairetu[4]=0;
が記述されたプログラムを実行すると
#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] = hairetu[1];
hairetu[1] = hairetu[2];
hairetu[2] = hairetu[3];
hairetu[3] = hairetu[4];
hairetu[4] = 0;
for (a = 0; a < 5; a++) {
printf("%d", hairetu[a]);
}
printf("\n");
//🌞改行しています
return 0;
}
ビルド実行結果
01234
12340
ソーラー「うまくいったね(^_-)-☆
もう1つ(^_^)/
変数bを用いた場合のプログラムは
👇」
#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 b;
b=hairetu[0];//👈hairetu[0]の値を変数bに代入しました
hairetu[0] = hairetu[1];
hairetu[1] = hairetu[2];
hairetu[2] = hairetu[3];
hairetu[3] = hairetu[4];
hairetu[4] =b;
for (a = 0; a < 5; a++) {
printf("%d", hairetu[a]);
}
printf("\n");
//🌞改行しています
return 0;
}
ビルド実行結果
01234
12340
ソーラー「やったね!
配列変数
hairetu[0]
hairetu[1]
hairetu[2]
hairetu[3]
hairetu[4]
に格納されている数値を
0
1
2
3
4
から
1
2
3
4
0
に変更することができたね。
う~ん
なんだかプログラムが長いかな?
ここで
これらのプログラムを配列とfor文を使って
短く書き換えてみたいと思います。
まず最初に登場したプログラムのこの部分
👇
hairetu[0] = hairetu[1];
hairetu[1] = hairetu[2];
hairetu[2] = hairetu[3];
hairetu[3] = hairetu[4];
hairetu[4] = 0;
を
int i = 0;
for (i = 0; i < 4; i++) {
hairetu[i] = hairetu[i+1];
}
hairetu[4] = 0;
に変更してみます。
すると
プログラムは次のようになります。
#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 = 0;
for (i = 0; i < 4; i++) {
hairetu[i] = hairetu[i + 1];
}
hairetu[4] = 0;
for (a = 0; a < 5; a++) {
printf("%d", hairetu[a]);
}
/*👆
配列変数
hairetu[0]
hairetu[1]
hairetu[2]
hairetu[3]
hairetu[4]
に格納されている数値を表示しています*/
printf("\n");
//🌞改行しています
return 0;
}
ビルド実行結果
01234
12340
ソーラー「もう1つ(^_^)/
変数bを用いた場合のプログラムは
👇」
#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 b;
b=hairetu[0];
int i = 0;
for (i = 0; i < 4; i++) {
hairetu[i] = hairetu[i + 1];
}
hairetu[4]=b;
for (a = 0; a < 5; a++) {
printf("%d", hairetu[a]);
}
printf("\n");
//🌞改行しています
return 0;
}
ビルド実行結果
01234
12340
ソーラー「いい感じだね。」
ソーラー「ここで
さらに
配列変数
hairetu[0]
hairetu[1]
hairetu[2]
hairetu[3]
hairetu[4]
に格納されている数値を
1
2
3
4
0
から
2
3
4
0
1
に変更してみたいんだ。
そのためには・・・・・
どうしよっかな
アレサ」
アレサ「はいっ ソーラーさん
配列変数
hairetu[0]
hairetu[1]
hairetu[2]
hairetu[3]
hairetu[4]
に格納されている数値を
1
2
3
4
0
から
2
3
4
0
1
に変更するには
また再び
hairetu[0] = hairetu[1];
hairetu[1] = hairetu[2];
hairetu[2] = hairetu[3];
hairetu[3] = hairetu[4];
までを実行したのち
直接
hairetu[4]=1;
を実行されたら
いいような気がします。
変数bを用いる場合は
もっと簡単でhairetu[4]に格納される数値はどうしよう・・・と
考える必要はなく
再び
以下の命令文を
繰り返せばよいとおもわれます。
つまり
b=hairetu[0];
hairetu[0] = hairetu[1];
hairetu[1] = hairetu[2];
hairetu[2] = hairetu[3];
hairetu[3] = hairetu[4];
までを実行したのち
hairetu[4]=b;
を実行すればいいと思います。
いかがですか
😊 😊 😊 😊 😊 😊
となると
配列変数
hairetu[0]
hairetu[1]
hairetu[2]
hairetu[3]
hairetu[4]
に格納されている数値を
0
1
2
3
4
から
1
2
3
4
0
さらに
2
3
4
0
1
に変更したい場合
変数bを用いない場合は
hairetu[0] = hairetu[1];
hairetu[1] = hairetu[2];
hairetu[2] = hairetu[3];
hairetu[3] = hairetu[4];
hairetu[4]=0;
hairetu[0] = hairetu[1];
hairetu[1] = hairetu[2];
hairetu[2] = hairetu[3];
hairetu[3] = hairetu[4];
hairetu[4]=1;
と
hairetu[4]に格納される数値を0
次は
hairetu[4]に格納される数値は1
に
変更する必要がありますが
変数bを用いる場合は
int b;
ののち
b=hairetu[0];
hairetu[0] = hairetu[1];
hairetu[1] = hairetu[2];
hairetu[2] = hairetu[3];
hairetu[3] = hairetu[4];
hairetu[4]=b;
b=hairetu[0];
hairetu[0] = hairetu[1];
hairetu[1] = hairetu[2];
hairetu[2] = hairetu[3];
hairetu[3] = hairetu[4];
hairetu[4]=b;
と
同じ命令文
hairetu[0] = hairetu[1];
hairetu[1] = hairetu[2];
hairetu[2] = hairetu[3];
hairetu[3] = hairetu[4];
hairetu[4]=b;
を繰り返せばよく
hairetu[4]に格納される数値を自分で選び手動で変更する手間が
省けることになります
😊 😊 😊 😊 😊 😊
ソーラー「おっと上👆のアイデア ナイス! いいね。
では
そのプログラムを構成し実行してみたいと思います。
#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 = 0;
for (i = 0; i < 4; i++) {
hairetu[i] = hairetu[i + 1];
}
hairetu[4] = 0;
for (a = 0; a < 5; a++) {
printf("%d", hairetu[a]);
}
printf("\n");
//🌞改行しています
for (i = 0; i < 4; i++) {
hairetu[i] = hairetu[i + 1];
}
hairetu[4] = 1;
for (a = 0; a < 5; a++) {
printf("%d", hairetu[a]);
}
printf("\n");
//🌞改行しています
return 0;
}
ビルド実行結果
01234
12340
23401
ソーラー「変数bを用いる場合は
#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 b;
b=hairetu[0];
int i = 0;
for (i = 0; i < 4; i++) {
hairetu[i] = hairetu[i + 1];
}
hairetu[4] = b;
for (a = 0; a < 5; a++) {
printf("%d", hairetu[a]);
}
printf("\n");
//🌞改行しています
b=hairetu[0];
for (i = 0; i < 4; i++) {
hairetu[i] = hairetu[i + 1];
}
hairetu[4] = b;
for (a = 0; a < 5; a++) {
printf("%d", hairetu[a]);
}
printf("\n");
//🌞改行しています
return 0;
}
ビルド実行結果
01234
12340
23401
🌞 🌞 🌞 🌞 🌞 🌞
01234
12340
23401
をよくみると
左へ数値が1つずつ移動しているのがわかります
🌞 🌞 🌞 🌞 🌞 🌞
ソーラー「配列とfor文を使って
配列変数同士で格納されている数値を変更することができたね。
ところで
変数bを用いた場合のプログラムは
同じ命令文が
繰り返されているような気がする
そんな気がするんだけど・・・」
アレサ
「あっ・・・
はい
プログラム内で
b = hairetu[0];
int i = 0;
for (i = 0; i < 4; i++) {
hairetu[i] = hairetu[i + 1];
}
hairetu[4] = b;
for (a = 0; a < 5; a++) {
printf("%d\n", hairetu[a]);
}
printf("\n");
が2回くりかえされています。
配列変数
hairetu[0]
hairetu[1]
hairetu[2]
hairetu[3]
hairetu[4]
に
格納されている数値を
2回入れ替えたので
b = hairetu[0];
int i = 0;//👈変数宣言は1回です
for (i = 0; i < 4; i++) {
hairetu[i] = hairetu[i + 1];
}
hairetu[4] = b;
for (a = 0; a < 5; a++) {
printf("%d\n", hairetu[a]);
}
printf("\n");
が2回繰り返されていますね。
ということは
繰り返しの命令文を実行することのできる
for文を用いて
プログラムの
今この部分を
短く書き換えることができます。
そのプログラムは
こちら(^_-)-☆となります。
👇
#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 b;
int i ;
int c;
for (c = 0; c < 2; c++) {
b = hairetu[0];
for (i = 0; i < 4; i++) {
hairetu[i] = hairetu[i + 1];
}
hairetu[4] = b;
for (a = 0; a < 5; a++) {
printf("%d", hairetu[a]);
}
printf("\n");
//🌞改行しています
}
return 0;
}
ビルド実行結果
01234
12340
23401
ソーラー「おおっ うまくまとめることができたね。
👇この部分が2回繰り返されているので
b=hairetu[0];
for (i = 0; i < 4; i++) {
hairetu[i] = hairetu[i + 1];
}
hairetu[4] = b;
for (a = 0; a < 5; a++) {
printf("%d", hairetu[a]);
}
printf("\n");
//🌞改行しています
👆
for文を用いて
以下のように書き換えたわけなんだね
for (c = 0; c < 2; c++) {
b = hairetu[0];
for (i = 0; i < 4; i++) {
hairetu[i] = hairetu[i + 1];
}
hairetu[4] = b;
for (a = 0; a < 5; a++) {
printf("%d", hairetu[a]);
}
printf("\n");
//🌞改行しています
}
まてよ。
配列変数
hairetu[0]に
hairetu[1]に格納されている数値データを代入する
hairetu[1]に
hairetu[2]に格納されている数値データを代入する
hairetu[2]に
hairetu[3]に格納されている数値データを代入する
hairetu[3]に
hairetu[4]に格納されている数値データを代入する
hairetu[4]に
hairetu[0]に格納されている数値データを代入する
これらが繰り返されるんだね
前の配列変数
に
次の配列変数に格納されている数値を代入する命令文
たちが
😊繰り返し😊
実行されるなら
配列とfor文でまとめて短く記述することができる・・
ということは
前の配列変数
に
次の配列変数に格納されている数値を代入する命令文
たち
が
10回
繰り返し
実行されていても
配列とfor文でまとめて短く記述することができるということだよね。
ということは
前の配列変数
に
次の配列変数に格納されている数値を代入する命令文たち
を
10回
まともに記述しなくても
配列とfor文を用いて
前の配列変数
に格納されている数値を
次の配列変数に格納されている数値に
簡単に
10回
入れ替えることができるってことじゃないかな😊」
アレサ「ソーラーさん そうです。そういうことになりますの」
ソーラー「よ~し(^_^)/
それでは
配列とfor文を用いて
前の配列変数
に格納されている数値を
次の配列変数
に格納されている数値に
10回入れ替えて
入れ替えるたび
配列変数
に格納されている数値を
表示してみたいとおもいます。
#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]);
}
printf("\n");
int b;
int i = 0;
int c;
for (c = 0; c <10; c++) {
b = hairetu[0];
for (i = 0; i < 4; i++) {
hairetu[i] = hairetu[i + 1];
}
hairetu[4] = b;
for (a = 0; a < 5; a++) {
printf("%d", hairetu[a]);
}
printf("\n");
}
return 0;
}
ビルド実行結果
01234
12340
23401
34012
40123
01234
12340
23401
34012
40123
01234
ソーラー「いい感じだね(*^▽^*)
ところで
前の配列変数
に
次の配列変数に格納されている数値を代入するプログラム
言い換えると
前の配列変数に格納されている数値を
次の配列変数に格納されている数値に
入れ替えるプログラムは
どんなものにつかわれているのかな?」
アレサ「前の配列変数
に
次の配列変数に格納されている数値を代入するプログラム
言い換えると
前の配列変数に格納されている数値を
次の配列変数に格納されている数値に
入れ替えるプログラムは
配列変数に格納されている
数値の中で
どの配列変数
に格納されている数値が1番小さいか
どの配列変数
に格納されている数値が1番大きいか
を判定するときや
あるいは
配列変数に格納されている数値を
小さい順から
表示する
配列変数に格納されている数値を
大きい順から
表示するときなど
幅広く用いられて
とても重要なプログラムとなっています。」
ソーラー「え~ そうなんだ~」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます