数组可以被看作是一行连续的数据,它只有一个下标,这就是我们熟悉的一维数组。但在实际应用中,许多数据都是二维或多维的,因此C语言提供了多维数组的概念。多维数组元素拥有多个下标,这些下标共同确定其在数组中的具体位置。这次我们将重点介绍二维数组,多维数组的概念可以类比二维数组进行理解。
一、二维数组的定义
二维数组的定义通常如下所示:
其中,dataType代表数据类型,arrayName代表数组名,length1代表第一维下标的长度,length2代表第二维下标的长度。我们可以将二维数组想象成一个Excel表格,它有行和列。length1代表行数,length2代表列数。在二维数组中定位一个元素,需要同时指定行和列。例如,定义了一个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]
若要表示第2行第1列的元素,应写作a[2][1]。我们也可以将二维数组想象成一个坐标系,x轴和y轴共同确定一个点在平面中的位置。二维数组在概念上是二维的,但在内存中是连续存放的,也就是说,二维数组的各个元素是相互挨着的,没有缝隙。那么,如何在线性内存中存放二维数组呢?有两种方式:
在C语言中,二维数组是按行排列的。也就是说,先存放a[0]行,然后是a[1]行,最后是a[2]行;每行中的4个元素也是依次存放。数组a为int类型,每个元素占用4个字节,整个数组共占用4×(3×4)=48个字节。可以这样认为,二维数组是由多个长度相同的一维数组构成的。
【实例1】一个学习小组有5个人,每个人有3门课程的考试成绩,求该小组各科的平均分和总平均分。
对于该题目,可以定义一个二维数组a[5][3]存放5个人3门课的成绩,定义一个一维数组v[3]存放各科平均分,再定义一个变量average存放总平均分。最终编程如下:
运行结果:Input score: 80 61 59 85 76 75 65 63 87 77 92 71 70 90 85↙ Math: 72 C Language: 73 English: 81 Total: 75
程序使用了一个嵌套循环来读取所有学生所有科目的成绩。在内层循环中依次读入某一门课程的各个学生的成绩,并把这些成绩累加起来,退出内层循环(进入外层循环)后再把该累加成绩除以5送入v[i]中,这就是该门课程的平均分。外层循环共循环三次,分别求出三门课各自的平均成绩并存放在数组v中。所有循环结束后,把v[0]、v[1]、v[2]相加除以3就可以得到总平均分。
二、二维数组的初始化(赋值)
二维数组的初始化可以按行分段赋值,也可以按行连续赋值。例如,对于数组a[5][3],按行分段赋值应该写作:
按行连续赋值应该写作:
这两种赋初值的结果是完全相同的。
【实例2】和“实例1”类似,依然求各科的平均分和总平均分,不过本例要求在初始化数组的时候直接给出成绩。
运行结果:Math: 72 C Language: 73 English: 81 Total: 75
对于二维数组的初始化,还需要注意以下几点:
1) 可以只对部分元素赋值,未赋值的元素自动取“零”值。例如:
是对每一行的第一列元素赋值,未赋值的元素的值为0。赋值后各元素的值为:1 0 0 2 0 0 3 0 0
再如:
赋值后各元素的值为:0 1 0 0 0 2 3 0 0
2) 如果对全部元素赋值,那么第一维的长度可以不给出。例如:
可以写为:
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]。
以上为本次所有分享内容
温馨提示:答案为网友推荐,仅供参考