5.4.3 二维数组元素的访问
定义数组的目的,主要是使用数组元素。下面就来讲述如何对二维数组中的元素进行访问。
对于一维数组元素的访问,只需给出该数组元素所对应位置的下标即可。对于二维数组来说,每个数组元素的位置受行和列的影响,所以要给出两个下标才能准确定位。二维数组元素的访问格式为:
二维数组名[下标 1][下标 2];
下标 1 对应着数组元素所在的行,下标 2 对应着数组元素所在的列,通过行和列,就能精确定位到该数组元素的位置,然后像普通变量一样来使用这个数组元素。例如:
float f = score[0][1]; //将第 1 行第 2 列的数组元素值赋给 float 类型变量 f score[2][2] = 99; //将第 3 行第 3 列的数组元素重新赋值为 99
C 语言中,数组所使用的下标值都是从 0 开始的。我们应该让下标值保持在一个合理的区间范围内,否则就会造成数组的越界访问。例如本例中,score 是一个 3 行 4 列的二维数组,因此下标 1 的合理区间为 0~2,下标 2 的合理区间为 0~3。
有了前面的学习,现在该是解决例 5-3 的时候了。
我们首先将成绩表中的数据,以行初始化的方式存储到二维数组 score 中:
然后准备计算每个学生的总分和平均分。我们将表中数据以列为单位,每一列对应着一个学生的三门课程成绩,只要计算出每列的总分和平均分即可。
我们定义一个 float 类型的变量 total,用于计算每一列的总分。接着再定义两个整型变量 i 和 j,用于循环语句中。
float total; //用于累加成绩 int i, j;
通过双层嵌套的 for 循环语句,外层以列为单位进行循环,内层以行为单位进行循环,并在内层循环之前将变量 total 重新赋值为 0:
外层循环使循环体被执行 4 次,从而达到遍历所有列的目的。而每一次外层循环体的被执行,都会使内层循环的循环体被执行 3 次,从而遍历了对应该列的所有行上的数据。
例如,外层循环第一次被执行时,外层循环中变量 i 为 0,对应着第 1 列,在外层循环的循环体中,首先将变量 total 的值赋为 0,然后开始执行内层循环,而内层循环中变量 j 的值 0~2,对应着第 1~3 行,导致内层循环体的“score[j][i]”会分别访问“第 1 行第 1 列”“第 2 行第 1 列”和“第 3 行第 1 列”这三个数组元素的值,并将其累加到变量 total 中。在内层循环结束后,通过 printf 语句打印出第 1 列的序号、总分和平均分,至此,外层的第 1 次循环结束。
同理,外层循环的第 2 次执行,会得到第 2 列的总分和平均分,第 3 次执行,会得到第 3 列的总分和平均分,第 4 次执行,会得到第 4 列的总分和平均分,然后整个循环结束。
需要注意的是,在打印序号时,我们使用的是“i + 1”,因为 i 是作为下标值来使用,是从 0 开始的,而我们生活中都习惯从 1 开始计数。
最后再来计算每门课程的总分和平均分。这和计算每个学生的总分和平均分非常类似。也是通过双层循环,只不过这次是反过来,外层是以行为单位进行循环,内层是以列为单位进行循环,最终可以得到各个行的总分和平均分。整个程序的代码如下:
程序运行结果如下:
Student total and average scores: 1. total:232.00, average:77.33 2. total:226.00, average:75.33 3. total:290.00, average:96.67 4. total:263.50, average:87.83 Course total and average scores: 1. total:357.00, average:89.25 2. total:329.00, average:82.25 3. total:325.50, average:81.38
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论