二维数组
二维数组可以看成多个一维数组,即用数组作为元素的数组。
二维数组的定义
类型说明符 数组名[常量表达式1][常量表达式2];
即:
int sz[3][4];
这里声明一个三行四列的数组,一共能表示12个整型。具体访问下标如下:
二维数组的初始化
初始化全部元素
int sz[2][3] = {{0, 1, 2}, {3, 4, 5}};
// 0 1 2
// 3 4 5
初始化部分元素
int sz[2][3] = {{1}, {2}};
// 1 0 0
// 2 0 0
// 或
int sz[2][3] = {0};
缺省第一个长度
如果数组的长度已经确定,初始化时,可以缺省第一个长度。
int sz[][3] = {{0, 1, 2}, {3, 4, 5}};
// 或
int sz[][3] = {0, 1, 2, 3, 4, 5};
上面这个例子中可以看出,二维数组可以像一维数组一样进行初始化。因为在C语言中,二维数组是按行排列的。即,先存放sz[0]行,再存放sz[1]行,每行中有三个元素也是依次存放。
二维数组的应用
按照下表,求出各科总分与每个学生的总分。
int main(int argc, const char * argv[]) {
// insert code here...
int scores[3][3] = {{23, 45, 67}, {12, 56, 89}, {45, 89 ,19}};
for (int i = 0; i < 3; i ++) {
int sumOfStudent = 0;
int sumOfCourse = 0;
int j = 0; // j 需要在循环外进行输出,所以定义到外面
for (; j < 3; j ++) {
// 注意i和j分别表示什么
sumOfStudent += scores[i][j];
sumOfCourse += scores[j][i];
}
printf("第%d个学生的总分 = %d\n", i, sumOfStudent);
printf("第%d门课程的总分 = %d\n\n", i, sumOfCourse);
}
return 0;
}
练习:
有一个3 * 4的矩阵,求出最大的那个元素的值,并输出行号和列号