用二分法求下面方程在(-10,10)之间的根。【谭浩强第四版课后习题】

用二分法求下面方程在(-10,10)之间的根:2x3-4x2+3x-6=0

编程思路:仿照二分查找,将区间划分为两部分,记录区间左右端点,得到中点。每次运算将中点带入方程:

  • 结果>0:根应该向小一点的值拟合,high=mid;
  • 结果<0:根应该向大一点的值拟合,low=mid;

对于跳出循环的条件,我首先是认为low和high应该无限逼近:while(fabs(low-high)>1e-5),当循环体内结果=0后,便使用break跳出循环:if(temp==0) break;但是没有得到答案。

后来修改之后,便得到答案了。

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<math.h>
 4
 5 int main(){
 6     double low=-10,high=10,mid;
 7     double temp=10;
 8     while(fabs(temp)>1e-5){
 9         mid=(low+high)/2;
10         temp=((2*mid-4)*mid+3)*mid-6;
11         printf("%lf ",mid);
12         printf("%lf\n",temp);
13         if(temp>0)    high=mid;
14         else if(temp<0)    low=mid;
15     }
16     printf("%lf",mid);
17     return 0;
18 }

和官方答案不同,害怕会有疏漏的地方,如果读到这里的你有想法或建议,欢迎指正~

原文地址:https://www.cnblogs.com/cuphead/p/11290290.html

时间: 2024-10-08 17:47:33

用二分法求下面方程在(-10,10)之间的根。【谭浩强第四版课后习题】的相关文章

C++ Primer 第四版课后练习解答 习题1.10

注意:本随笔是在<C++Primer(第四版)习题解答(完整版)>中直接抄录的.此处主要是便于本人以后反复阅读. 习题1.10 用for循环编程,求从50到100的所有自然数的和.然后用while循环重写该程序. [解答] 用for编写的程序如下: 1 #include <iostream> 2 using namespace std; 3 4 int main() 5 { 6 int sum = 0; 7 for (int i = 50; i <= 100; ++i) 8

谭浩强 C程序设计 8.2 求方程 的根,用三个函数分别求当b^2-4ac大于0、等于0、和小于0时的根,并输出结果。从主函数输入a、b、c的值。

#include<stdio.h> #include<math.h> int main() { float a,b,c,q; void lianggegen(float a,float b,float q); void dangen(float a,float b,float q); void fushugen(float a,float b,float q); printf("输入 a b c 的值,以空格分隔:\n "); scanf("%f%f%

Java语言程序设计(基础篇)第10版 课后习题13.1答案

import java.util.*; abstract class GeometricObject{ private String color; private  boolean filled; public String getColor() {   return color;  } public void setColor(String color) {   this.color = color;  } public boolean isFilled() {   return filled

谭浩强 C程序设计 8.10写一函数,输入一行字符,将此字符串中最长的单词输出。

代码量稍微一大,就会出现bug,浪费很多时间,继续努力. #include <stdio.h> void main(){ void maxLen(char str[50]); char str[50]; gets(str); maxLen(str); } void maxLen(char str[50]){ int i,j=1,t=-1,start=0,m; int maxNum(int num[50]); int num[50]={0}; num[0]=-1;//num[1]放第一个单词的长

谭浩强 c++程序设计第一章课后习题 第10题

#include <iostream> using namespace std; int main() { int a,b,c; cout<<"请输入三个整数类型的数字:" <<endl; cin>>a>>b>>c; void sort(int x,int y,int z); sort(a,b,c);//abc有具体值,称为实际参数 return 0; } void sort(int x,int y,int z)/

c++谭浩强教材教学练习例题1.2 求两数之和 为什么sum=a+b;sum的值为65538

第一章 #include <iostream>using namespace std; int main(){ int a,b,sum; sum=a+b; cin>>a>>b; cout<<"a+b="<<sum<<endl; return 0;} //原因sum=a+b;此语句位置不对,变量a,b在没有赋值时就被相加,超出int最大值范围.只能得到最大值65538 #include <iostream>

Openjudge ch0111/t6253 用二分法求方程的根

这题只是考你最后有没有(r-l)/2而已…… 总时间限制: 1000ms 内存限制: 65536kB 描述 用二分法求下面方程在(-10, 10)之间的一个根. 2x3- 4x2+ 3x- 6 = 0 输入 一个小于1的非负实数e,它的值表示所能允许的误差 输出 一个实数,其值为求得的一个根,要求精确到小数点后8位.若该区间上没有根,则输出“No Solution” 样例输入 0 样例输出 2.00000000 提示 对于一个连续函数f(x),若f(a)*f(b) <= 0,则f(x)在区间[a

poj1905——二分法求单调函数零点解方程

poj1905——二分法求单调函数零点解方程 Expanding Rods Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 12773   Accepted: 3291 Description When a thin rod of length L is heated n degrees, it expands to a new length L'=(1+n*C)*L, where C is the coefficient

02:二分法求函数的零点

http://noi.openjudge.cn/ch0111/02/ 02:二分法求函数的零点 总时间限制:  1000ms 内存限制:  65536kB 描述 有函数: f(x) = x5 - 15 * x4+ 85 * x3- 225 * x2+ 274 * x - 121 已知 f(1.5) > 0 , f(2.4) < 0 且方程 f(x) = 0 在区间 [1.5,2.4] 有且只有一个根,请用二分法求出该根. 输入 无. 输出 该方程在区间[1.5,2.4]中的根.要求四舍五入到小