程序打印转置。程序不能正常工作

问题描述:

我写了下面的程序来打印矩阵的转置。但是我没有得到理想的结果。程序打印转置。程序不能正常工作

#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

请提供样品的输入和输出替换你转的逻辑,与所需的输出 – Tyler

+0

提供的样本输入和输出沿 –

+0

所以它没有打印出什么? – Tyler

的问题是要存储在相同阵列中的值。

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]; 

    } 
}