请教各位高手,数据结构中,矩阵转置算法经典算法,C语言编写的代码。小弟的代码有错误,请赐教。

#include <stdio.h>
int m,n;
void TransMatrix(int source[m][n],dest[i][j])
{
int i,j;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
dest[j][i]=source[i][j];
}

main()
{
int i,j;
int a[2][3]={1,2,3,4,5,6};
int b[3][2];
printf("orignal array:\n");
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
printf("%d ",a[i][j]);
printf("\n");
}

TransMatrix(a,b); /*执行转置*/

printf("convert array:\n");
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
printf("%d ",a[i][j]);
printf("\n");
}
}

#include <stdio.h>
#define m 2 //1、虽然定义全局变量m,n 但是下面的m,n是形参是得不到值的,改
// 为#define
#define n 3
void TransMatrix(int source[m][n],int dest[n][m]) //2、dest少了类型int ,且参数为n,m
{
int i,j;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
dest[j][i]=source[i][j];
}
main()
{
int i,j;
int a[2][3]={1,2,3,4,5,6};
int b[3][2];
printf("orignal array:\n");
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
printf("%d ",a[i][j]);
printf("\n");
}

TransMatrix(a,b); /*执行转置*/

printf("convert array:\n");
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
printf("%d ",b[i][j]); //3、- -||这个粗心真纠结,好久才发现,是输出b[i][j]
printf("\n");
}
}
以上通过测试
============================分隔线===================================
当然也建议反所有2换成m, 3换成n。有利于程序里数组的修改。如下:
#include <stdio.h>
#define m 2
#define n 3
void TransMatrix(int source[m][n],int dest[n][m])
{
int i,j;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
dest[j][i]=source[i][j];
}
main()
{
int i,j;
int a[m][n]={10,20,30,40,50,60};
int b[n][m];
printf("orignal array:\n");
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
printf("%d ",a[i][j]);
printf("\n");
}

TransMatrix(a,b); /*执行转置*/

printf("convert array:\n");
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
printf("%d ",b[i][j]); //
printf("\n");
}
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-07-02
TransMatrix 写错了~
int m = 2,n = 3;
void TransMatrix(int source,int dest)
{
int i,j;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
dest[j][i]=source[i][j];
}追问

您好,谢谢您的热心帮助。
我刚按照您的提示,编译了一下,还是出错,劳烦您帮我再看看好吗,谢谢。

相似回答
大家正在搜