下面是“C语言多维数组”的完整使用攻略。
多维数组的定义与初始化
在C语言中,多维数组可以用来存储表格或矩阵等数据结构,它由一系列一维数组所组成,因此可以说,多维数组其实就是数组的数组。在定义多维数组时,需要确定它的维数和每一维的大小,例如:
int arr[3][4]; //表示一个3行4列,总共12个元素的二维数组
也可以在定义同时初始化,例如:
int arr[2][2] = {{1, 2}, {3, 4}}; //表示一个2行2列的二维数组,初始值分别为1,2,3,4
需要注意的是,在C语言中,多维数组不一定要求每一维的大小相同,比如可以这样定义一个不规则的三维数组:
int arr[2][3][4] = {
{{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}},
{{13, 14, 15, 16}, {17, 18, 19, 20}}
};
多维数组的访问
C语言中的多维数组是通过一维数组来实现的,因此在访问多维数组元素时,需要根据每一维的大小计算出在一维数组中的位置,然后通过数组下标访问,例如:
int arr[2][3] = {{1, 2, 3}, {4, 5, 6}};
int a = arr[0][1]; //访问第1行第2列的元素,结果为2
int b = arr[1][2]; //访问第2行第3列的元素,结果为6
下面以一个三维数组为例,访问其中的元素:
int arr[2][3][4] = {
{{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}},
{{13, 14, 15, 16}, {17, 18, 19, 20}}
};
int c = arr[0][1][2]; //访问第1个3维数组中第2行第3列的元素,结果为7
int d = arr[1][0][3]; //访问第2个3维数组中第1行第4列的元素,结果为16
多维数组的传递
在C语言中,多维数组作为函数参数时,需要指定每一维的大小,否则会出现编译错误。例如,如果定义一个函数用来打印二维数组,其参数应该如下:
void printArray(int arr[][3], int rows)
{
for (int i = 0; i < rows; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
}
这样,我们就可以将一个二维数组传递给该函数进行打印了,例如:
int arr[2][3] = {{1, 2, 3}, {4, 5, 6}};
printArray(arr, 2);
示例说明
下面给出两个示例来说明多维数组的使用。
示例1:使用多维数组求矩阵的乘积
给定两个矩阵A和B,分别为3行4列和4行2列,求两个矩阵的乘积C,即:
|1 2 3 4| |5 6| |? ?|
A = |5 6 7 8|, |7 8| = |? ?|
|9 0 1 2| |9 0| |? ?|
首先,定义三个二维数组A、B和C用来存储矩阵:
int A[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 0, 1, 2}};
int B[4][2] = {{5, 6}, {7, 8}, {9, 0}, {1, 2}};
int C[3][2] = {};
然后,使用两重循环,分别遍历A和B矩阵中的元素,把它们相乘后累加到C矩阵对应位置上:
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 2; j++) {
for (int k = 0; k < 4; k++) {
C[i][j] += A[i][k] * B[k][j];
}
}
}
最后,输出C矩阵的元素即可:
printf("%d %d\n", C[0][0], C[0][1]);
printf("%d %d\n", C[1][0], C[1][1]);
printf("%d %d\n", C[2][0], C[2][1]);
输出结果为:
38 44
97 114
46 54
示例2:使用多维数组统计成绩并计算平均分
有5名学生,每人分别参加3门课程的考试,分数如下表所示,请使用多维数组统计每门课程的总分和平均分,并分别输出。
|语文 数学 英语|
李明| 85 92 78|
王华| 76 85 67|
张强| 90 85 88|
赵丽| 88 79 92|
刘洋| 66 79 83|
首先,定义一个二维数组score用来存储每个学生每门课程的成绩,并初始化它:
int score[5][3] = {{85, 92, 78}, {76, 85, 67}, {90, 85, 88}, {88, 79, 92}, {66, 79, 83}};
然后,定义两个一维数组sum和avg分别用来存储每门课程的总分和平均分:
int sum[3] = {}, avg[3] = {};
接着,使用两重循环,分别遍历score中的每个元素,把它们累加到sum中:
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 3; j++) {
sum[j] += score[i][j];
}
}
最后,计算平均分并输出:
for (int i = 0; i < 3; i++) {
avg[i] = sum[i] / 5;
printf("%s%d%s%d%s%d%s%d\n", "第", i+1, "门课程总分为:", sum[i], ",平均分为:", avg[i], "。");
}
输出结果为:
第1门课程总分为:405,平均分为:81。
第2门课程总分为:420,平均分为:84。
第3门课程总分为:408,平均分为:81。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言多维数组 - Python技术站