上一章的数组可以看作是一行连续的数据,只有一个下标,称为一维数组。
但是在实际问题的解决是需要是二维的或多维的,因此C语言允许构造多维数组。
多维数组元素有多个下标,以确定它在数组中的位置。
形式是:
dataType arrayName[length1][length2];
dataType 为数据类型,
arrayName 为数组名,
length1 为第一维下标的长度,
length2 为第二维下标的长度。
一维的定义:
int a[10];
二维的定义:
int a[3][4];
定义了一个3行4列的数组,共有3×4=12个元素,数组名为a,即:
a[0][0], a[0][1], a[0][2], a[0][3]
a[1][0], a[1][1], a[1][2], a[1][3]
a[2][0], a[2][1], a[2][2], a[2][3]
在二维数组中,要定位一个元素,必须给出一维下标和二维下标。
例如,a[2][3] 表示a数组第3行第4列的元素。
理论太多,不如上个例子
一个group内有5个学生,有3门课,记录着每个人的成绩。求每个科目的平均分。
#include <stdio.h>
int main(){
int i, j; //二维数组下标
int sum=0; //当前科目的总成绩
int average; //总平均分
int v[3]; //各科平均分
int a[5][3]; //用来保存每个同学各科成绩的二维数组
printf("Input score:\n");
for(i=0; i<3; i++){
for(j=0; j<5; j++){
scanf("%d", &a[j]); //输入每个同学的各科成绩
sum+=a[j]; //计算当前科目的总成绩
}
v=sum/5; // 当前科目的平均分
sum=0;
}
printf("Swift: %d\nJava: %d\nPython: %d\n", v[0], v[1], v[2]);
return 0;
}
运行结果:
Input score:
80
61
59
85
76
75
65
63
87
77
92
71
70
90
85
Swift: 72
Java: 73
Python: 81
二维数组初始化
上面例子成绩初始化可以写成这样
int a[5][3]={ {80,75,92}, {61,65,71}, {59,63,70}, {85,87,90}, {76,77,85} };
对于二维数组初始化赋值还有以下说明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
- 如对全部元素赋初值,则第一维的长度可以不给出。
例如:
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};