请问一个C语言问题。

2、编写一个函数,对n×n矩阵,通过行变换,使其每行元素的平均值按递增顺序排列。分析:题目要求矩阵两行元素的平均值按递增顺序排列,由于每行元素个数相等,因此按平均值排列与... 2、编写一个函数,对n×n矩阵,通过行变换,使其每行元素的平均值按递增顺序排列。
分析:
题目要求矩阵两行元素的平均值按递增顺序排列,由于每行元素个数相等,因此按平均值排列与按每行元素之和排列是一个意思。所以应先求出各行元素之和,放入一维数组中,然后选择一种排序方法,对该数组进行排序。注意在排序时,若有元素移动,则与之相应的行中各元素也必须做相应的变动。
参考代码:
#include<stdio.h>
#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<n;i++)
{
for(j=0;j<n;j++)
scanf("%4d",&a[i][j]);
}
printf("原矩阵a是:\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++) printf("%4d",a[i][j]);
printf("\n");
}
Translation(a,n);
printf("行平均值升序排列后矩阵a是:\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++) printf("%4d",a[i][j]);
printf("\n");
}
}

voidTranslation(int *matrix,int m)
{
int i,j,k;
int sum,min;
int *p,*pi,*pk;
for(i=0;i<m;i++) // pk指向矩阵各行第一个元素,
// 求第一行元素之和, 将一行元素之和存入一维数组p
{
此处填写代码,或完全书写代码

}
for(i=0;i<m-1;i++) //用选择法对数组p进行排序
{
此处填写代码,或完全书写代码
}
}
求高手解答,总是有错误。用的Cygwin编译器
展开
 我来答
爱夜009
2014-11-24 · TA获得超过192个赞
知道小有建树答主
回答量:309
采纳率:0%
帮助的人:211万
展开全部

int *p,*pi,*pk;
p = (int *)malloc(sizeof(int)*n); //新加
for(i=0;i<m;i++)      // pk指向矩阵各行第一个元素,
   for(i=0;i<m;i++)      // pk指向矩阵各行第一个元素,
// 求第一行元素之和, 将一行元素之和存入一维数组p
   {
//此处填写代码,或完全书写代码
    sum = 0;
    for( j = 0 ; j < m ; j++)
    {
        sum+=matrix[i][j];
    }
     p[i] = sum;
}
   for(i=0;i<m-1;i++)   //用选择法对数组p进行排序
   {
       // 此处填写代码,或完全书写代码
       min = p[i];
       k = i;
       
       //以下代码找到i到m的最小值 并记录位置k
       for( j = i+1; j < m; j++)
       {
           if( p[j]  < min)
           {
               k = j;
               min = p[j];
           }
       }
       
       //k - i  k >= i  如果 k - i = 0 则 i 就是最小值位置 不用交换
       if( k != i)
       {
       //先处理数组
            min = p[i];
            p[i] = p[k];
            p[k] = min;
            
            //i 是当前行   k 是i 到 m sum 最小行
            // 交换 i 与 k 行
            for( j = 0; j < m; j ++)
            {
                min = matrix[i][j];
                matrix[i][j] = matrix[k][j];
                matrix[k][j] = min;
            }
       }
       
   }
xoaxa
2014-11-24 · TA获得超过8611个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3499万
展开全部
#include<stdio.h>
#define N 3
 
void Translation(int matrix[][N]);
 
void main() {
int i,j,n = N;
int a[N][N];
   printf("输入 %d 个整数:",N * N);
   for(i = 0; i < N; ++i)
   for(j = 0; j < N; ++j)
   scanf("%d",&a[i][j]);
 
   printf("转换前:\n");
   for(i = 0;i < N; ++i) {
   for(j = 0; j < n; ++j)
   printf("%4d",a[i][j]);
   printf("\n");
   }
   Translation(a);
   printf("转换后:\n");
   for(i = 0;i < N; ++i) {
   for(j = 0; j < n; ++j)
   printf("%4d",a[i][j]);
   printf("\n");
   }
}
 
void Translation(int a[][N]) {  
int i,j,k,t,b[N];
for(i = 0;i < N;i++) {
b[i] = 0;
for(j = 0; j < N; ++j)
b[i] += a[i][j];
}
for(i = 0; i < N - 1; ++i) {
k = i;
for(j = i + 1; j < N; ++j) {
if(b[k] > b[j]) k = j;
}
if(k != i) {
t = b[i];
b[i] = b[k];
b[k] = t;
for(j = 0; j < N; ++j) {
t = a[i][j];
a[i][j] = a[k][j];
a[k][j] = t;
}
}
}
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式