c语言基础之二维数组
声明:本文主要用作技术分享,所有内容仅供参考。任何使用或依赖于本文信息所造成的法律后果均与本人无关。请读者自行判断风险,并遵循相关法律法规。
二维数组是一种数据结构,它可以被看作是一个由行和列组成的表格。从概念上讲,可以将二维数组想象成一个有行有列的矩阵。比如一个 int arr[3][4] 这样的二维数组,就好像是一个 3 行 4 列的表格,总共能存放 12 个整数。在内存中,二维数组的存储是线性的,也就是说,虽然我们在逻辑上把它看作是行和列的组合,但实际上内存是依次连续存储这些元素的。先存储第一行的所有元素,然后再存储第二行,以此类推。在使用二维数组时,我们通常通过两个索引来访问其中的元素。第一个索引表示行,第二个索引表示列。例如,arr[1][2] 表示访问第二行第三列的元素。
在编程中,二维数组常用于以下场景:
- 表示图像数据:图像可以看作是由像素组成的矩阵,每个像素有其颜色值。
- 存储矩阵运算的数据:如线性代数中的矩阵相加、相乘等操作。
- 处理表格形式的数据:比如学生成绩表、库存清单等。
以下是用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;
}