程序打印转置。程序不工作

时间:2017-10-09 18:48:05

标签: c

我编写了以下程序来打印矩阵的转置。但我没有得到理想的结果。

#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

2 个答案:

答案 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/

希望有帮助!