2017-09-11 1 views
0

이차 행렬 (2x2 또는 3x3)에서는 문제가 없지만 2x3 또는 3x2에서는 올바르게 표시되지 않습니다! I는 2 × 3 행렬의 원소 {1,2,3,4,5,6}을 넣으면행렬의 조바꿈이 올바르게 표시되지 않습니까?

#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"); 
     } 

, 그것은 다음과 같이 표시

1 4 1

2 5 0

올바른 방법이 될 것이다 그러나 :

1~4

2~5

,617,

3 6

어떤 코드를 잘못이며 행의 수는 컬럼과 다른 경우 작동하지 않는 이유

답변

1

모든 단지 목적을 인쇄

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

for(i=0;i<c1;i++) 
     { 
      for(j=0;j<l1;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"); 
    } 

것, 행 열 및 열 행이 될 될, 그래서 당신은 그 당 루프 인덱스에 대해 변경해야합니다.

관련 문제