二维数组与引申

当我们有一个表格,记录运动员各项比赛得分情况,横排是运动员姓名,竖排是项目名称,如下:

高老大 王二 张三 李四 赵五 钱六
100米跑 95 75 89 75 98 87
铅球 85 91 88 92 98 70
标枪 75 85 95 98 76 82

我们可以将这个表格的数据存放在二维数组中,例如我们可以用S[1][2]代表王二的铅球成绩,即S[1][2] = 91。二维数组也称为矩阵,这样的数组具有两个维度:行和列。我们可以用类似定义一维数组的方式来定义一个二维数组:

int  a[3][3]

这样我们就定义了一个3 x 3的二维数组,写成矩阵形式如下:

a[0][0]    a[0][1]    a[0][2]
a[1][0]    a[1][1]    a[1][2]
a[2][0]    a[2][1]    a[2][2]

仍然需要注意的是,二维数组的两个维度标号都是从0开始的,这一点与一维数组相同。需要明确的概念是,二维数组写成矩阵形式是为了理解方便,但是在内存中,二维数组仍然是线性存储的。

对二维数组进行初始化时与一维数组有所不同,例如我们对上述的3 x 3数组进行初始化:

int  a[3][3] = {{1 , 2 , 3} , {4 , 5 , 6} , {7 , 8 , 9}};

也可以将所有元素写在一个花括号内:

int  a[3][3] = {1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9};

同样我们也可以对部分元素赋初值,这个时候其余元素为0:

int  a[3][3] = {{1} , {2 , 3} , {4}};

赋值结果是:

        1    0    0
        2    3    0
        4    0    0

对二维数组进行赋初值时,要记得一个准则,那就是在一个花括号内的是同一行,隔一个花括号就是下一行。

以上就是二维数组的定义与调用方式,下面举一个例子来讲解二维数组的综合运用。例如我们需要将一个二维数组行列互换,存在另一个二维数组中。首先我们分析问题,这个问题的中心就在于将二维数组a的元素a[i][j]存放在另外一个二维数组b[j][i]中。假设有二维数组a[2][3],写程序如下:

#include<stdio.h>
int  main()
{
    int  i , j;
    int  a[2][3] = {0};
    for(i = 0 ; i <= 1 ; i ++)
        for(j = 0 ; j <=2 ; j ++)
            scanf(“%d” , &a[i][j]);
    int  b[3][2] = {0};
    printf(“a:\n”);
    for(i = 0 ; i <= 1 ; i ++)
    {
        for(j = 0 ; j <=2 ; j ++)
        {
            printf(“%d”,a[i][j]);
            b[j][i] = a[i][j];
       }
       printf(“\n”);
    }
    printf(“b:\n”);
    for(i = 0 ; i <= 2 ; i ++)
    {
        for(j = 0 ; j <= 1 ; j ++)
            printf(“%d”,b[i][j]);
        printf(“\n”);
    }
   return  0;
}

二维数组的定义与调用方法可以引申为多维数组,只要有需要,数组可以有三维、四维……

这本书是xt写的上次修改: 2019-04-18 15:24:43

results matching ""

    No results matching ""