请写一个c语言程序,对于一个m行m列(2<m<20)的方阵,求其每一行、每一列及主、辅对角线元素之和,然后按照从大到小的顺序依次输出这些值。 注:主对角线是方阵从左上角到右下角的一条斜线,辅对角线是方阵从右上角到左下角的一条斜线。 输入说明 输入数据的第一行为一个正整数m; 接下来为m行、每行m个整数表示方阵的元素。 输出说明 从大到小排列的一行整数,每个整数后跟一个空格,最后换行。
时间: 2023-03-20 12:00:34 浏览: 290
以下是一个求解题目所需功能的C语言程序。这个程序可以处理用户输入的大小为m的方阵,然后计算并按照从大到小的顺序输出每行、每列及主、辅对角线元素之和。
```c
#include <stdio.h>
#define MAX_SIZE 20
int main()
{
int m;
int matrix[MAX_SIZE][MAX_SIZE];
int row_sum[MAX_SIZE] = {0};
int col_sum[MAX_SIZE] = {0};
int diag1_sum = 0;
int diag2_sum = 0;
// 读入矩阵的大小和元素
scanf("%d", &m);
for(int i = 0; i < m; i++)
{
for(int j = 0; j < m; j++)
{
scanf("%d", &matrix[i][j]);
}
}
// 计算每一行、每一列及主、辅对角线的和
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)
{
diag1_sum += matrix[i][j];
}
if(i + j == m - 1)
{
diag2_sum += matrix[i][j];
}
}
}
// 将每行、每列及主、辅对角线的和存入一个数组中
int sum_array[MAX_SIZE*2+2];
int count = 0;
for(int i = 0; i < m; i++)
{
sum_array[count] = row_sum[i];
count++;
sum_array[count] = col_sum[i];
count++;
}
sum_array[count] = diag1_sum;
count++;
sum_array[count] = diag2_sum;
count++;
// 将数组按从大到小的顺序排序
for(int i = 0; i < count; i++)
{
for(int j = i+1; j < count; j++)
{
if(sum_array[i] < sum_array[j])
{
int temp = sum_array[i];
sum_array[i] = sum_array[j];
sum_array[j] = temp;
}
}
}
// 输出排序后的结果
for(int i = 0; i < count; i++)
{
printf("%d ", sum_array[i]);
}
printf("\n");
return 0;
}
```
这个程序首先读入了矩阵的大小和元素,并且利用两个数组分别存储每一行和每一列的和,以及主、辅对角线的和。接着将这些和存储到一个数组中,并且使用简单的选择排序算法将它们从大到小排序。最后,程序输出排序后的结果。
阅读全文