【问题标题】:Multiplying the main diagonal of a matrix with a number将矩阵的主对角线与数字相乘
【发布时间】:2013-07-18 19:16:25
【问题描述】:

我的程序必须接收一个数字 k,一个 4x4 矩阵,并且 k 必须乘以该矩阵的主对角线。输出应该是输入矩阵,但是,它的主对角线乘以 k。 例如,我给出 k = 2 和以下矩阵:

1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1

输出应该是:

2 1 1 1
1 2 1 1
1 1 2 1
1 1 1 2

但我的程序给出以下输出:

2 1 1 1 
1 1 1 1
1 1 1 1
1 1 1 1

这是为什么呢?我该怎么做才能乘以主对角线而不仅仅是矩阵的第一个数字?

我的代码:

#include <stdio.h>

int main() {

    int k;
    int mult = 0;

    int matrix[4][4];
    int row, column;

    for (row = 0; row < 4; row++) {
        for (column = 0; column < 4; column++) {
            scanf("%d", &matrix[row][column]);
        }
    }

    for(row = 0 ; row < 4 ; row++)
    {
        for(column = 0 ; column < 4 ; column++) {
            printf("%3d", matrix[row][column]);

            mult = k * matrix[row][row];
        }
        printf(" \n");
    }

    return 0;
}

【问题讨论】:

  • 您的代码没有在任何地方操作矩阵内容?
  • k 值设置在哪里? matrix[row][row] 的新值在哪里设置?
  • 您的程序与您声称的输入和输出不匹配。请更正这一点。

标签: c matrix multidimensional-array


【解决方案1】:

如果你想改变矩阵值,只需像这样改变循环操作:

for(row = 0 ; row < 4 ; row++)
{
    for(column = 0 ; column < 4 ; column++) {
        if ( row == column )
            matrix[row][column] *= k;
        printf("%3d", matrix[row][column]);
    }
    printf(" \n");
}

【讨论】:

    【解决方案2】:

    为什么不这样:

    for(row = 0 ; row < 4 ; row++)
    {
        for(column = 0 ; column < 4 ; column++) {
            if(row == column)
                matrix[row][column] *= k;
            printf("%3d", matrix[row][column]);
        }
        printf(" \n");
    }   
    

    【讨论】:

    • @DrewMcGowen 呃,是的,没注意。立即修复。
    【解决方案3】:

    此代码似乎有效,请检查。

    for(row=0;row<4;i++)
    {
        mat[row][row]*=k;
        for(col=0;col<4;j++)
        {
            printf("%d ",mat[row][col]);
        }
        printf("\n");
    }
    

    【讨论】:

      【解决方案4】:

      你应该初始化变量k

      scanf("%d", &k);
      

      并且您没有更改输入矩阵的内容。

      【讨论】:

        【解决方案5】:

        如果你只想得到正确的输出,试试这个:

        #include <stdio.h>
        
        int main() {
        
            int k;
            int matrix[4][4];
            int row, column;
            printf("input k :\n");
            scanf("%d,"&k);
            printf("input matrix :\n");
            for (row = 0; row != 4; ++row) {
                for (column = 0; column != 4; ++column) {
                    scanf("%d", &matrix[row][column]);
                }
            }
        
            for(row = 0 ; row != 4 ; ++row)
            {
                for(column = 0 ; column != 4 ; ++column) {
                    printf("%3d",row != column ?  matrix[row][column]:k*matrix[row][cloumn]);
                }
                printf(" \n");
            }
        
            return 0;
        }
        

        【讨论】:

          【解决方案6】:

          要仅将数字与选定的模式相乘,您需要进行一些检查(过滤器),以便该值仅在此处相乘。

          试试上面别人提到的代码 -

          for(row = 0 ; row < 4 ; row++)
          {
              for(column = 0 ; column < 4 ; column++) {
                  **if ( row == column )** //this is the filter 
                      matrix[row][column] *= k;
                  printf("%3d", matrix[row][column]);
              }
              printf(" \n");
          }
          

          对于对角线,行和列的值始终相同 - 就像你的情况一样 -

          1 1 1 1
          1 1 1 1
          1 1 1 1
          1 1 1 1
          

          一般可以写成——

          a00 a01 a02 a03 ....... a0n

          a10 a11 a12 a13 ....a1n

          a20 a21 a22 a23........a2n

          am0 am1 am2 am3 ....... a(mn)

          这里的对角元素是 - a00 ,a11,a22 ,a33 ,....a(mn) 其中 m= n

          【讨论】:

            猜你喜欢
            • 2016-03-19
            • 1970-01-01
            • 2015-01-24
            • 2016-12-11
            • 1970-01-01
            • 2021-06-06
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多