C 查找行列式不起作用的程序
所以我想写一个程序来求n*n矩阵的行列式。这是我写的:C 查找行列式不起作用的程序,c,matrix,C,Matrix,所以我想写一个程序来求n*n矩阵的行列式。这是我写的: int a[10][10],b[10][10],o; main() { int i,j; printf("Enter Order: ");scanf("%d",&o); printf("Enter Matrix:\n"); for(i=1;i<=o;i++) { for(j=1;j<=o;j++) scanf("%d",&a[i][j
int a[10][10],b[10][10],o;
main()
{
int i,j;
printf("Enter Order: ");scanf("%d",&o);
printf("Enter Matrix:\n");
for(i=1;i<=o;i++)
{
for(j=1;j<=o;j++)
scanf("%d",&a[i][j]);
}
printf("The determinant is %d",det(a,o));
printf("\n");
}
int det(int t[10][10],int ord)
{
int d=0,i,j;
if(ord==2)
{
d=(t[1][1]*t[2][2])-(t[2][1]*t[1][2]);
}
else if(ord>2)
{
for(i=1;i<=ord;i++)
{
d=d+(t[1][i]*cofac(t,ord,1,i))
}
}
return d;
}
int cofac(int t[10][10],int ord,int row,int col)
{
int i=1,j=0,x,y;
for(x=1;x<=ord;x++)
{
for(y=1;y<=ord;y++)
{
if(x!=row && y!=col)
{
j++;
b[i][j]=a[x][y];
}
}
if(j==ord-1)
{
i++;j=0;
}
}
return((pow(-1,row+col))*det(b,ord-1));
}
inta[10][10],b[10][10],o;
main()
{
int i,j;
printf(“输入顺序:”;scanf(“%d”、&o);
printf(“输入矩阵:\n”);
for(i=1;i通过将行列式和辅因子函数合并为一个函数来解决问题。以下是解决方案:
#include<stdio.h>
double det(float[10][10],int);
void main()
{
int i,j,n;
float a[10][10];
printf("Enter order: ");
scanf("%d",&n);
if(n<=0)
{
printf("Please enter a positive value for order");
goto end;
}
printf("Enter matrix:\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
scanf("%f",&a[i][j]);
}
}
printf("The determinant is %f", det(a,n));
end:;
}
double det(float m[10][10],int ord)
{
int f=0,g=0,x,y,i,j,p=1;
float t[10][10];
double d=0;
if(ord==1)
d=m[0][0];
else if(ord==2)
d=(m[0][0]*m[1][1]-m[1][0]*m[0][1]);
else if(ord>2)
{
for(x=0;x<ord;x++)
{
f=0;g=0;
for(i=0;i<ord;i++)
{
for(j=0;j<ord;j++)
{
if(i!=0 && j!=x)
{
t[f][g]=m[i][j];g++;
}
}
if(g==ord-1)
{
g=0;f++;
}
}
d=d+m[0][x]*p*det(t,ord-1);
p=-1*p;
}
}
return d;
}
#包括
双数据段(浮点[10][10],整数);
void main()
{
inti,j,n;
浮动a[10][10];
printf(“输入订单:”);
scanf(“%d”和“&n”);
if(ni这是学习如何使用调试器的绝佳机会。使用int val=det(b,ord-1);if(((行+列)%2)==1)可以轻松避免pow
val*=-1;return val;
…换句话说,检查指数是否为奇数。在det
/cofac
递归期间,使用全局数组b
作为中间存储可能不起作用。避免pow
的另一种方法是让cofac
的调用者计算符号。它只需要翻转符号对于循环的每个迭代。