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