2017-10-09 89 views
0

我寫了下面的程序來打印矩陣的轉置。但是我沒有得到理想的結果。程序打印轉置。程序不能正常工作

#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

回答

0

的問題是要存儲在相同陣列中的值。

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

    } 
}