C 无法使编码解线性方程
所以我做了一个程序来解一个3的线性方程,但由于某种原因它没有给我正确的答案,我已经做了研究,但似乎找不到我的编码有什么问题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
我使用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
。