#include <iostream> // 输入输出流库
#include <iomanip> // 输入输出格式化库
#include <cstring> // 字符串操作库(实际未使用,可移除)
using namespace std; // 使用标准命名空间 // 全局变量定义区
double x1, x2; // 临时存储函数值的变量
double a, b, c, d; // 三次方程系数:ax3 + bx2 + cx + d = 0 /** * 函数:P(x) * 功能:计算三次方程在x处的函数值 * 参数:x - 自变量值 * 返回:函数计算结果 */
double P(double x) {
return a * x * x * x + b * x * x + c * x + d;
}
int main() { // 变量定义
double i, j; // 循环计数器
double l, r, mid; // 二分法区间变量 // 用户输入三次方程系数 cout << "请输入三次方程系数(a b c d,以空格分隔): ";
cin >> a >> b >> c >> d; // 主循环:在[-100,100]区间内搜索实数根
for(i = -100.00; i < 100.00; i += 1.0) { // 计算当前区间端点的函数值
x1 = P(i);
x2 = P(i + 1); // 情况1:i点恰好是方程的根
if(x1 == 0) {
cout << fixed << setprecision(2) << i << " ";
} // 情况2:区间内有根(函数值异号)
else if(x1 * x2 < 0) { // 初始化二分法区间
l = i;
r = i + 1; // 二分法精确求解(迭代1000次确保精度)
for(j = 1; j <= 1000; j++) {
mid = (l + r) / 2; // 计算中点 // 判断根所在的半区间
if(P(l) * P(mid) < 0) {
r = mid; // 根在左半区间
}
else {
l = mid; // 根在右半区间
}
} // 输出找到的根(保留2位小数)
cout << fixed << setprecision(2) << l << " ";
}
}
cout << endl; // 输出换行
return 0; // 程序正常结束
}
/**
* @runId: 17860
* @language: C++
* @author: hsl295931
* @submitTime: 31/07/25 14:23
*/