请写一个c语言程序,对于一个m行m列(2<m<20)的方阵,求其每一行、每一列及主、辅对角线元素之和(注:主对角线是方阵从左上角到右下角的一条斜线,辅对角线是方阵从右上角到左下角的一条斜线),然后按照从大到小的顺序依次输出这些值。
时间: 2024-12-29 11:29:12 浏览: 14
以下是一个简单的C语言程序,用于计算给定矩阵的行和、列和以及主对角线和辅助对角线和,并按降序输出:
```c
#include <stdio.h>
#define MAX_ROWS 19
// 函数声明
int row_sum(int matrix[][MAX_ROWS], int m);
int col_sum(int matrix[][MAX_ROWS], int m);
int main_diagonal_sum(int matrix[][MAX_ROWS], int m);
int anti_diagonal_sum(int matrix[][MAX_ROWS], int m);
void print_sorted(int array[], int count) {
int i;
for (i = count - 1; i >= 0; i--) {
printf("%d ", array[i]);
}
printf("\n");
}
int main() {
int m, n;
printf("Enter number of rows and columns (2 < m < 20): ");
scanf("%d %d", &m, &n);
if (m != n || m < 2 || m > 19) {
printf("Invalid input! Exiting...\n");
return 0;
}
int matrix[m][m];
// 输入矩阵
printf("Enter the matrix:\n");
for (int i = 0; i < m; i++) {
for (int j = 0; j < m; j++) {
scanf("%d", &matrix[i][j]);
}
}
int row_sums[MAX_ROWS] = {0};
int col_sums[MAX_ROWS] = {0};
int main_diag_sum = main_diagonal_sum(matrix, m);
int anti_diag_sum = anti_diagonal_sum(matrix, m);
// 计算行和列和
for (int i = 0; i < m; i++) {
row_sums[i] = row_sum(matrix, m);
col_sums[i] = col_sum(matrix, m);
}
// 打印结果
printf("Row sums: \n");
print_sorted(row_sums, m);
printf("Column sums: \n");
print_sorted(col_sums, m);
printf("Main diagonal sum: %d\n", main_diag_sum);
printf("Anti-diagonal sum: %d\n", anti_diag_sum);
return 0;
}
// 辅助函数:计算一行和一列的和
int row_sum(int matrix[][MAX_ROWS], int m) {
int sum = 0;
for (int j = 0; j < m; j++) {
sum += matrix[0][j]; // 仅取第一行
}
return sum;
}
int col_sum(int matrix[][MAX_ROWS], int m) {
int sum = 0;
for (int i = 0; i < m; i++) {
sum += matrix[i][0]; // 仅取第一列
}
return sum;
}
// 主对角线和辅助对角线的和
int main_diagonal_sum(int matrix[][MAX_ROWS], int m) {
int sum = 0;
for (int i = 0; i < m; i++) {
sum += matrix[i][i];
}
return sum;
}
int anti_diagonal_sum(int matrix[][MAX_ROWS], int m) {
int sum = 0;
for (int i = 0; i < m; i++) {
sum += matrix[i][m - 1 - i];
}
return sum;
}
```
阅读全文