肯定正确,不可抄袭
查看原帖
肯定正确,不可抄袭
1757147
hsl295931楼主2025/7/31 14:26
#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
*/
2025/7/31 14:26
加载中...