1.多维数组:
多维数组介绍:
如果数组的元素还是数组,这样的数组就称为多维数组。这种多层次的结构允许我们以 表格或矩阵的方式组织数据,其中每个维度都对应于不同的行、列或更多的维度,使数据更加结构化和有组织。这里以二维数组的形式进行介绍。
2.二维数组的定义:
方式1: 先定义再初始化
方式2: 直接定义并初始化--------(推荐这种写法)
2.1二维数组的访问和遍历
访问二维数组的元素,需要使用两个下标(索引),一个用于访问行(第一维),另一 个用于访问列(第二维),我们通常称为行下标(行索引)或列下标(列索引)。 遍历二维数组,需要使用双层循环结构。
代码示例:
#include<stdio.h>
int main()
{
// 定义二维数组
int map[3][4] = {
{1,2,3,4},
{11,12,13,14},
{21,22,23,24},
};
// 访问二维数组元素
// 行下标和列下标
printf("%d \n", map[1][2]);
// 二维数组计算行数
int rows = sizeof map / sizeof map[0];
// 二维数组计算列数
int cols = sizeof map[0] / sizeof (int);
printf("行数:%d, 列数:%d \n", rows, cols);
// 遍历二维数组
int sum = 0;
// 外层循环 对应行
for(int i = 0; i < rows; i++)
{
for(int j = 0; j < cols; j++)
{
printf("%d ", map[i][j]);
sum += map[i][j];
}
printf("\n");
}
printf("所有元素的和:%d \n", sum);
return 0;
}
2.2二维数组的内存分析:
用矩阵形式(如3行4列形式)表示二维数组,是逻辑上的概念,能形象地表示出行列 关系。而在内存中,各元素是连续存放的,不是二维的,是线性的。 C语言中,二维数组中元素排列的顺序是按行存放的。即:先顺序存放第一行的元素, 再存放第二行的元素。 比如,举例,数组a[3][4] 在内存中的存放:
2.3二维应用案例:
- 现在有三个班,每个班五名同学,用二维数组保存他们的成绩。
- 并求出每个班级平均分、 以及所有班级平均分。
- 数据要求从控制台输入。
代码示例:
#include<stdio.h>
/****
*现在有三个班,每个班五名同学,用二维数组保存他们的成绩,
*并求出每个班级平均分、以及所有班级平均分,
*数据要求从控制台输入
*/
int main()
{
// 定义数组保存成绩
// double scores[3][5] = {
// {90,91,87,66,54},
// {91,92,17,68,94},
// {21,200,37,18,54},
// };
// 声明二维数组保存成绩
double scores[3][5];
// 使用循环获取用户输入完成二维数组的初始化
for(int i = 0; i < 3; i++)
{
for (int j = 0; j < 5; j++)
{
printf("请输入%d班第%d个同学的成绩:", i+1, j+1);
scanf("%lf", &scores[i][j]);
}
}
// 定义遍历 记录总成绩和班级总成绩
double total_score = 0.0; // 总成绩
double class_score = 0.0; // 所在班级总成绩
// 遍历二维数组
// 外层循环 对应班级
for(int i = 0; i < 3; i++)
{
// 将所在班级清0
class_score = 0.0;
// 内层循环 对应每个班级的同学
for (int j = 0; j < 5; j++)
{
class_score += scores[i][j];
}
// 输出所在班级的平均数
printf("%d班的平均成绩是: %.2lf \n", i+1, class_score / 5);
// 将所在班级的成绩加入到总成绩
total_score += class_score;
}
// 输出最终的平均成绩
printf("年纪平均成绩: %.2lf \n", total_score / 15);
return 0;
}