因此,我试图编写一个程序来查找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));
}


现在由于某种原因,此方法适用于3 * 3矩阵,但对于高阶矩阵却给出了错误的答案。有人可以向我解释为什么吗?我已经尝试解决了几个小时,但是根本不了解发生了什么。

最佳答案

通过将行列式和辅因子函数合并为一个来解决该问题。这是解决方案:

#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;
}

关于c - 查找行列式不起作用的程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43678877/

10-11 21:29