C++スコーラ
配列
最終更新:
cschola
-
view
配列
今回は「配列」というものについて説明します。
配列とは変数を一度に量産できる機能です。
変数が箱だとすると、配列はその箱がいくつも並んでいるようなものです。
配列を使えば一度にいくつものデータを処理する場合にとても便利です。
使い方は難しくないので使って覚えましょう。
配列とは変数を一度に量産できる機能です。
変数が箱だとすると、配列はその箱がいくつも並んでいるようなものです。
配列を使えば一度にいくつものデータを処理する場合にとても便利です。
使い方は難しくないので使って覚えましょう。
宣言
配列は宣言しないと使うことができません。
int Array[5];
宣言するときは変数と同じように 「型」 と 「名前」 を書き、
その後ろに [ ] を書いてその中に 「要素数」 を書きます。
名前は自由につけることができますが、C言語で既に使われている命令などは使えません。
[ ] の部分ですがここが配列の数になります。
今回は 5 なので int型 変数を5つ用意したことになります。
ここに入れられるのは定数だけです。※変数を入れることはできません。
これを配列の持っている要素の数、「要素数」と呼びます。
その後ろに [ ] を書いてその中に 「要素数」 を書きます。
名前は自由につけることができますが、C言語で既に使われている命令などは使えません。
[ ] の部分ですがここが配列の数になります。
今回は 5 なので int型 変数を5つ用意したことになります。
ここに入れられるのは定数だけです。※変数を入れることはできません。
これを配列の持っている要素の数、「要素数」と呼びます。
代入
配列に数値を代入するには「添え字」を使って「要素」を指定しなくてはいけません。
Array[0] = 3; //0番目に3を代入 Array[1] = 5; //1番目に5を代入 Array[2] = 7; //2番目に7を代入 Array[3] = 6; //3番目に6を代入 Array[4] = 5; //4番目に5を代入
添え字とは [ ] の中の入っている数字のことです。
この数字は0番目から始まっているため、要素数が5のときは4番目までしかありません。
それ以降の添え字を使うとエラーやバグの原因になります。
最後の添え字は要素数引く1だということを覚えおきましょう。
この数字は0番目から始まっているため、要素数が5のときは4番目までしかありません。
それ以降の添え字を使うとエラーやバグの原因になります。
最後の添え字は要素数引く1だということを覚えおきましょう。
画面に出力して表示する場合も添え字を使います。
printf("%d\n",Array[0]); printf("%d\n",Array[1]); printf("%d\n",Array[2]); printf("%d\n",Array[3]); printf("%d\n",Array[4]);
これでも表示できますが、とてもめんどくさいですね。
もっと効率の良いやり方を紹介します。
for文を使った方法です。
もっと効率の良いやり方を紹介します。
for文を使った方法です。
for文
for(int i = 0; i < 5; i++){ printf("%d番目は%dです。\n",i,Array[i]); }
実行すると0番目から4番目まで表示されます。
Array[i] の [ ] の中に変数 i が入っています。
宣言するときの「要素数」には変数を使うことはできませんが、
それぞれの要素を示す「添え字」には変数を使うことができます。
Array[i] の [ ] の中に変数 i が入っています。
宣言するときの「要素数」には変数を使うことはできませんが、
それぞれの要素を示す「添え字」には変数を使うことができます。
for文を使ってユーザーの入力した数値を配列に入れることもできます。
int Array[5] = {}; printf("数値を5つ入力してください\n"); for(int i = 0; i < 5; i++){ scanf_s("%d",&Array[i]); } for(int i = 0; i < 5; i++){ printf("%d番目に入力した数値は%dです。\n",i,Array[i]); }
初期化
配列の初期化にはいくつかルールがあるので紹介します。
int Array[5] = {10,4,8,3,11}; for(int i = 0; i < 5; i++){ printf("%d番目は%dです。\n",i,Array[i]); }
{ } の中は左から 0番目,1番目,2番目… となっています。
初期化は代入より短いコードで済みます。
0で初期化する場合は、もっと省略した書き方ができます。
宣言時に { } の中に何も書かなければ自動的にすべての要素に0が入ります。
初期化は代入より短いコードで済みます。
0で初期化する場合は、もっと省略した書き方ができます。
宣言時に { } の中に何も書かなければ自動的にすべての要素に0が入ります。
int Array[5] = {}; for(int i = 0; i < 5; i++){ printf("%d番目は%dです。\n",i,Array[i]); }
また、宣言時に { } の中が足りない場合、自動的に0を補います。
int Array[5] = {10,4}; for(int i = 0; i < 5; i++){ printf("%d番目は%dです。\n",i,Array[i]); }
[ ] の中に何も書かず初期化した場合その個数に合わせた配列を自動的に用意します。
int Array[] = {3,6,5,9,2}; for(int i = 0; i < 5; i++){ printf("%d番目は%dです。\n",i,Array[i]); }
整列
配列の中を整列(ソート)したい場合があると思います。
その場合は以下のように書きます。
その場合は以下のように書きます。
int Array[5] = {3,6,5,9,2}; // 配列初期化 int tmp = 0; // 入れ替え処理用の変数 // 配列内を昇順(小さい順)にソート for (int i = 0; i < 4; i++) { for (int j = i + 1; j < 5; j++) { if (Array[i] > Array[j]) { // 入れ替え処理 tmp = Array[i]; Array[i] = Array[j]; Array[j] = tmp; } } } // 配列内の値を表示 for (int i = 0; i < 5; i++) { printf("%d\n", Array[i]); }
上のソートはバブルソートといいます。
他にもソートの方法はありますが、今はこれだけ覚えておけばいいです。
他にもソートの方法はありますが、今はこれだけ覚えておけばいいです。