7-18 二分法求多项式单根 (20 分)

版权声明:SupremeBeast3_ https://blog.csdn.net/weixin_43359312/article/details/89006731

7-18 二分法求多项式单根 (20 分)

在这里插入图片描述
输入格式:
输入在第1行中顺序给出多项式的4个系数a3 a2 a1 a0,在第2行中顺序给出区间端点a和b。题目保证多项式在给定区间内存在唯一单根。

输出格式:
在一行中输出该多项式在该区间内的根,精确到小数点后2位。

输入样例:
3 -1 -3 1
-0.5 0.5
输出样例:
0.33

AC代码

#include <iostream>
#include <cstdio>
using namespace std;
double a3, a2, a1, a0;
double f(double x);   //定义多项式
int main() {
	cin >> a3 >> a2 >> a1 >> a0;
	double a, b;
	cin >> a >> b;
	if (f(a)*f(b) > 0) { printf("%.2lf\n", (a + b) / 2); return 0; }	//无效区域
	double Tmp;
	while (true) {
		if (!f(a)) { printf("%.2lf\n", a); return 0; }
		if (!f(b)) { printf("%.2lf\n", b); return 0; }	//端点为根
		Tmp = (a + b) / 2;
		if (b - Tmp < 0.001) break;   //达到阈值结束循环
		if (f(Tmp)*f(a) > 0) a = Tmp;
		else if (f(Tmp)*f(b) > 0) b = Tmp;
		else break;
	}
	printf("%.2lf\n", Tmp);   //输出近似根
	return 0;
}
double f(double x) {
	return a3*x*x*x + a2*x*x + a1*x + a0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43359312/article/details/89006731