我正在编写一个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;
}
答案 0 :(得分: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构造之间的空白行是代码的非常重要的元素。它们使代码更清晰,更易读。