作业帮 > 综合 > 作业

c语言编写二阶逆矩阵给定的二阶矩阵(2*2),求其逆矩阵;输出一个大小为2*2的距阵,矩阵每一行相邻的的两个数字之间由一

来源:学生作业帮 编辑:搜搜做题作业网作业帮 分类:综合作业 时间:2024/05/25 15:52:03
c语言编写二阶逆矩阵
给定的二阶矩阵(2*2),求其逆矩阵;
输出一个大小为2*2的距阵,矩阵每一行相邻的的两个数字之间由一个空格隔开.
输入:
2 0
1 1
输出:
0.500000 0.000000
-0.500000 1.000000
c语言编写二阶逆矩阵给定的二阶矩阵(2*2),求其逆矩阵;输出一个大小为2*2的距阵,矩阵每一行相邻的的两个数字之间由一
#include
int ScanDMatrix(double matrix[][2]);
void PrintDMatrix(double matrix[][2]);
int InverseDMatrix(double matrix[][2]);
int main(void)
{
double matrix[2][2];
printf("Input the matrix this way\n");
printf("A B\nC D\n:\n");
if (! ScanDMatrix(matrix))
{
printf("Are you kidding me?\n");
return 0;
}
printf("The matrix you input is:\n");
PrintDMatrix(matrix);
if (InverseDMatrix(matrix))
{
printf("The inverse of the matrix is:\n");
PrintDMatrix(matrix);
printf("\n");
}
else
{
printf("Oh, what a pitty, it does not have an inverse one.\n");
}
return 0;
}
int ScanDMatrix(double matrix[][2])
{
return scanf("%lf%lf", &matrix[0][0], &matrix[0][1]) == 2
&& scanf("%lf%lf", &matrix[1][0], &matrix[1][1]) == 2;
}
void PrintDMatrix(double matrix[][2])
{
printf("%10g\t%10g\n", matrix[0][0], matrix[0][1]);
printf("%10g\t%10g\n", matrix[1][0], matrix[1][1]);
}
int InverseDMatrix(double matrix[][2])
{
double dDiv, dTmp;

dDiv = matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0];
if (! dDiv)
return 0;

dTmp = matrix[0][0];
matrix[0][0] = matrix[1][1] / dDiv;
matrix[1][1] = dTmp / dDiv;
matrix[0][1] = -matrix[0][1] / dDiv;
matrix[1][0] = -matrix[1][0] / dDiv;
return 1;
}
再问: 出来的答案中有一个-0 不过还是谢谢 我是个新入门的菜鸟 看起来还是有点吃力 if (! ScanDMatrix(matrix)) { printf("Are you kidding me?\n"); return 0; } 这是什么意思???
再答: 输入的格式不对,就提示出错,然后退出。 比如输入 a 后按回车键就会这样。 至于出现的-0,与使用的库函数版本有关系,可根据自己使用的编译器对程序进行微调即可。