求二维数组两斜对角线求和用C+
时间: 2024-11-09 10:17:42 浏览: 32
在C语言中,求二维数组两斜对角线的元素之和通常涉及到两个步骤:首先遍历数组获取每个元素值,然后计算并累加这两条对角线的总和。这里是一个简单的示例:
```c
#include <stdio.h>
#define ROWS 4 // 定义数组行数
#define COLS 5 // 定义数组列数
// 函数声明
int getDiagonalSum(int arr[ROWS][COLS]);
int main() {
int arr[ROWS][COLS] = { {1, 2, 3, 4, 5},
{6, 7, 8, 9, 10},
{11, 12, 13, 14, 15},
{16, 17, 18, 19, 20} }; // 示例二维数组
int sum1 = getDiagonalSum(arr); // 主对角线求和
int sum2 = getDiagonalSum(transpose(arr)); // 反对角线求和 (如果数组是正方形)
printf("主对角线和: %d\n", sum1);
printf("反对角线和: %d\n", sum2);
return 0;
}
// 计算给定数组的主对角线和
int getDiagonalSum(int arr[ROWS][COLS]) {
int sum = 0;
for (int i = 0; i < ROWS && i < COLS; ++i) {
sum += arr[i][i]; // 对主对角线元素求和
}
return sum;
}
// 矩阵转置函数 (仅适用于正方形矩阵)
int (*transpose)[COLS] = NULL;
void transposeMatrix(int arr[ROWS][COLS], int transposed[ROWS][ROWS]) {
transpose = transposed;
for (int i = 0; i < ROWS; ++i) {
for (int j = i; j < COLS; ++j) {
transpose[i][j] = arr[j][i];
transpose[j][i] = arr[i][j]; // 如果数组不是正方形,则此处不需要交换
}
}
}
int getDiagonalSumTranspose(int arr[ROWS][COLS]) {
if (transpose) {
return getDiagonalSum(transpose);
} else {
printf("无法计算反对角线和,因为未对矩阵进行转置。\n");
return -1; // 或者抛出错误
}
}
```
在这个例子中,`getDiagonalSum`函数负责计算主对角线的和,而`transposeMatrix`函数用于转置二维数组,`getDiagonalSumTranspose`则在转置后的数组上计算反对角线的和。
阅读全文