用C语言,输入n✖️m 矩阵,用函数编程计算并输出其两条对角线上到的各元素之和
时间: 2024-12-23 10:25:56 浏览: 6
在C语言中,为了计算输入矩阵的两条对角线元素之和,你可以定义一个函数,接受矩阵的行数n和列数m作为参数,并通过动态内存分配创建二维数组来存储矩阵。然后,分别累加主对角线(从左上到右下)和副对角线(从左下到右上)的元素。以下是这个功能的一个简单实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 函数声明
int calculateDiagonalSums(int n, int m, int matrix[n][m]);
int main() {
int n, m;
printf("请输入矩阵的行数n和列数m: ");
scanf("%d %d", &n, &m);
// 检查输入是否合法 (防止越界)
if(n <= 0 || m <= 0) {
printf("无效的矩阵尺寸, 矩阵大小应大于0.\n");
return 1;
}
// 动态分配矩阵
int** mat = malloc(n * sizeof(int*));
for(int i = 0; i < n; i++) {
mat[i] = malloc(m * sizeof(int));
for(int j = 0; j < m; j++) {
scanf("%d", &mat[i][j]);
}
}
// 计算并输出结果
int mainDiagonalSum = calculateDiagonalSums(n, m, mat);
int secondaryDiagonalSum = calculateDiagonalSums(n, m, rotateMatrix(mat)); // 对旋转后的矩阵求和
printf("主对角线元素之和: %d\n", mainDiagonalSum);
printf("副对角线元素之和: %d\n", secondaryDiagonalSum);
// 释放内存
for(int i = 0; i < n; i++) {
free(mat[i]);
}
free(mat);
return 0;
}
// 函数,计算给定二维数组的对角线元素之和
int calculateDiagonalSums(int n, int m, int matrix[n][m]) {
int sum = 0;
for(int i = 0; i < n; i++) {
sum += matrix[i][i]; // 主对角线
if(i != n - i];
}
}
return sum;
}
// 函数,将矩阵顺时针旋转90度
int** rotateMatrix(int** matrix, int n) {
int** rotatedMat = malloc(n * sizeof(int*));
for(int i = 0; i < n; i++) {
rotatedMat[i] = malloc(n * sizeof(int));
for(int j = 0; j < n; j++) {
rotatedMat[j][n - 1 - i] = matrix[i][j];
}
}
return rotatedMat;
}
```
在这个示例中,`calculateDiagonalSums`函数会计算主对角线和副对角线的总和,而`rotateMatrix`函数用于旋转矩阵以便访问副对角线的元素。
阅读全文