【问题标题】:Checking an identity matrix in C在 C 中检查单位矩阵
【发布时间】:2014-07-31 12:19:35
【问题描述】:

我正在编写一个 C 程序来检查矩阵是否为单位。我没有得到任何输出。谁能找出我的代码有什么问题?

#include <stdio.h>

#include <stdlib.h>
int main()
{
    int **matrix;
    int i,j,n,flag=0;
    matrix=(int**)malloc(n*sizeof(int*));
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        matrix[i]=(int*)malloc(n*sizeof(int));
    }
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            scanf("%d",&matrix[i][j]);
        }
    }
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            if(matrix[i][j]!=1 && matrix[j][i]!=0)
                flag=0;
            break;
        }
    }
    if(flag==1)
        printf("\nIt is identity");
    else
        printf("\nIt isn't");
    for(i=0;i<n;i++)
    {
        free(matrix[i]);
    }
    free(matrix);
    return 0;
}

【问题讨论】:

  • scanf("%d",&amp;n);matrix=(int**)malloc(n*sizeof(int*));
  • 在初始化之前使用变量n。这导致undefined behavior
  • 你有一个调试器。请尝试使用它。
  • if(flag==1) : 不可能设置flag
  • 哎哟!!猜猜就是这样......再次检查。谢谢。

标签: c matrix identity


【解决方案1】:

有几个错误。例如,您在初始化之前使用变量 n

matrix=(int**)malloc(n*sizeof(int*));
scanf("%d",&n);

应该有

scanf("%d",&n);
matrix=(int**)malloc(n*sizeof(int*));

您永远不会将变量标志设置为 1。因此它的值始终等于 0,与矩阵值无关。

这个循环中的break语句

    for(j=0;j<n;j++)
    {
        if(matrix[i][j]!=1 && matrix[j][i]!=0)
            flag=0;
        break;
    }

必须在 if 语句的复合语句中。否则没有意义。

例如,循环可以如下所示

flag = 1;
for ( i = 0; flag && i < n; i++ )
{
    for ( j = 0; flag && j < n; j++ )
    {
        if ( matrix[i][j]!=1 && matrix[j][i]!=0 ) flag = 0;
    }
}

考虑到 C 结构之间的空行是代码中非常重要的元素。它们使代码更加清晰易读。

【讨论】:

  • 复制代码时出现初始化错误!理解了关于变量标志的部分。不了解break的部分;那我应该把它放在哪里?对不起,如果我太天真了,但我只是一个初学者!
  • 好的.. 明白了。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-25
  • 2019-03-09
  • 2020-06-26
相关资源
最近更新 更多