#include<stdio.h>
int array[3][3];
int main()
{
int i,j;
void zhuanzhi(int array[][3]);
printf("输入你要转置的矩阵\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
scanf("%d",&array[i][j]);
}
}
printf("您输入的矩阵为\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%3d",array[i][j]);
printf("\n");
}
printf("转置后的矩阵为\n");
zhuanzhi(array);
for(i=0;i<3;i++)
{for(j=0;j<3;j++)
printf("%3d",array[i][j]);
printf("\n");
}
}
void zhuanzhi(int array[][3])
{
int i,j,t;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
t=array[i][j];
array[i][j]=array[j][i];
array[j][i]=t;
}
}
}
void zhuanzhi(int array[][3])
{
int i,j,t;
for(i=0;i<3;i++)
{
for(j=i;j<3;j++) //这里从i开始换,不然换过来后又换回去了
{
t=array[i][j];
array[i][j]=array[j][i];
array[j][i]=t;
}
}
}
举个例子你就知道了,
假设i = 1,j=2,按照你的逻辑,t = array[1][2]; array[1][2] = array[2][1]; array[2][1] = t;
那么当i=2,j=1时,t = array[2][1];array[2][1] = array[1][2]; array[1][2] = t;
发现了吗,又换回去了。所以实现转置矩阵的时候,需要用一个b[3][3]来暂存数据,否则前面转的数据就又转回去了。
#include<stdio.h>
int array[3][3];
int main()
{
int i,j;
void zhuanzhi(int array[][3]);
printf("输入你要转置的矩阵\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
scanf("%d",&array[i][j]);
}
}
printf("您输入的矩阵为\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%3d",array[i][j]);
printf("\n");
}
printf("转置后的矩阵为\n");
zhuanzhi(array);
for(i=0;i<3;i++)
{for(j=0;j<3;j++)
printf("%3d",array[i][j]);
printf("\n");
}
}
void zhuanzhi(int array[][3])
{
int i,j,t;
for(i=0;i<3;i++)
{
for(j=i;j<3;j++) //这里从i开始换
{
t=array[i][j];
array[i][j]=array[j][i];
array[j][i]=t;
}
}
}