时间限制: 1 Sec 内存限制: 128 MB
提交: 3841 解决: 920
[提交][状态][讨论版]
二分法求一个方程根的基本思路是:对于区间[a, b]上连续单调且f(a)∙f(b)<0的函数y=f(x),取[a, b]区间中点x,将区间一分为二,则方程的根必然存在于f(a)或f(b)中与f(x)正负异号的区间,舍去另一半区间,继续依此迭代,直至f(x)的值符合精度要求,则x就是方程在[a, b]区间中根的近似值。
请根据上述二分法,按精度为1E-6的要求求解方程x3-10x2+3x+20=0在指定区间的根:
请补全给出代码中所缺少的代码。
注意:务必按原代码结构提交补全后的代码。
题目代码:(此处代码仅供浏览,修改可直接从此处下载
解的区间范围[a,b]
区间[a,b]内的解,提示:输入输出语句已在main函数中完成
3 10
9.459
- #define _CRT_SECURE_NO_WARNINGS 1
-
- #include
- #include
-
- /* 非线性函数原型 */
- double f(double x);
-
- /* 二分求解函数原型 */
- double BinarySearch(double, double);
-
- int main()
- {
- double x, a, b;
-
- scanf("%lf%lf", &a, &b);
- if (f(a) * f(b) > 0) /* 此处填空 */
- {
- printf("错误,a和b同号!\n");
- return -1;
- }
- x = BinarySearch(a, b); /* 此处填空 */
- printf("%5.3f\n", x);
- return 0;
- }
-
- double f(double x)
- {
- return x * x * x - 10 * x * x + 3 * x + 20.0;
- }
-
- double BinarySearch(double a, double b)
- {
- double x;
-
- x = (a + b) / 2.0;
- if (x-a < 1E-6) /* 此处填空 */
- return x;
- else
- {
- if (f(a) * f(x) > 0)
- return BinarySearch(x, b); /* 此处填空 */
- else
- return BinarySearch(a, x); /* 此处填空 */
- }
- }