如果这个问题很简单,很抱歉,但是我是C++的新手。我正在设计一个使用二次公式计算2个根的程序。但是,当判别数为负数时,我的程序将无法正常工作。

#define _USE_MATH_DEFINES // for C++
#include <cmath>
#include <iostream>
using namespace std;
int main()
{
    int pointa;
    int pointb;
    int pointc;
    int discriminant1;
    float root1;
    float root2;

    cout << "Please enter a, b and c: ";
    cin >> pointa;
    cin >> pointb;
    cin >> pointc;

    discriminant1 = (pow(pointb, 2)) - (4 * pointa * pointc);

    root1 = (-(pointb) + sqrt(discriminant1)) / (2 * pointa);
    root2 = (-(pointb) - sqrt(discriminant1)) / (2 * pointa);

    cout << "Root1 :" << root1 << endl;
    cout << "Root2 :" << root2 << endl;
    return 0;

主要问题是pointb的输入。平方输入时,是否有任何方法可以迫使pointb变为正数,就像在TI-84中添加括号一样?输入-1时,将导致整个公式无效。

最佳答案

要使用绝对值,可以使用abs() header 中的 <cstdlib>

但是,据我了解,如果判别为否定,则仅表示没有解决方案。

因此,最好添加一个if子句以仅在判别为肯定的情况下执行公式的该部分。

在更高级的数学中,负数的平方根的确在复平面上有一个答案。要获得此结果,可以使用数据类型complex<double>并使用带复数的sqrt()的重载版本。

08-26 19:22