我写了这段代码来找到二次方程的根。 代码是这样的:
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double a,b,c;
double x,x2;
cout<<"Give a: ";
cin>>a;
cout<<"Give b: ";
cin>>b;
cout <<"Give c: ";
cin>>c;
if (a==0)
{
if (b==0)
{
if (c==0)
{
cout<<"Solution indeterminable";
return 0;
}
else
{
cout<<"No solution";
return 0;
}
}
else
{
x=-c/b;
cout<<"The only root is x: "<<x;
return 0;
}
}
else
{
double b_sqr=b*b;
if (b_sqr>4*b*c)
{
cout<<"Complex roots: ";
return 0;
}
else if (b_sqr==4*b*c)
{
x=-b/(2*a);
cout<<"The only solution is x: "<<x;
return 0;
}
else
{
x=-b+(sqrt((b*b)-(4*a*c)))/(2*2);
x2=-b-(sqrt((b*b)-(4*a*c)))/(2*2);
cout<<"The first root is x1: "<<x;
cout<<"The first root is x2: "<<x2;
return 0;
}
}
}
无论我键入什么,它都会找到两个-1的根,或者一个-1的根。 我无法理解我的逻辑中有什么不对。 Everytbhing看起来很好
编辑:
这是一个没有编译器错误的情况,但代码似乎不起作用。当代码100%正确时,会发生这种情况,但错误不是代码中语言的语法或语法,而是代码背后的逻辑。
在开始编码之前,您应该确保您正在使用的参考资料详细说明您尝试解决的问题的算法解决方案是正确的。
如果没有编译器错误,但程序没有按预期运行,那么您应该检查程序的“详细信息”。你的公式是否正确?你确定你使用的是正确的方程吗? (就像我之前说的那样,确保你引用的那些确实是正确的。)
无论如何,这个问题间接地回答了一个关于软件开发的重要话题。但对于那些来到这里感兴趣的解决二次方程的C ++程序的人来说,这是工作代码:
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double a,b,c;
double x,x2;
cout<<"Give a: ";
cin>>a;
cout<<"Give b: ";
cin>>b;
cout <<"Give c: ";
cin>>c;
if (a==0)
{
if (b==0)
{
if (c==0)
{
cout<<"Solution indeterminable";
return 0;
}
else
{
cout<<"No solution";
return 0;
}
}
else
{
x=-c/b;
cout<<"The only root is x: "<<x;
return 0;
}
}
else
{
double b_sqr=b*b;
if (b_sqr<4*a*c)
{
cout<<"Complex roots ";
return 0;
}
else if (b_sqr==4*a*c)
{
x=-b/(2*a);
cout<<"The only solution is x: "<<x;
return 0;
}
else
{
x=-b+(sqrt((b*b)-(4*a*c)))/(2*a);
x2=-b-(sqrt((b*b)-(4*a*c)))/(2*a);
cout<<"The first root is x1: "<<x;
cout<<"The second root is x2: "<<x2;
return 0;
}
}
}
答案 0 :(得分:2)
以下可能有所帮助:http://ideone.com/o8nLlV
bool solve_quadratic(double a, double b, double c, double& x1, double& x2)
{
assert(a != 0);
const double delta = b * b - 4 * a * c;
if (delta < 0) {
return false;
}
if (delta == 0) {
x1 = -b / (2 * a);
x2 = x1;
} else {
const double sqrt_delta = sqrt(delta);
x1 = (-b + sqrt_delta) / (2 * a);
x2 = (-b - sqrt_delta) / (2 * a);
}
return true;
}