正文

求行列式的值2006-04-23 22:13:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/goal00001111/13093.html

分享到:

/*求行列式的值
函数介绍:输入一个行列式,求其值
*/

#include <iostream>

using namespace std;

const int N = 10;  //行列式的阶数

void Create1(int H[][N]);  //构造一个行列式
void Create2(int H[][N]);  //构造一个行列式
void PrintH(const int H[][N]); //输出行列式
int HLS(const int a[][N], int n);//输入一个行列式,求其值
void YZS(int Y[][N], const int a[][N], int len, int a_r);//求行列式当前元素的余子式

int main() 
{  
 int a[N][N] = {0};

// Create1(a);  //构造一个行列式
 Create2(a);  //构造一个行列式
 PrintH(a);  //输出行列式
 
 cout << HLS(a,N) << endl;
 
    getchar();
 return 0;
}

void Create1(int H[][N])
{
 int i, j;
 
 printf("请按标准格式输入行列式:每行%d个数值,用空格隔开\n", N);
 for (i=0; i<N; i++)
 {
  for(j=0; j<N; j++)
   scanf("%d", &H[i][j]);
  fflush(stdin);
 } 
}
void Create2(int H[][N])
{
 int i, j;
 
 for(i=0; i<N; i++)
  for(j=0; j<N; j++)
   H[i][j] = rand()%4;
}
void PrintH(const int H[][N])
{
 int i, j;
 for (i=0; i<N; i++)
 {
  for(j=0; j<N; j++)
   printf("%d ", H[i][j]);
  printf("\n");
 }
}

/*函数介绍:输入一个行列式,用递归的方法,以行列式的行序为主序求行列式的值 
  输入参数:const int a[][N] :一个以二维数组形式存储的行列式
     int n:行列式的阶数
  输出参数:无
  返回值:  int :行列式的值
*/
int HLS(const int a[][N], int n)
{
 if (n == 1) //如果行列式的阶数为1,直接返回其值
 {
  return a[0][0];
 }
 else  //否则按照求代数余子式的方法,采用递归方式求行列式的值
 {
  int sum = 0; //用来存储当前行列式(可能是上一层行列式的余子式)的值
  
  for (int i=0; i<n; i++)//以行列式的行序为主序求行列式的值 
  {
   int Y[N][N] = {0}; //存储行列式当前元素的余子式
   YZS(Y, a, n, i);   //求行列式当前元素的余子式
   
   int xs = (i%2 == 0) ? 1 : -1; //计算行列式当前元素的代数余子式的系数
   
   sum += xs * a[i][0] * HLS(Y, n-1);//累积当前行列式的值 
  }
   
  return sum;
 }
}

/*函数介绍:输入一个行列式及其第0列第a-r行元素,求该元素的余子式
  输入参数:const int a[][N] :一个以二维数组形式存储的行列式
     int n:行列式的阶数
     int a_r:元素的行号(列号默认为0)
  输出参数:int Y[][N]:该元素的余子式
  返回值:  void
*/
void YZS(int Y[][N], const int a[][N], int len, int a_r)
{
 int r = 0;
 int c = 0;
 
 for (int i=0; i<len; i++)
 {
  if (i != a_r)
  {
   for (int j=1; j<len; j++)
   {
    Y[r][c++] = a[i][j];
   }
   r++;
   c = 0;
  }
 }
}

阅读(6059) | 评论(2)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册