• Nwafu-OJ-1512 Problem 二分法解方程


    问题 : 二分法解方程

    时间限制: 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

    代码实现

    1. #define _CRT_SECURE_NO_WARNINGS 1
    2. #include
    3. #include
    4. /* 非线性函数原型 */
    5. double f(double x);
    6. /* 二分求解函数原型 */
    7. double BinarySearch(double, double);
    8. int main()
    9. {
    10. double x, a, b;
    11. scanf("%lf%lf", &a, &b);
    12. if (f(a) * f(b) > 0) /* 此处填空 */
    13. {
    14. printf("错误,a和b同号!\n");
    15. return -1;
    16. }
    17. x = BinarySearch(a, b); /* 此处填空 */
    18. printf("%5.3f\n", x);
    19. return 0;
    20. }
    21. double f(double x)
    22. {
    23. return x * x * x - 10 * x * x + 3 * x + 20.0;
    24. }
    25. double BinarySearch(double a, double b)
    26. {
    27. double x;
    28. x = (a + b) / 2.0;
    29. if (x-a < 1E-6) /* 此处填空 */
    30. return x;
    31. else
    32. {
    33. if (f(a) * f(x) > 0)
    34. return BinarySearch(x, b); /* 此处填空 */
    35. else
    36. return BinarySearch(a, x); /* 此处填空 */
    37. }
    38. }

  • 相关阅读:
    用户管理命令
    websocket(三)——前端JS封装
    初识swagger
    降低打新的预期
    react 环境搭建以及创建项目工程
    leetcode 901. Online Stock Span(在线库存跨度)
    【windows】Windows电脑怎么卸载服务/删除服务?
    流量6----6
    19.1 STL总述、发展史、组成与数据结构谈
    基于SSM的酒店管理系统
  • 原文地址:https://blog.csdn.net/qq_53436105/article/details/128089919