08-多维数组

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;
}

猜你喜欢

转载自blog.csdn.net/weixin_46658279/article/details/146570544
今日推荐