
C语言,这是我编的求矩阵行列式的函数,但是出了问题,求解答
#include<stdio.h>#include<stdlib.h>floatdet(float**p,intm){if(m=1){return**p;}//行数为1直...
#include<stdio.h>
#include<stdlib.h>
float det(float **p,int m)
{
if(m=1)
{
return **p;
}//行数为1直接返回
else
{
int c,i,j;
float ***p2=NULL;
float deter=0;
p2=(float ***)malloc((m)*sizeof(float));
for(i=0;i<m;i++)
{
p2[i]=(float **)malloc((m-1)*sizeof(float));
}
for(j=0;j<m-1;j++)
{
p2[i][j]=(float *)malloc((m-1)*sizeof(float));
}//第一维是p第几列的余子式,第二维第三维是余子式
for(c=0;c<m;c++)
{
for(i=0;i<m-1;i++)
{
for(j=0;j<m-1;j++)
{
if(j<c)p2[c][i][j]=(*(*(p+i+1)+j));
else p2[c][i][j]=(*(*(p+i+1)+(j+1)));
}
}
}//余子式赋值
for(c=0;c<m;c++)
{
if(c%2==0||c==0)deter=deter+det(p2[c],m-1);
else deter=deter=deter+(-1)*det(p2[c],m-1);
}//行列式计算
return deter;
}
}
当输入({1,1}{1,1})的时候行列式值求出来是1(应该是0)求帮忙解答 展开
#include<stdlib.h>
float det(float **p,int m)
{
if(m=1)
{
return **p;
}//行数为1直接返回
else
{
int c,i,j;
float ***p2=NULL;
float deter=0;
p2=(float ***)malloc((m)*sizeof(float));
for(i=0;i<m;i++)
{
p2[i]=(float **)malloc((m-1)*sizeof(float));
}
for(j=0;j<m-1;j++)
{
p2[i][j]=(float *)malloc((m-1)*sizeof(float));
}//第一维是p第几列的余子式,第二维第三维是余子式
for(c=0;c<m;c++)
{
for(i=0;i<m-1;i++)
{
for(j=0;j<m-1;j++)
{
if(j<c)p2[c][i][j]=(*(*(p+i+1)+j));
else p2[c][i][j]=(*(*(p+i+1)+(j+1)));
}
}
}//余子式赋值
for(c=0;c<m;c++)
{
if(c%2==0||c==0)deter=deter+det(p2[c],m-1);
else deter=deter=deter+(-1)*det(p2[c],m-1);
}//行列式计算
return deter;
}
}
当输入({1,1}{1,1})的时候行列式值求出来是1(应该是0)求帮忙解答 展开
2个回答
展开全部
你这个程序至少有两个问题(可能还有别的错误,我再看看)
第一个
if(m=1) // 应该是m==1
{
return **p;
}//行数为1直接返回
第二个问题,循环嵌套不对,下面是正确的代码,注意大括号位置。
for (i = 0; i<m; i++)
{
p2[i] = (float **)malloc((m - 1)*sizeof(float));
for (j = 0; j<m - 1; j++)
{
p2[i][j] = (float *)malloc((m - 1)*sizeof(float));
}//第一维是p第几列的余子式,第二维第三维是余子式
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |