当前位置: 首页 > article >正文

c语言基础之二维数组

声明:本文主要用作技术分享,所有内容仅供参考。任何使用或依赖于本文信息所造成的法律后果均与本人无关。请读者自行判断风险,并遵循相关法律法规。

      二维数组是一种数据结构,它可以被看作是一个由行和列组成的表格。从概念上讲,可以将二维数组想象成一个有行有列的矩阵。比如一个 int arr[3][4] 这样的二维数组,就好像是一个 3 行 4 列的表格,总共能存放 12 个整数。在内存中,二维数组的存储是线性的,也就是说,虽然我们在逻辑上把它看作是行和列的组合,但实际上内存是依次连续存储这些元素的。先存储第一行的所有元素,然后再存储第二行,以此类推。在使用二维数组时,我们通常通过两个索引来访问其中的元素。第一个索引表示行,第二个索引表示列。例如,arr[1][2] 表示访问第二行第三列的元素。

在编程中,二维数组常用于以下场景:

  1. 表示图像数据:图像可以看作是由像素组成的矩阵,每个像素有其颜色值。
  2. 存储矩阵运算的数据:如线性代数中的矩阵相加、相乘等操作。
  3. 处理表格形式的数据:比如学生成绩表、库存清单等。

以下是用c语言解决二维数组的一个例题代码以及运行结果

例题:假设本学期学习5门课程,定义一个二维数组用来存储本班所有学生(假设有5人)的这5门课程的成绩。求每名学生5门课程的总成绩,并降序排序,输出对应的学号和总成绩,以此作为奖学金的评定依据。

#include <stdio.h>

#include <stdlib.h>

// 比较函数,用于排序

int compare(const void *a, const void *b) {

    int *pa = (int *)a;

    int *pb = (int *)b;

    return *pb - *pa;

}

int main() {

    int grades[5][5] = {

        {85, 90, 78, 88, 92},

        {75, 80, 85, 90, 70},

        {90, 88, 92, 86, 95},

        {80, 75, 82, 78, 85},

        {70, 65, 75, 68, 72}

    };

    int totalGrades[5];

    int studentIds[5] = {1, 2, 3, 4, 5};

    for (int i = 0; i < 5; i++) {

        int sum = 0;

        for (int j = 0; j < 5; j++) {

            sum += grades[i][j];

        }

        totalGrades[i] = sum;

    }

    // 对总成绩进行排序

    qsort(totalGrades, 5, sizeof(int), compare);

    printf("学号\t总成绩\n");

    for (int i = 0; i < 5; i++) {

        printf("%d\t%d\n", studentIds[i], totalGrades[i]);

    }

    return 0;

}


http://www.kler.cn/a/420887.html

相关文章:

  • Marvell第四季度营收预计超预期,定制芯片需求激增
  • CTF-PWN: WEB_and_PWN [第一届“吾杯”网络安全技能大赛 Calculator] 赛后学习(不会)
  • 数据仓库的概念
  • ESP32-S3模组上跑通ES8388(13)
  • 使用 LLaMA-Factory 微调
  • 12.2深度学习_项目实战
  • node.js基础学习-fs模块-文件操作(六)
  • 深度学习常用测试命令解释
  • 数据分析:探索数据背后的秘密与挑战
  • 3d/伪3d统计图形
  • ISO26262-(Timing Monitoring)在多核MCU的TPU上功能安全ASILB与ASILD有什么区别
  • MacOS 命令行详解使用教程
  • LlaSMol—— 建立一个大型、高质量的指令调整数据集 SMolInstruct 用于开发一个化学任务的大语言模型
  • Flink面试题推荐
  • Springboot(四十九)SpringBoot3整合jetcache缓存
  • 微软的重大突破:bitnet.cpp 开启 AI 本地CPU运行新时代
  • 【机器学习】Sigmoid函数在深层神经网络中存在梯度消失问题,如何设计一种改进的Sigmoid激活函数,既能保持其概率预测优势,又能避免梯度消失?
  • Linux 系统中常用的命令
  • scroll-view组件,在iOS设备上禁用橡皮筋回弹效果
  • VTK知识学习(16)- 基本数据结构之单元类型
  • React进阶面试题(四)
  • Unity中,Canva的三种渲染模式
  • 数字与字母互换python
  • golang 并发编程,每日一题
  • chrome使用问题记录
  • 【CSP CCF记录】202305-1第30次认证 重复局面