#include <stdlib.h>
void fun3(float *,int)
float fun4(float *,int)
void main()
{
int i,j,n
float *a,answer
for(i=0i<3i++)
printf("<----------------------------------------------------------------------------->\n")
printf(" 欢迎进入*雒森*行列式计算程序,请准确输入以便我为您正确计算! \n")
for(i=0i<3i++)
printf("<----------------------------------------------------------------------------->\n")
do
{
printf("请输入您要计算的行列式的行数或列数n(n>1):")
scanf("%d",&n)
}while(n<2)
a=(float *)malloc(n*n*sizeof(float))
for(i=0i<ni++)
{
printf("请输入您要计算的行列式的:\n")
for(j=0j<nj++)
{
printf("第%d行%d列:",i+1,j+1)
scanf("%f",&a[i*n+j])
}
}
fun3(a,n)
answer=fun4(a,n)
printf("您要计算的行列式的值为:%.3f\n\n\n",answer)
for(i=0i<3i++)
printf("<----------------------------------------------------------------------------->\n")
printf(" 欢迎进入*雒森*行列式计算程序,请准确输入以便我为您正确计算! \n")
for(i=0i<3i++)
printf("<----------------------------------------------------------------------------->\n")
}
void fun3(float a[],int n)
{
int i,j,d,f
float m=1,w
for(j=0j<nj++)
{
for(i=0i<ni++)
{
if(a[j*n+j]==0)
{
for(d=j+1d<nd++)
{
if(a[d*n+j]!=0)
break
}
for(f=jf<nf++)
a[j*n+f]+=a[d*n+f]*m
}
if(i!=j)
{
w=-(a[i*n+j]/a[j*n+j])
for(f=jf<nf++)
a[i*n+f]+=a[j*n+f]*w
}
}
}
}
float fun4(float a[],int n)
{
int i
float answer=1
for(i=0i<ni++)
answer*=a[i*n+i]
return answer
}
C语言程序如下:
#include <stdio.h>#include <math.h>
#define MAX 100
double D(double arr[][MAX], int n)
void Display(double arr[][MAX], int n)
void main()
{
double arr[MAX][MAX]
double bak[MAX][MAX]
double value
int n
int i, j, k, c
printf("Please enter matrix size n(1<=n<20):")
scanf("%d", &n)
printf("Please input matrix line by line:\n")
for(i=0 i<n i++)
{
for(j=0 j<n j++)
{
scanf("%lf", &arr[i][j])
}
}
printf("matrix a:\n")
Display(arr, n)
/* 保存D(0,i)的值到bak中 */
for(i=0 i<n i++) /* 处理第1行的每一列元素 */
{
for(j=1 j<n j++) /* 逐行处理 */
{
for(c=0,k=0 k<n k++) /* 逐列处理 */
{
if(k == i)
{
continue
}
bak[j-1][c++] = arr[j][k]
}
}
value = D(bak, n-1)
printf("Submatrix:\n")
Display(bak, n-1)
printf("DValue of the Submatrix is %f\n", D(bak, n-1))
}
value = D(arr, n)
printf("result = %f\n", value)
}
double D(double arr[][MAX], int n)
{
double bak[MAX][MAX]
int i, j, k, c, d
double sum = 0
if(n == 1)
{
return arr[0][0]
}
for(i=0 i<n i++) /* 处理第1行的每一列元素 */
{
for(j=1 j<n j++) /* 逐行处理 */
{
for(c=0,k=0 k<n k++) /* 逐列处理 */
{
if(k == i)
{
continue
}
bak[j-1][c++] = arr[j][k]
}
}
/* 计算arr(row, col) * D(row, col)的值 */
sum += (i % 2 == 0 ? 1 : -1) * arr[0][i] * D(bak, n-1)
}
return sum
}
void Display(double arr[][MAX], int n)
{
int i, j
printf("")
for(i=0 i<n i++)
{
for(j=0 j<n j++)
{
printf("%10.1lf", arr[i][j])
}
printf("\n")
}
}
运行测试: