C++ 子程序不';在第一次调用之后,在下面的调用中不能给出正确的输出,有没有办法解决这个问题?

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

该程序使用行列式求解包含3个未知成员x、y和z的方程。 它通过使用用户定义的元素填充维度[3,4]和二维数组来实现这一点。 主矩阵填充后,程序用未知成员填充4[3,3]个矩阵,然后 在4个矩阵中的3个矩阵中,用主矩阵的解替换列。 子程序使用Sarrus规则确定较小矩阵的行列式。问题就从这里开始。它计算主矩阵行列式,但之后无法对其他矩阵进行相同的计算。如何更改子程序,使其对其余矩阵执行此操作

子程序代码:

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