c语言求矩阵转置 结果老是不对,求解

# define m 3
# define n 2
#include<stdio.h>
void input(int a[m][n])
{
int i,j;
printf("请输入数据:\n");
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
}
}
void output(int a[m][n])
{
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
printf(" %d",a[i][j]);

printf("\n");
}
}
void zhuanzhi(int a[m][n])
{
int i,j;
int b[n][m];
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
b[j][i]=a[i][j];

}
output(b);
}
void main()
{
int a[m][n];
input(a);
zhuanzhi(a);
}

#define m 3

#define n 2

#include<stdio.h>

void output(int a[m][n])

{

 int i,j;

 for(i=0;i<m;i++)

 {

  for(j=0;j<n;j++)

   printf(" %d",a[i][j]);           

  printf("\n");

 }

}

void input(int a[m][n])

{

 int i,j;

 printf("请输入数据:\n");

 for(i=0;i<m;i++)

 {

  for(j=0;j<n;j++)         

   scanf("%d",&a[i][j]); 

  }

 output(a);

}

 

void  zhuanzhi(int a[m][n])

{

 int i,j;

 int b[2][3];

 

 for(i=0;i<m;i++)

 {

  for(j=0;j<n;j++)

   b[j][i]=a[i][j];   

    }

 for(i=0;i<n;i++)

 {

  for(j=0;j<m;j++)

   printf(" %d",b[i][j]);           

  printf("\n");

 }

}

void main()

{

 int a[m][n];

 input(a);

 zhuanzhi(a);

}

 

你的输出函数调用

output(b);

实参的类型和形参不匹配。

 

 

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-11-22
转置部分程序存在问题,比如i=1,j=2时,你把b[1][2]赋值给b[2][1],那执行到i=2,j=1时,仍然要把b[2][1]赋值给b[1][2],这个时候的b[2][1]是什么呢,前面你已经改变b[2][1]的值啦~想想吧,你应该已经问题的所在啦~这样改程序就很简单啦!追问

我这是两个数组,不是一样的吧

追答

不好意思,看错啦~这样,是输出的问题,你看output(b),这个时候传递的参数是一个两行三列的,而output中的形参则是三行两列的,你将output中参数a[m][n]改为a[n][m]就可以啦~这个里面是值传递的问题,不是刚才说的转置的问题,你再试一下~

第2个回答  2012-11-22
数组b和输出函数中的行和列都不对应了,明白?
b的数组是2 ,3;而输出函数中数组是3,2追问

能不能说一下怎么改

追答

在函数转置中输出数组b

追问

我不就是这么写的么

追答

不是通过函数调用输出,而是用for循环输出

追问

谢谢

本回答被提问者采纳
相似回答