我编写了以下程序来打印矩阵的转置。但我没有得到理想的结果。
#include <stdio.h>
#include <conio.h>
int main()
{
printf("Enter the number of rows");
int r;
scanf("%d",&r);
printf("Enter the number of columns");
int c;
scanf("%d",&c);
int x[r][c];
int i,j;
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
printf("Enter the values");
scanf("%d",&x[i][j]);
}
}
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
printf("%d\n",x[i][j]);
}
}
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
if (i!=j)
{
int k=x[i][j];
x[i][j]=x[j][i];
x[j][i]=k;
}
}
}
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
printf("%d\n",x[i][j]);
}
}
return 0;
}
我相信我的代码背后的逻辑是正确的,但我仍然没有得到理想的结果。请帮我解决一下这个。 样本输入 - 输出
Input elements in matrix:
1 2 3
4 5 6
7 8 9
Output
Transpose:
1 4 7
2 5 8
3 6 9
答案 0 :(得分:0)
问题是您将值存储在同一个数组中。
int k=x[i][j];
x[i][j]=x[j][i];
x[j][i]=k;
假设矩阵是3x3。在第一次运行的循环值(0,0),(0,1),(0,2)将互换为(0,0),(1,0),(2,0)。
但当我成为1时,(1,0)将再次被(0,1)取代。类似地,当i为2时,(2,0)为(0,2),当i为3时,(3,0)为(0,3)。
所有情况都会发生这种情况。
要解决此问题,您必须创建一个新矩阵并在其中指定值。
用此代码替换您的转置逻辑
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
transpose[i][j]=x[j][i];
}
}
答案 1 :(得分:0)
您将转置存储在同一数组中。 您必须采用单独的数组来存储转置。 或者如果您不想存储,则可以通过将“行数”的值切换为“列”和将“列数”切换为“行”来直接打印。
尝试一下:https://codewin.org/c-program-to-print-transpose-of-matrix-using-array/
希望有帮助!