用C++编程求任意行列式的值
展开全部
哥们儿,C语言 行吗
#include <stdio.h>
#include <stdlib.h>
#define MAX 9 /*定义最大为9阶行列式*/
int Fun(int n, int a[MAX][MAX] ); /*函数声明*/
main()
{
int n = 0; /*初始化阶数n*/
int i = 0, j = 0; /*i,j分别表示行与列*/
int a[MAX][MAX] = {{0}}; /*定义行列式*/
printf("please input n(n<=9) and then the array:");
scanf("%d",&n); /*读入阶数*/
for( i = 0; i < n; i++) /*此处2次循环将行列式存入数组中*/
for( j = 0; j < n; j++)
scanf("%d", &a[i][j]);
printf("%d\n", Fun( n, a ) );
}
/*以下为计算行列式值的递归函数——按行列式的第一列展开*/
int Fun(int n,int a[MAX][MAX])
{
int i=0, j=0, c=0; /*i,j为行与列,c为数组b的行*/
int b[MAX][MAX]={{0}};/*定义数组b并初始化*/
int p=0, q=0;/*p,q为中间变量*/
int sum=0;/*sum为行列式的值*/
if(n == 1)
return a[0][0];
for(i=0;i<n;i++)/*此处大循环实现将余子式存入数组b中*/
{
for(c=0;c<n-1;c++)
{
if(c<i) /*借助c判断每行的移动方法*/
p=0;
else
p=1;
for(j=0;j<n-1;j++)
{
b[c][j]=a[c+p][j+1];
}
}
if(i%2==0) q=1;
else q=(-1);
sum=sum+a[i][0]*q*Fun(n-1,b);
}
return sum;
}
#include <stdio.h>
#include <stdlib.h>
#define MAX 9 /*定义最大为9阶行列式*/
int Fun(int n, int a[MAX][MAX] ); /*函数声明*/
main()
{
int n = 0; /*初始化阶数n*/
int i = 0, j = 0; /*i,j分别表示行与列*/
int a[MAX][MAX] = {{0}}; /*定义行列式*/
printf("please input n(n<=9) and then the array:");
scanf("%d",&n); /*读入阶数*/
for( i = 0; i < n; i++) /*此处2次循环将行列式存入数组中*/
for( j = 0; j < n; j++)
scanf("%d", &a[i][j]);
printf("%d\n", Fun( n, a ) );
}
/*以下为计算行列式值的递归函数——按行列式的第一列展开*/
int Fun(int n,int a[MAX][MAX])
{
int i=0, j=0, c=0; /*i,j为行与列,c为数组b的行*/
int b[MAX][MAX]={{0}};/*定义数组b并初始化*/
int p=0, q=0;/*p,q为中间变量*/
int sum=0;/*sum为行列式的值*/
if(n == 1)
return a[0][0];
for(i=0;i<n;i++)/*此处大循环实现将余子式存入数组b中*/
{
for(c=0;c<n-1;c++)
{
if(c<i) /*借助c判断每行的移动方法*/
p=0;
else
p=1;
for(j=0;j<n-1;j++)
{
b[c][j]=a[c+p][j+1];
}
}
if(i%2==0) q=1;
else q=(-1);
sum=sum+a[i][0]*q*Fun(n-1,b);
}
return sum;
}
展开全部
只通过将一行加上或者减去另一行的若干倍的操作,将行列式变换成一个三角阵,然后对角线元素乘积就是行列式的值
具体操作过程可以是高斯消元,如果是整数行列式又不想损失精度可以写成辗转相除高斯消元
具体操作过程可以是高斯消元,如果是整数行列式又不想损失精度可以写成辗转相除高斯消元
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
行列式是什么东西 都忘了 恩举个例子吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询