/*求行列式的值 函数介绍:输入一个行列式,求其值 */ #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; } }}

评论