配列
ある型の変数を複数作るとき、5〜6個程度なら問題ないのですが、
もし、100〜1000個など多数必要なとき、配列を用いると一度に作ることができます。
<配列>
#include<stdio.h>
main()
{
int x,a[4]; /* int型の変数を4個作成 */
a[0]=0; /* a[0]に0を入力
*/
a[1]=1; /* a[1]に1を入力
*/
a[2]=2; /* a[2]に2を入力 */
a[3]=3; /* a[3]に3を入力
*/
for(x=0;x<=3;x++)
{
printf("%d\n",a[x]);
}
} |
<実行結果>
それでは、プログラムを詳しくみてみましょう。
int a[4]; で、int 型の変数を4個作成しているのですが、
ここで、注意しなければならないのが、a[0] 〜 a[3] の4つだということです。
決して a[1] 〜 a[4] の4つではありません。
c言語では、配列を作成する場合、添え字は必ず 0 からになります。
次に、配列1つずつに数値を代入しています。
for についてはさらに詳しく説明します。
まず、x は 0 から始まるので x<3 は満たします。よって、{ } 内の処理をおこないます。
{ } 内の printf は、今 x が 0 なので、次と同じことになります。
printf("%d\n",a[0]);
つまり、a[x] の x の部分に、x の値が代入されるのです。
これを、for の条件が満たされなくなるまで、繰り返されるのです。 |
|
二次元配列
2次元配列を理解するために、次のようなプログラムを考えてみます。
これは、2次元配列の行と列の番号だけ表示するプログラムです。
<文字に与えられている番号>
#include<stdio.h>
main()
{
int x,y;
for(x=1;x<=3;x++) /*
for文@ */
{
for(y=1;y<=3;y++) /*
for文A */
{
printf("[%d,%d] ",x,y);
}
printf("\n");
}
} |
<実行結果>
[1,1][1,2][1,3]
[2,1][2,2][2,3]
[3,1][3,2][3,3] |
なぜこのような結果になるのか、詳しく解説してみます。
まず for 文@の x を 1 と固定して考えます。
すると、プログラムは
<その1>
#include<stdio.h>
main()
{
int x,y;
x=1;
for(y=1;y<=3;y++)
{
printf("[1,%d]",y);
}
printf("\n");
} |
<実行結果>
と同じことになります。
そして、このループが終了したら、
今度は for 文@の x を 2 に固定して同じように考えればいいのです。
つまり、
<その2>
#include<stdio.h>
main()
{
int x,y;
x=2;
for(y=1;y<=3;y++)
{
printf("[2,%d]",y);
}
printf("\n");
} |
<実行結果>
と同じことです。
最後に、for 文@の x が 3 のときも同様に考えて
<その3>
#include<stdio.h>
main()
{
x=3;
for(y=1;y<=3;y++)
{
printf("[3,%d]",y);
}
printf("\n");
} |
<実行結果>
すると、x は 3 まで実行しているので、次に、x が 4 のときを考えようとすると、
for 文@の条件を満たさなくなるので、for 文@の処理は終了します。
for 文@が終了したので、for 文@の { } で囲まれた中の処理は実行されなくなるので、
for 文@の { } 内に存在する for 文Aの処理も当然実行されなくなるのです。
この3つに分けたプログラムの実行結果を並べて表示してみると
<3つの実行結果>
[1,1][1,2][1,3]
[2,1][2,2][2,3]
[3,1][3,2][3,3] |
このように、実行結果は同じになります。
いかがでしょうか?
二次元配列も一つずつ固定して考えれば、理解しやすいんじゃないかと思います。 |
|