相信大家对于一维数组有一定的了解,那么什么是二维数组呢?
数组可以看做一行连续的数据,只有一个下标的称为一维数组,那么可以猜想多维数组有多个下标,其实就是如此,所以这里要讲的二维数组就是有两个下标的数组。
二维数组的定义形式是:数据类型 数组名[一维长度][二维长度]
在一维数组中如何排列二维数组呢?其实二维数组内存的地址也是连续的,分两种方式:
①按行排列,先放入第一行再顺次排列第二行,依次下去;
②按列排列,先放入第一列再顺次排列第二列,依次下去。
对于二维数组赋值来简单介绍一下:
int a[2][3]={{1,2,3},{4,5,6}};
int a[2][3]={1,2,3,4,5,6};
int a[][3]={{1,2,3},{4,5,6}};
#include <stdio.h>
int main(){
int i, j; //二维数组下标
int sum=0; //当前科目的总成绩
int average; //总平均分
int v[3]; //数学,C语言,英语三科的平均分数组
int a[5][3]; //用来保存每个同学各科成绩的二维数组
printf("Input score:\n");
for(i=0; i<3; i++){
for(j=0; j<5; j++){
scanf("%d", &a[j][i]); //输入每个同学的各科成绩
sum+=a[j][i]; //计算当前科目的总成绩
}
v[i]=sum/5; // 当前科目的平均分
sum=0;
}
average =(v[0]+v[1]+v[2])/3; //总平均分
printf("Math: %d\nC Language: %d\nEnglish: %d\n", v[0], v[1], v[2]);//单科的平均分分开打印
printf("Total:%d\n", average);
return 0; //定义的int类型函数,必须要有返回值。
}
程序中首先用了一个双重循环。在内循环中依次读入某一门课程的各个学生的成绩,并把这些成绩累加起来,退出内循环后再把该累加成绩除以5送入v[i]之中,这就是该门课程的平均成绩。外循环共循环三次,分别求出三门课各自的平均成绩并存放在v数组之中。退出外循环之后,把v[0]、v[1]、v[2]相加除以3即得到各科总平均成绩。最后按题意输出各个成绩。
对于二维数组初始化赋值还有以下说明:
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]不能当作下标变量使用,它们是数组名,不是一个单纯的下标变量。