2017-09-11 15 views
0

二次行列(2x2または3x3)では問題なく動作しますが、2x3または3x2では正しく表示されません。行列の転置が正しく表示されていませんか?

#include <stdio.h> 

int main() 
{ 
int i,j,k,c1,c2,l1,l2; 
int m1[10][10],m2[10][10],transposta[10][10],multiplicacao[10][10]; 

printf("\nDigite o numero de linhas e colunas na primeira matriz\n"); 
     scanf("%d%d",&l1,&c1); 
     printf("\nDigite os elementos da matriz:\n"); 
     for(i=0;i<l1;i++) 
     { 
      for(j=0;j<c1;j++) 
      { 
       scanf("%d",&m1[i][j]); 
      } 
     } 
     for(i=0;i<l1;i++) 
     { 
      for(j=0;j<c1;j++) 
      { 
       transposta[j][i] = m1[i][j]; 
      } 
     } 
     printf("\nA matriz transposta e:\n"); 
     for(i=0;i<l1;i++) 
     { 
      for(j=0;j<c1;j++) 
       printf("%d\t",transposta[i][j]); 
      printf("\n"); 
     } 

Iは2×3の行列の要素{1,2,3,4,5,6}を配置する場合、それは次のように表示されます

しかし、正しい方法は次のようになります。

1~4

2~5

何のコードが間違っていると、それが動作しない理由行の数が列

答えて

1

すべてがちょうど印刷目的のために

for(i=0;i<c1;i++) 
     { 
      for(j=0;j<l1;j++) 
       printf("%d\t",transposta[i][j]); 
      printf("\n"); 
     } 

によって

for(i=0;i<l1;i++) 
     { 
      for(j=0;j<c1;j++) 
       printf("%d\t",transposta[i][j]); 
      printf("\n"); 
     } 

を変更、あなたのコードでは正しい、あなたはC1とL1

の世話をする必要があります
1

と異なっているときは、次のように試してみてください:

#include <stdio.h> 

int main() 
{ 
    int a[10][10], transpose[10][10], r, c, i, j; 
    printf("Enter rows and columns of matrix: "); 
    scanf("%d %d", &r, &c); 

    // Storing elements of the matrix 
    printf("\nEnter elements of matrix:\n"); 
    for(i=0; i<r; i++) 
     for(j=0; j<c; j++) 
     { 
      printf("Enter element a%d%d: ",i+1, j+1); 
      scanf("%d", &a[i][j]); 
     } 

    // Displaying the matrix a[][] */ 
    printf("\nEntered Matrix: \n"); 
    for(i=0; i<r; i++) 
     for(j=0; j<c; j++) 
     { 
      printf("%d ", a[i][j]); 
      if (j == c-1) 
       printf("\n\n"); 
     } 

    // Finding the transpose of matrix a 
    for(i=0; i<r; i++) 
     for(j=0; j<c; j++) 
     { 
      transpose[j][i] = a[i][j]; 
     } 

    // Displaying the transpose of matrix a 
    printf("\nTranspose of Matrix:\n"); 
    for(i=0; i<c; i++) 
     for(j=0; j<r; j++) 
     { 
      printf("%d ",transpose[i][j]); 
      if(j==r-1) 
       printf("\n\n"); 
     } 

    return 0; 
} 
1

あなたの転置ロジックが正しくありません。あなたは転置するとループの正しい

// note use c1 here not l1 
    for(i=0;i<c1;i++) 
    { 
     //note use l1 here not c1 
     for(j=0;j<l1;j++) 
     { 
      // indexing of m1 is changed 
      transposta[i][j] = m1[j][i]; 
     } 
    } 
    printf("\nA matriz transposta e:\n"); 
    // same here 
    for(i=0;i<c1;i++) 
    { 
     for(j=0;j<l1;j++) 
      printf("%d\t",transposta[i][j]); 
     printf("\n"); 
    } 

なり、行、列と列が行になるになるので、あなたはそのあたりとしてループインデックスのため変更する必要があります。

関連する問題