【问题标题】:I coded a program to check whether the matrix is symmetric or not. It works one way but not in other way although both seem correct我编写了一个程序来检查矩阵是否对称。它以一种方式工作,但不是以另一种方式工作,尽管两者似乎都是正确的
【发布时间】:2020-04-20 22:41:13
【问题描述】:

请在下面找到所需的代码。

行不通的方式:

    int isSy = 0;
    for (i = 0; i < row; i++) {
        for (j = 0; j < col; j++)  {
            if (r[i][j] = trans[i][j])
                isSy = 1;
            break;
        }
    }
    if (isSy == 1)
        printf("The given matrix is symmetric.");
    else {
        printf("The given matrix is not symmetric.");
    }

工作方式:

    int isSy = 1;
    for (i = 0;i < row; i++) {
        for (j = 0; j < col; j++) {
            if (r[i][j] != trans[i][j])
                isSy = 0;
            break;
        }
    }
    if (isSy == 1)
       printf("The given matrix is symmetric.");
    else {
        printf("The given matrix is not symmetric.");
    }

其中r 是实际矩阵,trans 是它的转置。

【问题讨论】:

  • (r[i][j]=trans[i][j]) 更改为(r[i][j]==trans[i][j])
  • @john 不工作!!!
  • 你的break不在if里面,你应该在isSy=1break周围加上大括号

标签: c matrix multidimensional-array


【解决方案1】:

如果您观察语句if (r[i][j]=trans[i][j]),它不是比较而是赋值语句。

 if (r[i][j]==trans[i][j])
         isSy=1;
         break;

等价于

if (r[i][j]==trans[i][j])
   {
         isSy=1;
   }
   break; 

因此无论条件检查如何,循环都会中断 我假设逻辑应该类似于下面的 sn-p,

int isSy=1;
  for (i=0;i<row;i++)
  {
    for (j=0;j<col;j++)
    {
      if (r[i][j]!=trans[i][j]) {
          isSy=0;
          break; //only inner loop
        }
    }
    if(isSy==0)
    {
        break; //breaks outer loop
    }
  }
  if (isSy==1)
    printf("The given matrix is symmetric.");
  else
  {
    printf("The given matrix is not symmetric.");
  }

尝试添加大括号以提高代码的清晰度和可读性

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-06
    • 2023-03-24
    • 1970-01-01
    相关资源
    最近更新 更多