変数は学びましたね。
int px = 0;
pxという変数を宣言して0を代入して初期化しています。
ゲームプログラミングの中でpxはキャラクターのX座標を扱う変数として扱っています。
ではキャラクターを2体動かしたいです!となった時、
キャラクターのX座標を扱うpxという変数がもう一つ必要になりますね。
int px1 = 0;
int px2 = 0;
同名の変数は使えないので、こんな感じで2つ目の変数を宣言するのかな?
px1は1体目のキャラクターのX座標を扱う変数
px2は2体目のキャラクターのX座標を扱う変数
ではキャラクターを100体動かしたいです!となった時、
int px1 = 0;
int px2 = 0;
int px3 = 0;
...
100個も同じような変数を宣言するのか?
変数の宣言に限らず変数の個数分、同じプログラムを100個も書くのかな?
というと、そんなことはしません。ここで出てくるのが配列です。
順番に配列について見ていきましょう。
変数はモノを入れるための1つの箱です。
箱に入るモノは1つまでです。
配列はモノを入れるための箱を指定した数分だけ用意できます。
1つの箱に入れられるモノは変数と同じく1つですが、
「同じ名前の箱をたくさん用意できる」ことが配列の便利なところです。
変数の宣言を思い出してみましょう。
int num;
変数の種類に続いて変数名を書けば「この変数を使いますよ」という宣言、箱の用意が出来ましたね。
配列も変数の宣言方法とあまり変わりません。
int num[5];
変数の宣言と異なるのは変数名の後ろに[5]と付いた点です。
このカッコの中に書いた数字が用意される箱の数です。
変数の代入は
num = 100;
でしたね。numに100が入りました。
配列の代入は
num[0] = 100;
num[1] = 25;
このように何番目の箱にモノを入れるか?[]カッコの中に数字を指定して代入します。
ここでややこしいのですが、
int num[5];
と箱を5個用意しました。
箱の何番目を指定する場合1個目の箱は0番目から始まります。
↑の宣言の場合、
num[0] = 100;
num[1] = 300;
num[2] = 10;
num[3] = 5;
num[4] = 25;
と、0番、1番、2番、3番、4番の5個になります。
1個目は1ではありません、0から数え始めます。覚えておきましょう!
この配列の何番目を指定する数字の事をプログラムの専門用語で「添え字(そえじ)」と呼びます。これも覚えておきましょう!
変数は
printf("%d\n", num);
こう書くことで%dがnumの数字に置き換わって表示されていましたね?
配列は
printf("%d\n", num[0]);
こう書くことで%dがnumの0番目の数字に置き換わって表示されます。
tmp = num[1];
こう書くことでtmpという変数にnumの1番目の数字が代入されます。
配列をあつかう方法は添え字を使って何番目の箱なのかを指定すれば良いだけでしたね。
num[0] = 100;
num配列の0番目に100を代入しました。
これまでの説明では添え字には直接数字を入力していましたが、添え字には変数も扱えます。
int i = 0;
num[i] = 100;
添え字には変数も使える、これを利用することで
繰り返しの構文forやwhileと組み合わせて配列の添え字にカウンタ変数を使うと色々便利なことができます。
変数は宣言するときに
int num = 100;
とすることで変数宣言の時に初期値を与えることができました。
配列も同様に配列宣言の時に初期値を与えることができます。
int num[5] = {100, 24, 50, 30, 40};
中カッコの左から0番目には100, 1番目には24, 2番目には50と初期値が入ります。
これは配列の宣言の時に行えることで、配列を宣言以外の所ではこの書き方はできません。
int num[5];
num = {100, 24, 50, 30, 40}; // こんな書き方はできません。
あくまで、初期値を入れておく場合のみ許された書き方です。
ちなみに初期値を入れておけば、配列の数は指定しなくても大丈夫だったりします。
int num[] = {100, 24, 50, 30, 40};
こうして宣言時に配列で用意する箱の数を[]カッコの中に書かなくても初期値が5個分あるので、箱が5個分の配列となります。
int i;
int num[5] = {10, 20, 30, 40, 50};
for( i = 0; i < 5; i += 1 )
{
printf("%d\n", num[i]);
}
同じコードを書いて実行してみよう!
実行結果:
10
20
30
40
50
次の通りにプログラムを書いてください。
①配列numを宣言して箱の数を3個用意
初期値は0番目に5、1番目に10、2番目に15
②for文を使って配列numを全てprintfで表示してください。
実行結果:
5
10
15
③続いてnumの1番目に50を代入してください
④もう一度
for文を使って配列numを全てprintfで表示してください。
実行結果:
5
10
15
5
50
15
プログラムの流れ
①for文のカウンタ変数用にiを宣言
②配列の合計値の計算用にsumを宣言し0で初期化しておく
③配列numをサイズ5で宣言し初期値は5, 4, 9, 3, 1としておく
④for文を使って
sumに配列numのi番目を足す
printfを使って配列numのi番目を表示する
⑤合計値sumをprintfで表示する
この流れの通りとなるように
↓のプログラムに一行書き加えて完成させてください。
int i;
int sum = 0;
int num[5] = {5, 4, 9, 3, 1};
for(i = 0; i < 5; i += 1)
{
printf("%d\n", num[i]);
}
printf("合計は%d\n", sum);
実行結果:
5
4
9
3
1
合計は22