我正在自己编写第一个代码。到目前为止,所有内容都已复制粘贴,并对示例进行了一些更改。 我认为我正在朝正确的方向前进,但不确定。
#include <iostream>
#include <cmath>
using namespace std;
int main ( )
{
int a, b, c, x1, x2;
cout << "Please enter an integer value for a " << endl;
cin >> a;
cout << "Please enter an integer value for b " << endl;
cin >> b;
cout << "Please enter an integer value for b " << endl;
cin >> c;
cout << " The Quadratic Formula is: \n";
cout << " X = (-b +- sqrt ((b * b) - 4 * a * c)) \ (2 * a)\n";
cout << " \n";
x1 = sqrt((b * b)- 4 * a *c);
x2 = -sqrt((b * b) - 4 * a * c);
if (x1 < 0)
{
//use 1, 2, 3
cout << "There are no real roots 1";
cout << x1;
}
else if (x1 == 0)
{
//use 4, 12, 9
cout << "There is one real root ";
cout << x1;
}
else
{
//use 2, 11, 5
cout << "There are two real roots ";
cout << x1 << ", " << x2;
}
return 0;
}
如果在询问时输入三个数字,它应该计算它是否没有实数平方,一个实数平方或两个实数平方,并告诉您结果。似乎可以做到这一点,但是我不确定我是否掌握了数学知识。我确实找到了一些数字,这些数字可以分别得出预期的结果。我不确定我是否记下了正确的数学,还是可以更轻松地完成? 谢谢你。
答案 0 :(得分:0)
您只需要查看二次函数的判别式即可查看其根的类型。判别式是二次方程平方根下的部分:
如果判别为负,则根为虚数。如果为正,则存在两个不同的真实根。并且如果它为零,则仅存在一个大小为-b/(2*a)
的根。
因此您可以执行以下操作:
float tol = 1e-6;
float discriminant = b*b -4*a*c;
if ((discriminant < 0.0 + tol) && (discriminant > 0.0 - tol)) {
std::cout << "one real root.\n";
} else if (discriminant < 0.0) {
std::cout << "imaginary roots.\n";
} else {
std::cout << "real roots.\n";
}
此外,我不会在数学表达式中使用整数,它们不允许小数,因此您会得到意想不到的结果。
图片来自Wikipedia。