正文

求行列式的值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;  } }}

阅读(6199) | 评论(2)


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

评论

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