程序打印转置。程序不能正常工作
问题描述:
我写了下面的程序来打印矩阵的转置。但是我没有得到理想的结果。程序打印转置。程序不能正常工作
#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
答
的问题是要存储在相同阵列中的值。
int k=x[i][j]; x[i][j]=x[j][i]; x[j][i]=k;
假设矩阵是3×3。 (0,0),(0,1),(0,2)的循环值的第一次运行将由(0,0),(1,0),(2,0)交换。
但是,当我将是1然后(1,0)将再次被替换(0,1)。同样,当我将2(2,0)与(0,2),当我将3,然后(3,0)与(0,3)。
这会发生在所有情况下。
要纠正这个问题,你必须做一个新的矩阵并赋值。
与此代码
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
transpose[i][j]=x[j][i];
}
}
请提供样品的输入和输出替换你转的逻辑,与所需的输出 – Tyler
提供的样本输入和输出沿 –
所以它没有打印出什么? – Tyler