请问一个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编译器
急 展开
分析:
题目要求矩阵两行元素的平均值按递增顺序排列,由于每行元素个数相等,因此按平均值排列与按每行元素之和排列是一个意思。所以应先求出各行元素之和,放入一维数组中,然后选择一种排序方法,对该数组进行排序。注意在排序时,若有元素移动,则与之相应的行中各元素也必须做相应的变动。
参考代码:
#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编译器
急 展开
2个回答
展开全部
在
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;
}
}
}
展开全部
#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;
}
}
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询