C 查找行列式不起作用的程序

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

所以我想写一个程序来求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]);
    }
    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(n
i这是学习如何使用调试器的绝佳机会。使用
int val=det(b,ord-1);if(((行+列)%2)==1)可以轻松避免
pow
val*=-1;return val;
…换句话说,检查指数是否为奇数。在
det
/
cofac
递归期间,使用全局数组
b
作为中间存储可能不起作用。避免
pow
的另一种方法是让
cofac
的调用者计算符号。它只需要翻转符号对于循环的每个迭代。