二维数组实验题:按如下公式递归计算矩阵行列式的值:
提示信息:“Please enter matrix size n(1<=n<20):” “Please input matrix line
by line:\n” “matrix a:\n”
**输出格式要求:“Submatrix:\n” “DValue of the Submatrix is %6.1f\n” “%6.1f\t” “result = %f\n”
程序运行结果如下:
Please enter matrix size n(1<=n<20):3
Please input matrix line by line:
1 2 3
4 5 7
8 9 11
matrix a:
1.0 2.0 3.0
4.0 5.0 7.0
8.0 9.0 11.0
(注意:此处有一个空行)
Submatrix:
5.0 7.0
9.0 11.0
DValue of the Submatrix is -8.0
Submatrix:
4.0 7.0
8.0 11.0
DValue of the Submatrix is -12.0
Submatrix:
4.0 5.0
8.0 9.0
DValue of the Submatrix is -4.0
result = 4.000000
下面是代码:
#include <math.h>
#include <stdio.h>
#define CONST 1e-6
#define SIZE 20
void InputMatrix (double a[][SIZE], int n);
double DeterminantValue(double a[][SIZE], int n);
void SubMatrix(double a[][SIZE], double b[][SIZE], int n, int row, int col);
void PrintMatrix(double a[][SIZE], int n);
int main(void)
{
double a[SIZE][SIZE];
int n;
double result;
printf("Please enter matrix size n(1<=n<%d):", SIZE);
scanf("%d", &n);
printf("Please input matrix line by line:\n");
InputMatrix(a, n);
printf("matrix a:\n");
PrintMatrix(a, n);
printf("\n");
result = DeterminantValue(a, n);
printf("result = %f\n", result);
return 0;
}
// 函数功能: 输入一个n×n矩阵的元素
void InputMatrix (double a[][SIZE], int n)
{
int i, j;
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
scanf("%lf", &a[i][j]);
}
}
}
// 函数功能: 计算n×n矩阵的行列式的值
double DeterminantValue(double a[][SIZE], int n)
{
int i = 0, j = 0;
double temp, result, b[SIZE][SIZE];
if (n == 1)
{
result = a[0][0];
}
else if (n == 2)
{
result = a[0][0] * a[1][1] - a[0][1] * a[1][0];
}
else
{
result = 0.0;
for (j = 0; j < n; j++)
{
SubMatrix(a, b, n, i, j);
printf("Submatrix:\n");
PrintMatrix(b, n - 1);
temp = DeterminantValue(b, n - 1);
result += pow(-1, i + j) * a[0][j] * temp;
printf("DValue of the Submatrix is %6.1f\n", temp);
}
}
return result;
}
// 函数功能: 计算n×n矩阵a中第row行col列元素的(n-1)×(n-1)子矩阵b
void SubMatrix(double a[][SIZE], double b[][SIZE], int n, int row,
int col)
{
int i, j, ii = 0, jj = 0;
for (i = 0; i < n; i++)
{
jj = 0;
for (j = 0; j < n; j++)
{
if (i != row && j != col)
{
b[ii][jj] = a[i][j];
jj++;
}
}
if (i != row && j != col)
{
ii++;
}
}
}
// 函数功能: 输出一个n×n矩阵的元素
void PrintMatrix(double a[][SIZE], int n)
{
int i, j;
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
printf("%6.1f\t", a[i][j]);
}
printf("\n");
}
}