C语言求转置后矩阵,程序哪里错了

#include <stdio.h>
#define N 10
void main()
{
int a[N][N];
int b[N][N],i,j;
printf("please input the array:\n");
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
scanf("%d",&a[i][j]);
}
printf("your input is:\n");
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf("%5d",a[i][j]);
printf("\n");
}
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
b[j][i]=a[i][j];
a[i][j]=b[i][j];
}
}

printf("转置后的方阵:\n");
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf("%5d",a[i][j]);
printf("\n");
}
}

哪里错了?

转置的循环中
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
b[j][i]=a[i][j];
a[i][j]=b[i][j];
}
}
这样写会在转置完成前破坏原有的矩阵内容,若需要把转置后的B复制回A必须完成转置后再用单独的循环复制。如:

//转置
for(i=0;i<N;i++)
for(j=0;j<N;j++)
b[j][i]=a[i][j];
//复制
for(i=0;i<N;i++)
for(j=0;j<N;j++)
a[i][j]=b[i][j];
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-04-01
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf("%5d",a[i][j]);
printf("\n");
}
这里错了,应该是
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf("%5d",a[j][i]);
printf("\n");
}
这样才能转置啊!

C语言求转置后矩阵,程序哪里错了
转置的循环中 for(i=0;i<N;i++){ for(j=0;j<N;j++){ b[j][i]=a[i][j];a[i][j]=b[i][j];} } 这样写会在转置完成前破坏原有的矩阵内容,若需要把转置后的B复制回A必须完成转置后再用单独的循环复制。如:\/\/转置 for(i=0;i<N;i++)for(j=0;j<N;j++)b[j][i]...

c语言矩阵转置,帮忙检查哪里错啦
可能你还不大熟悉scanf()语句,但你的目的也不是去熟悉它,所以,直接 int a[2][3] = { 1, 2, 3, 4, 5, 6 };来验证你的算法吧,先就不要 scanf() 了!愿你目的达到!

矩阵转置的C语言实现,为什么答案总是错的,想了半天。。。运行的错误结果...
include <stdio.h> include<stdlib.h> int main(void){ int i;int j;static int a[3][4]={{1,3,7,8},{2,5,6,9},{4,3,2,7}};static int b[4][3];for(i=0;i<3;i++)for(j=0;j<4;j++){ b[j][i]=a[i][j];} for(i=0;i<4;i++){ for(j=0;j<3;j++...

c语言 这个代码为什么错了? 由键盘输入一个3*4(3行四列)的矩阵,要求输 ...
从键盘输入一个3*4(3行四列)的矩阵,输出它的转置矩阵。原来的代码中的输出语句写错了。错误有2:一是输出的是元素的地址,而不是元素的值;二是输出的各元素之间没有留出空格,会导致各数字相连,输出失败。程序代码已经修改完成如下:include"stdio.h"int main(){ int i,j;int a[3][4],b...

C++矩阵转置函数,哪里出错了??
你的C语言矩阵转置程序,我帮你改完了,你看看吧。完整的程序如下:include<stdio.h> void abc(int* a,int n);int main(void){ int a[4][4],i,j;printf("输入原矩阵:\\n");for(i=0;i<4;i++){ for(j=0;j<4;j++)scanf("%d",&a[i][j]);} printf("输出转置矩阵:\\n");...

一个实现矩阵转置的程序,运行得了,但是结果不正确。是循环错了还是其他...
应该算是逻辑问题。错在这里:for(z1=0,z2=0;z1<m*n;z1=z1+n,z2++) { for(p1=a[0]+z1,p2=b[0]+z2;p1<a[0]+z1+n;p1++,p2=p2+n) { *p2=*p1; } } 外层for中每次z1的增量为“给二维数组的行向量分配的空间大小”, 而不是“输入矩阵每行的元素个数”, ...

我这个到底错哪了? C语言 “ 将一个3×3的矩阵转置,用一函数实现之...
问题很大,这个程序即使能交换也执行不了如,我改的 include<stdio.h> void main(){ int i,j,a[3][3];void exchange(int * a,int *b);printf("Please input the numbers in the book:\\n");for(i=0;i<3;i++)for(j=0;j<3;j++)scanf("%d",&a[i][j]);printf("before ...

c语言用指针求矩阵转置~
在C语言中,矩阵转置问题通过指针解决的方法有很多。首先,定义一个指针数组 int*p1[N],这里的N代表矩阵的行数。然而,当您传入参数a时,实际上传入的是一个指针,而非一个数组。这种参数类型不一致,导致了后续操作的错误。同时,转置函数trans()没有正确返回转置后的矩阵,使得main()函数中打印的...

c语言求矩阵转置 结果老是不对,求解
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"...

这个c语言程序为什么转置不成功?
所以只要遍历半个矩阵(矩阵的下三角区域)与另半个矩阵对调,就行了.你遍历了整个矩阵,等于整个矩阵以主对角线为轴对调了两次(转置了两次),所以矩阵没变.解决方法 把自定义的转置函数的内循环(for_j循环)终止条件由j小于3改成j小于i,就行了.完整的程序如下(改动的地方见注释,仅有一处)...

相似回答