```cpp #include <iostream> #include <cmath> #include <iomanip> int main() { double a, b, c; // 提示用户输入一元二次方程的系数a, b, c std::cout << "请输入一元二次方程ax^2 + bx + c = 0的系数a, b, c(a不为0):" << std::endl; std::cin >> a >> b >> c; // 计算判别式 double discriminant = b * b - 4 * a * c; // 检查判别式的值 if (discriminant > 0) { // 判别式大于0,方程有两个不同的实根 double x1 = (-b + std::sqrt(discriminant)) / (2 * a); double x2 = (-b - std::sqrt(discriminant)) / (2 * a); // 设置输出精度为小数点后5位 std::cout << std::fixed << std::setprecision(5); std::cout << "方程有两个不同的实根:" << std::endl; std::cout << "x1 = " << x1 << std::endl; std::cout << "x2 = " << x2 << std::endl; } else if (discriminant == 0) { // 判别式等于0,方程有两个相同的实根 double x = -b / (2 * a); std::cout << std::fixed << std::setprecision(5); std::cout << "方程有两个相同的实根:" << std::endl; std::cout << "x1 = x2 = " << x << std::endl; } else { // 判别式小于0,方程没有实根 std::cout << "方程没有实根。" << std::endl; } return 0; } ``` 我在以往的开发过程中,碰到过以下几点需要格外小心处理的地方: 1. 要确保输入的系数`a`不为0,因为`a`为0时方程就不是一元二次方程了。 2. 在计算判别式时,要注意`b * b - 4 * a * c`的结果可能会超出数据类型的表示范围,特别是当系数值很大时。 3. 使用`std::sqrt`函数计算平方根时,要保证传入的参数是非负的,否则会导致未定义行为。 [2025-08-12 17:07:05 | AI写代码神器 | 570点数解答]