请问一个C语言问题.2、编写一个函数,对n×n矩阵,通过行变换,使其每行元素的平均值按递增顺序排列.分析:题目要求矩阵两行元素的平均值按递增顺序排列,由于每行元素个数相等,因此按平均
来源:学生作业帮助网 编辑:六六作业网 时间:2024/09/09 03:36:09
请问一个C语言问题.2、编写一个函数,对n×n矩阵,通过行变换,使其每行元素的平均值按递增顺序排列.分析:题目要求矩阵两行元素的平均值按递增顺序排列,由于每行元素个数相等,因此按平均
请问一个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}
}