ITEEDU

7.2.2 二维数组元素的引用

二维数组的元素也称为双下标变量,其表示的形式为:

数组名[下标][下标]

其中下标应为整型常量或整型表达式。

例如:

 a[3][4]

表示a数组三行四列的元素。

下标变量和数组说明在形式中有些相似,但这两者具有完全不同的含义。数组说明的方括号中给出的是某一维的长度,即可取下标的最大值;而数组元素中的下标是该元素在数组中的位置标识。前者只能是常量,后者可以是常量,变量或表达式。

【例7.6】一个学习小组有5个人,每个人有三门课的考试成绩。求全组分科的平均成绩和各科总平均成绩。

 

Math

80

61

59

85

76

C

75

65

63

87

77

Foxpro

92

71

70

90

85

可设一个二维数组a[5][3]存放五个人三门课的成绩。再设一个一维数组v[3]存放所求得各分科平均成绩,设变量average 为全组各科总平均成绩。编程如下:

main()
{
   int i,j,s=0,average,v[3],a[5][3];
   printf("input score\n");
   for(i=0;i<3;i++)
  {
     for(j=0;j<5;j++)
      { scanf("%d",&a[j][i]);
        s=s+a[j][i];}
     v[i]=s/5;
     s=0;
  }
average =(v[0]+v[1]+v[2])/3;
printf("math:%d\nc languag:%d\ndbase:%d\n",v[0],v[1],v[2]);
printf("total:%d\n", average );
}

程序中首先用了一个双重循环。在内循环中依次读入某一门课程的各个学生的成绩,并把这些成绩累加起来,退出内循环后再把该累加成绩除以5送入v[i]之中,这就是该门课程的平均成绩。外循环共循环三次,分别求出三门课各自的平均成绩并存放在v数组之中。退出外循环之后,把v[0],v[1],v[2]相加除以3即得到各科总平均成绩。最后按题意输出各个成绩。

7.2.3 二维数组的初始化

二维数组初始化也是在类型说明时给各下标变量赋以初值。二维数组可按行分段赋值,也可按行连续赋值。

例如对数组a[5][3]:

1) 按行分段赋值可写为:

 int a[5][3]={ {80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85} };

2) 按行连续赋值可写为:

 int a[5][3]={ 80,75,92,61,65,71,59,63,70,85,87,90,76,77,85};

这两种赋初值的结果是完全相同的。

【例7.7】
main()
{
  int i,j,s=0, average,v[3];
  int a[5][3]={{80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85}};
  for(i=0;i<3;i++)
     { for(j=0;j<5;j++)
       s=s+a[j][i];
       v[i]=s/5;
       s=0;
     }
average=(v[0]+v[1]+v[2])/3;
printf("math:%d\nc languag:%d\ndFoxpro:%d\n",v[0],v[1],v[2]);
printf("total:%d\n", average);
}

对于二维数组初始化赋值还有以下说明:

1) 可以只对部分元素赋初值,未赋初值的元素自动取0值。

例如:

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

是对每一行的第一列元素赋值,未赋值的元素取0值。 赋值后各元素的值为:

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

赋值后的元素值为:

0 1 0
0 0 2 
3 0 0 

2) 如对全部元素赋初值,则第一维的长度可以不给出。

例如:

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

可以写为:

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

3) 数组是一种构造类型的数据。二维数组可以看作是由一维数组的嵌套而构成的。设一维数组的每个元素都又是一个数组,就组成了二维数组。当然,前提是各元素类型必须相同。根据这样的分析,一个二维数组也可以分解为多个一维数组。C语言允许这种分解。

如二维数组a[3][4],可分解为三个一维数组,其数组名分别为:

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

对这三个一维数组不需另作说明即可使用。这三个一维数组都有4个元素,例如:一维数组a[0]的元素为a[0][0],a[0][1],a[0][2],a[0][3]。

必须强调的是,a[0],a[1],a[2]不能当作下标变量使用,它们是数组名,不是一个单纯的下标变量。

7.2.4 二维数组程序举例

7.3字符数组

用来存放字符量的数组称为字符数组。

7.3.1 字符数组的定义

形式与前面介绍的数值数组相同。

例如:

 char c[10];

由于字符型和整型通用,也可以定义为int c[10]但这时每个数组元素占2个字节的内存单元。

字符数组也可以是二维或多维数组。

例如:

 char c[5][10];

即为二维字符数组。