C 无法使编码解线性方程

C 无法使编码解线性方程,c,visual-c++,C,Visual C++,所以我做了一个程序来解一个3的线性方程,但由于某种原因它没有给我正确的答案,我已经做了研究,但似乎找不到我的编码有什么问题 我使用Visual C++ 2010/2015 < /P> void linear() { int y[3][3], inv[3][3], co[3][3], d[3], sol[3], D = 0, i = 0, j = 0; char z; printf("The format for the linear equ

所以我做了一个程序来解一个3的线性方程,但由于某种原因它没有给我正确的答案,我已经做了研究,但似乎找不到我的编码有什么问题

我使用Visual C++ 2010/2015 < /P>

void linear()
    {
        int y[3][3], inv[3][3], co[3][3], d[3], sol[3], D = 0, i = 0, j = 0;
        char z;
        printf("The format for the linear equation is\na1.X + b1.Y + c1.Z = d1\na2.X + b2.Y + c2.Z = d2\na3.X + b3.Y + c3.Z = d3\n");
        for (i = 0;i < 3;i++)
        {
            for (z = 'a';z < 'd';z++)
            {
                printf("Enter the value for %c%i\n", z, i + 1);
                scanf("%i", &y[i][j++]);
            }
            printf("Enter the valie for D%i\n", i + 1);
            scanf("%i", &d[i]);
            j = 0;
        }
        for (i = 0;i < 3;i++)
            for (j = 0;j < 3;j++)
            co[i][j] = (y[(i + 1) % 3][(j + 1) % 3] * y[(i + 2) % 3][(j + 2) % 3]) - (y[(i + 1) % 3][(j + 2) % 3] * y[(i + 2) % 3][(j + 1) % 3]);
        for (i = 0;i < 3;i++)
            D += y[i][0] * co[i][0];
        if (D == 0)
        {
            printf("\nThese equations cannot be solved!\n");
            return;
        }
        for (i = 0;i < 3;i++)
            for (j = 0;j < 3;j++)
            swap(&co[i][j], &co[j][i]);
        for (i = 0;i < 3;i++)
            for (j = 0;j < 3;j++)
            inv[i][j] = co[i][j] / D;
        for (i = 0;i < 3;i++)
        {
            sol[i] = 0;
            for (j = 0;j < 3;j++)
                sol[i] += inv[i][j] * d[j];
        }
        printf("The solutions are\nX=%i\nY=%i\nZ=%i\n", sol[0], sol[1], sol[2]);
        getch();
    }
void linear()
{
int y[3][3]、inv[3][3]、co[3][3]、d[3]、sol[3]、d=0、i=0、j=0;
charz;
printf(“线性方程的格式为\na1.X+b1.Y+c1.Z=d1\na2.X+b2.Y+c2.Z=d2\na3.X+b3.Y+c3.Z=d3\n”);
对于(i=0;i<3;i++)
{
for(z='a';z<'d';z++)
{
printf(“输入%c%i\n”,z,i+1的值);
scanf(“%i”、&y[i][j++]);
}
printf(“输入D%i\n”的有效期,i+1);
scanf(“%i”、&d[i]);
j=0;
}
对于(i=0;i<3;i++)
对于(j=0;j<3;j++)
co[i][j]=(y[(i+1)%3][(j+1)%3]*y[(i+2)%3][(j+2)%3])-(y[(i+1)%3][(j+2)%3]*y[(i+2)%3][(j+1)%3]);
对于(i=0;i<3;i++)
D+=y[i][0]*co[i][0];
如果(D==0)
{
printf(“\n这些方程无法求解!\n”);
返回;
}
对于(i=0;i<3;i++)
对于(j=0;j<3;j++)
掉期(&co[i][j]、&co[j][i]);
对于(i=0;i<3;i++)
对于(j=0;j<3;j++)
inv[i][j]=co[i][j]/D;
对于(i=0;i<3;i++)
{
sol[i]=0;
对于(j=0;j<3;j++)
sol[i]+=inv[i][j]*d[j];
}
printf(“解决方案是\nX=%i\nY=%i\nZ=%i\n”、sol[0]、sol[1]、sol[2]);
getch();
}
整数除法

对于矩阵解,即使是整数输入,解也总是需要浮点数学

// int inv[3][3], sol[3];
double inv[3][3], sol[3];
...

for (i = 0;i < 3;i++)
  for (j = 0;j < 3;j++)
    // inv[i][j] = co[i][j] / D;
    inv[i][j] = 1.0 * co[i][j] / D;
...
    sol[i] += inv[i][j] * d[j];
...
// printf("The solutions are\nX=%i\nY=%i\nZ=%i\n", sol[0], sol[1], sol[2]);
printf("The solutions are\nX=%e\nY=%e\nZ=%e\n", sol[0], sol[1], sol[2]);
//int inv[3][3],sol[3];
双投资[3][3],信保通[3];
...
对于(i=0;i<3;i++)
对于(j=0;j<3;j++)
//inv[i][j]=co[i][j]/D;
投资[i][j]=1.0*co[i][j]/D;
...
sol[i]+=inv[i][j]*d[j];
...
//printf(“解决方案是\nX=%i\nY=%i\nZ=%i\n”、sol[0]、sol[1]、sol[2]);
printf(“解决方案是\nX=%e\nY=%e\nZ=%e\n”、sol[0]、sol[1]、sol[2]);

尝试打印行列式和辅因子,看看它们是否正确。请添加您当前的输入、得到的结果和预期的输出。C++不是C,反之亦然。请选择一个。我想您是在调试器下运行代码的吧?你发现了什么?发布你的输入会有帮助:使用
%d”
scanf(“%…”,&y[i][j++])。使用
“%i”
,带引线的输入
0
被视为八进制,因此“012”变为
10