用c语言写个程序 对于一个m行m列(2<m<20)的方阵,求其每一行、每一列及主、辅对角线元素之和,然后按照从大到小的顺序依次输出这些值。 注:主对角线是方阵从左上角到右下角的一条斜线,辅对角线是方阵从右上角到左下角的一条斜线。 输入说明 输入数据的第一行为一个正整数m; 接下来为m行、每行m个整数表示方阵的元素。 输出说明 从大到小排列的一行整数,每个整数后跟一个空格,最后换行。
时间: 2023-03-19 15:22:27 浏览: 106
以下是用C语言编写的程序,可以对一个m行m列的方阵进行每一行、每一列以及主、辅对角线元素求和,并按照从大到小的顺序输出这些值:
```c
#include <stdio.h>
int main() {
int m;
scanf("%d", &m); // 输入方阵的行列数
int matrix[m][m];
for (int i = 0; i < m; i++) {
for (int j = 0; j < m; j++) {
scanf("%d", &matrix[i][j]); // 输入方阵的元素
}
}
int row_sum[m] = {0}; // 每一行的元素和
int col_sum[m] = {0}; // 每一列的元素和
int main_diagonal_sum = 0; // 主对角线的元素和
int secondary_diagonal_sum = 0; // 辅对角线的元素和
// 计算每一行、每一列、主对角线和辅对角线的元素和
for (int i = 0; i < m; i++) {
for (int j = 0; j < m; j++) {
row_sum[i] += matrix[i][j];
col_sum[j] += matrix[i][j];
if (i == j) {
main_diagonal_sum += matrix[i][j];
}
if (i == m - j - 1) {
secondary_diagonal_sum += matrix[i][j];
}
}
}
// 将每一行、每一列、主对角线和辅对角线的元素和存储在一个数组中
int sum[m * 2 + 2];
for (int i = 0; i < m; i++) {
sum[i] = row_sum[i];
sum[i + m] = col_sum[i];
}
sum[m * 2] = main_diagonal_sum;
sum[m * 2 + 1] = secondary_diagonal_sum;
// 冒泡排序,将元素和从大到小排序
for (int i = 0; i < m * 2 + 2 - 1; i++) {
for (int j = 0; j < m * 2 + 2 - i - 1; j++) {
if (sum[j] < sum[j + 1]) {
int temp = sum[j];
sum[j] = sum[j + 1];
sum[j + 1] = temp;
}
}
}
// 输出排序后的元素和
for (int i = 0; i < m * 2 + 2; i++) {
printf("%d ", sum[i]);
}
printf("\n");
return 0;
}
```
程序运行时,首先输入一个正整数m,表示方阵的行列数。接下来输入m行,每行m个整数表示方阵的元素。程序会对每一行、每一列、主对角线和辅对角线的元素求和,并将它们存储在一个数组中。然后使用冒泡排序算法,将数组中的元素从大到
阅读全文