计算NxN矩阵行列式的C程序

计算NxN矩阵行列式的C程序,c,arrays,C,Arrays,我正试图编写一个程序,为我计算行列式,这就是我到目前为止所做的。但它不起作用,它只是为我扔给它的每一个矩阵打印6356918。我甚至将我的代码与互联网上的其他代码进行了比较,但这不起作用 我对指针一无所知,所以我不能使用它们。我试过调试,我也不太了解,但第二个函数中的第一个“if”和计算行列式的代码的最后一部分似乎有问题。我用代码::块编码 #include <stdio.h> #include <stdlib.h> #include <conio.h> m

我正试图编写一个程序,为我计算行列式,这就是我到目前为止所做的。但它不起作用,它只是为我扔给它的每一个矩阵打印6356918。我甚至将我的代码与互联网上的其他代码进行了比较,但这不起作用

我对指针一无所知,所以我不能使用它们。我试过调试,我也不太了解,但第二个函数中的第一个“if”和计算行列式的代码的最后一部分似乎有问题。我用代码::块编码

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

main()
{
    int A[100][100];
    int i,j,k,n,res;
    printf("Enter the order of the matrix: \n");
    scanf("%d",&n);
    printf("\nEnter the elements of the matrix one by one: \n");
    for(i = 0 ; i < n ; i++)
    {
        for(j = 0 ; j < n ; j++)
        {
            scanf("%d",&A[i][j]);
        }
    }
    for(i = 0 ; i < n ; i++)
    {
        for(j = 0 ; j < n ; j++)
        {
            printf("%5d",A[i][j]);
        }
        printf("\n");
    }
    res = det(A,n);
    printf("%d",res);
}
int det(int A[100][100], int n)
{
    int Minor[100][100];
    int i,j,k,c1,c2;
    int determinant;
    int c[100];
    int O=1;

    if(n == 2)
    {
        determinant = 0;
        determinant = A[0][0]*A[1][1]-A[0][1]*A[1][0];
        return determinant;
    }
    else
    {
        for(i = 0 ; i < n ; i++)
        {
            c1 = 0, c2 = 0;
            for(j = 0 ; j < n ; j++)
            {
                for(k = 0 ; k < n ; k++)
                {
                    if(j != 0 && k != i)
                    {
                        Minor[c1][c2] = A[j][k];
                        c2++;
                        if(c2>n-2)
                        {
                            c1++;
                            c2=0;
                        }
                    }
                }
            }
            determinant = determinant + O*(A[0][i]*det(Minor,n-1));
            O=-1*O;
        }
    }
    return determinant;
}
#包括
#包括
#包括
main()
{
INTA[100][100];
inti,j,k,n,res;
printf(“输入矩阵的顺序:\n”);
scanf(“%d”和“&n”);
printf(“\n逐个输入矩阵元素:\n”);
对于(i=0;in-2)
{
c1++;
c2=0;
}
}
}
}
行列式=行列式+O*(A[0][i]*det(小调,n-1));
O=-1*O;
}
}
收益决定因素;
}
在函数
det()
中,您仅在不需要时初始化了
行列式

determinant = 0;
determinant = A[0][0]*A[1][1]-A[0][1]*A[1][0];
但是当需要的时候

determinant = determinant + O*(A[0][i]*det(Minor,n-1));
之前没有进行过初始化。所以行动吧

determinant = 0;

如果(n==2)
接近函数的开头,则返回到上面的

这里有一个C程序,可以计算任意MxN矩阵的行列式:

#include <stdio.h>
#include <stdlib.h>

int m,n; // original matrix dimensions

int det(int B[m][n]);

int main() {
    int determinant;
    register int row,column;

    printf("Enter rows and columns\n");
    scanf("%d%d",&m,&n);
    
    int A[m][n];

    printf("Enter matrix elements\n");

    for(row = 0; row < m; row++)
        for(column = 0; column < n; column++)
            scanf("%d",&A[row][column]);
            
    determinant = det(A);

    printf("determinant = %d \n",determinant);

    return 0;
}

int det(int B[m][n]) {
    int row_size = m;
    int column_size = n;

    if (row_size != column_size) {
        printf("DimensionError: Operation Not Permitted \n");
        exit(1);
    }

    else if (row_size == 1)
        return (B[0][0]);

    else if (row_size == 2)
        return (B[0][0]*B[1][1] - B[1][0]*B[0][1]);

    else {
        int minor[row_size-1][column_size-1];
        int row_minor, column_minor;
        int firstrow_columnindex;
        int sum = 0;

        register int row,column;

        // exclude first row and current column
        for(firstrow_columnindex = 0; firstrow_columnindex < row_size;
                firstrow_columnindex++) {

            row_minor = 0;

            for(row = 1; row < row_size; row++) {

                column_minor = 0;

                for(column = 0; column < column_size; column++) {
                    if (column == firstrow_columnindex)
                        continue;
                    else
                        minor[row_minor][column_minor] = B[row][column];

                    column_minor++;
                }

                row_minor++;
            }

            m = row_minor;
            n = column_minor;

            if (firstrow_columnindex % 2 == 0)
                sum += B[0][firstrow_columnindex] * det(minor);
            else
                sum -= B[0][firstrow_columnindex] * det(minor);

        }

        return sum;

    }
}                                                                                                                          
#包括
#包括
int m,n;//原始矩阵维数
国际数据中心(国际B[m][n]);
int main(){
整数行列式;
寄存器int行、列;
printf(“输入行和列\n”);
scanf(“%d%d”,&m,&n);
int A[m][n];
printf(“输入矩阵元素\n”);
对于(行=0;行
顺便说一句,我对指针一无所知,所以我实际上无法使用它们
…是什么阻止了你学习它们?它们很有用我觉得你的输入比计算有问题…@Sourav Ghosh我知道,但是对于这个特殊的代码,我不允许使用它们,教授说我们只能使用我们已经知道的东西:(.@Eugene input?比如如何?你需要编译所有警告和调试信息(例如,
gcc-Wall-Wextra-g
如果使用…,请改进代码,直到没有警告,并且应该使用调试器(
gdb