作业帮 > 综合 > 作业

请问一个C语言问题.2、编写一个函数,对n×n矩阵,通过行变换,使其每行元素的平均值按递增顺序排列.分析:题目要求矩阵两

来源:学生作业帮 编辑:搜搜做题作业网作业帮 分类:综合作业 时间:2024/07/13 12:21:11
请问一个C语言问题.
2、编写一个函数,对n×n矩阵,通过行变换,使其每行元素的平均值按递增顺序排列.
分析:
题目要求矩阵两行元素的平均值按递增顺序排列,由于每行元素个数相等,因此按平均值排列与按每行元素之和排列是一个意思.所以应先求出各行元素之和,放入一维数组中,然后选择一种排序方法,对该数组进行排序.注意在排序时,若有元素移动,则与之相应的行中各元素也必须做相应的变动.
参考代码:
#include
#define N 3
voidTranslation(int *matrix,int n);
void main()
{
int i,j,n=N; int a[N][N];
//printf("\n请输入矩阵行列长度 n:\n");
//scanf("%d",&n);
printf("\n矩阵a[%d][%d]:\n",n,n);
for(i=0;i
请问一个C语言问题.2、编写一个函数,对n×n矩阵,通过行变换,使其每行元素的平均值按递增顺序排列.分析:题目要求矩阵两
#include<stdio.h>
#define N 3
 
void Translation(int matrix[][N]);
 
void main() {
\x09int i,j,n = N;
\x09int a[N][N];
   printf("输入 %d 个整数:",N * N);
   for(i = 0; i < N; ++i)
\x09   for(j = 0; j < N; ++j)
\x09\x09   scanf("%d",&a[i][j]);
 
   printf("转换前:\n");
   for(i = 0;i < N; ++i) {
\x09   for(j = 0; j < n; ++j)
\x09\x09   printf("%4d",a[i][j]);
\x09   printf("\n");
   }
   Translation(a);
   printf("转换后:\n");
   for(i = 0;i < N; ++i) {
\x09   for(j = 0; j < n; ++j)
\x09\x09   printf("%4d",a[i][j]);
\x09   printf("\n");
   }
}
 
void Translation(int a[][N]) {  
\x09int i,j,k,t,b[N];
\x09for(i = 0;i < N;i++) {
\x09\x09b[i] = 0;
\x09\x09for(j = 0; j < N; ++j)
\x09\x09\x09b[i] += a[i][j];
\x09}
\x09for(i = 0; i < N - 1; ++i) {
\x09\x09k = i;
\x09\x09for(j = i + 1; j < N; ++j) {
\x09\x09\x09if(b[k] > b[j]) k = j;
\x09\x09}
\x09\x09if(k != i) {
\x09\x09\x09t = b[i];
\x09\x09\x09b[i] = b[k];
\x09\x09\x09b[k] = t;
\x09\x09\x09for(j = 0; j < N; ++j) {
\x09\x09\x09\x09t = a[i][j];
\x09\x09\x09\x09a[i][j] = a[k][j];
\x09\x09\x09\x09a[k][j] = t;
\x09\x09\x09}
\x09\x09}
\x09}
}