C++ 子程序不';在第一次调用之后,在下面的调用中不能给出正确的输出,有没有办法解决这个问题?
该程序使用行列式求解包含3个未知成员x、y和z的方程。 它通过使用用户定义的元素填充维度[3,4]和二维数组来实现这一点。 主矩阵填充后,程序用未知成员填充4[3,3]个矩阵,然后 在4个矩阵中的3个矩阵中,用主矩阵的解替换列。 子程序使用Sarrus规则确定较小矩阵的行列式。问题就从这里开始。它计算主矩阵行列式,但之后无法对其他矩阵进行相同的计算。如何更改子程序,使其对其余矩阵执行此操作 子程序代码:C++ 子程序不';在第一次调用之后,在下面的调用中不能给出正确的输出,有没有办法解决这个问题?,c++,arrays,matrix,determinants,C++,Arrays,Matrix,Determinants,该程序使用行列式求解包含3个未知成员x、y和z的方程。 它通过使用用户定义的元素填充维度[3,4]和二维数组来实现这一点。 主矩阵填充后,程序用未知成员填充4[3,3]个矩阵,然后 在4个矩阵中的3个矩阵中,用主矩阵的解替换列。 子程序使用Sarrus规则确定较小矩阵的行列式。问题就从这里开始。它计算主矩阵行列式,但之后无法对其他矩阵进行相同的计算。如何更改子程序,使其对其余矩阵执行此操作 子程序代码: int d = 0; int det(int n, int mat[3][3]) { int
int d = 0;
int det(int n, int mat[3][3])
{
int c, subi, i, j, subj;
int submat[3][3];
if(n == 2) {
return( (mat[0][0] * mat[1][1]) - (mat[1][0] * mat[0][1]));
}
else{
for(c = 0; c < n; c++){
subi = 0;
for(i = 1; i < n; i++){
subj = 0;
for(j = 0; j < n; j++){
if (j == c){
continue;
}
submat[subi][subj] = mat[i][j];
subj++;
}
subi++;
}
d = d + (pow(-1 ,c) * mat[0][c] * det(n - 1 ,submat));
}
}
return d;
}
假设输出:x=3,y=-1,z=2
我的结果:x=4,y=3,z=5您是否尝试在调试器中单步执行代码?在构建子矩阵后,
subi
的值是否是您期望的值?全局变量d
,使用int d=0定义代码>很可能是罪魁祸首。将它移到函数内部,看看有什么变化。@RSahu是的,你说得对!这就造成了问题。谢谢你的帮助!您是否尝试在调试器中单步执行代码?构建子矩阵后,subi
的值是否是您期望的值?全局变量d
,使用int d=0定义代码>很可能是罪魁祸首。将它移到函数内部,看看有什么变化。@RSahu是的,你说得对!这就造成了问题。谢谢你的帮助!
Det=det(n,mat1);
cout<<Det<<endl;
Det1=det(n,mat2);
cout<<Det1<<endl;
Det2=det(n,mat3);
cout<<Det2<<endl;
Det3=det(n,mat4);
cout<<Det3<<endl;
cout<<Det1/Det<<" ";
cout<<Det2/Det<<" ";
cout<<Det3/Det;
3x + 4y + 1z = 7
4x + 2y + 3z =16
2x + 5y + 4z =9