【问题标题】:Not displaying correctly transpose of matrix?没有正确显示矩阵的转置?
【发布时间】:2017-09-11 04:22:01
【问题描述】:

它适用于二次矩阵(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");
        }

如果我将元素 {1,2,3,4,5,6} 放在 2x3 矩阵中,它会显示如下:

1 4 1

2 5 0

但是正确的方法是:

1 4

2 5

3 6

代码有什么问题以及为什么行数与列数不同时它不起作用

【问题讨论】:

    标签: c matrix


    【解决方案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

    【讨论】:

      【解决方案2】:

      你应该这样尝试:

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

      【讨论】:

        【解决方案3】:

        您的转置逻辑不正确。正确的 for 循环是

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

        当你转置时,行变成列,列变成行,所以你需要改变for循环索引。

        【讨论】:

          猜你喜欢
          • 2017-07-08
          • 1970-01-01
          • 2021-07-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多