#include <stdio.h>
#include <stdlib.h>
double det(double* a, int N)
{
int i, j, m, n, s, t, k = 1;
double f = 1.0, c, x;
for (i = 0, j = 0; i < N && j < N; i++, j++) {
if (a[i * N + j] == 0) {
for (m = i + 1; m < N && a[m * N + j] == 0; m++)
if (m == N)
return 0;
else
for (n = j; n < N; n++) {
c = a[i * N + n];//a[i][n]
a[i * N + n] = a[m * N + n];//a[i][n]=a[m][n]
a[m * N + n] = c;//a[m][n]
}
k = -k;
}
for (s = N - 1; s > i; s--) {
x = a[s * N + j];//a[s][j]
for (t = j; t < N; t++)
a[s * N + t] -= a[i * N + t] * (x / a[i * N + j]);
}
}
for (i = 0; i < N; i++)//a[i][i]
f *= a[i * N + i];
return k * f;
}
int main()
{
int i, j, n ;
double* a;
printf("请输入行列式的阶数:\n");
scanf("%d", &n);
a = (double*)malloc(sizeof(double) * n * n);
printf("输入%d个数:\n",n*n );
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
scanf("%lf", a + i * n + j);
printf("result=%g\n", det(a, n));
free(a);
return 0;
}
更多相关内容请参见