C语言 计算行列式

Python013

C语言 计算行列式,第1张

#include <stdio.h>

#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")

}

}

运行测试: