第九章 配列


配列                                                                                                                         
ある型の変数を複数作るとき、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]);
    }
}
<実行結果>
0
1
2
3

それでは、プログラムを詳しくみてみましょう。

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");
}
<実行結果>
[1,1][1,2][1,3]

と同じことになります。
そして、このループが終了したら、
今度は 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");
}
<実行結果>
[2,1][2,2][2,3]

と同じことです。
最後に、for 文@の x が 3 のときも同様に考えて

<その3>
#include<stdio.h>
main()
{
    x=3;
    for(y=1;y<=3;y++)
    {
        printf("[3,%d]",y);
    }
    printf("\n");
}
<実行結果>
[3,1][3,2][3,3]

すると、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]

このように、実行結果は同じになります。

いかがでしょうか?
二次元配列も一つずつ固定して考えれば、理解しやすいんじゃないかと思います。

<前に戻る  |目次|  次へ進む>