求教一下我用visual c++ 2005编的这个c程序!

来源:百度知道 编辑:UC知道 时间:2024/05/07 18:08:34
在区间[0,1]上用二分法求方程e^x+10x-2=0的近似根,要求误差不超过0.5*10^-3。
#include<stdio.h>
#include<math.h>
#include<conio.h>
void main()
{
//二分法求根
float a=1,b=2;
float x0=(a+b)/2,x,c=exp(a)+10*a-2,d=exp(x0)+10*x0-2;
printf("求在区间上[0,1]上的方程e^x+10x-2=0的近似根");
do
{
x0=(a+b)/2;
if(c*d<0)
{a=a;b=x0;}
else
{a=x0;b=b;}
x=x0;
}
while(x-x0>0.5e-3);
printf("根是%f",x);
_getch();
}
运行结果为1.500000,很明显,结果不正确,程序如何改一下就对了,求教!

#include<stdio.h>
#include<math.h>
#include<conio.h>

void main()
{
//二分法求根 ,计算问题最好用 double,精度高一点
double a=0,b=1,mid,y; //求[0,1]区间的根,注意x取0时函数值为负,x取1时函数值为正

printf("求在区间上[0,1]上的方程e^x+10x-2=0的近似根");

do
{
mid=(a+b)*0.5; //取中点
y=exp(mid)+10*mid-2; //求中点的值

if(y<0) a=mid; //说明根在[mid,b]之间

else if(y>0) b=mid; //根在[a,mid]之间
else a=b=mid; //找到根,但这样的概率很小
}
while(b-a>0.5e-3);

printf("根是%f",(a+b)/2);
_getch();
}

程序结束的判断相当重要,要看最后一次二分的时候数的变化小于
0.5E-3,不是像你那样判断,因为你根本就不知道准确答案是多少.
我给你写了一个程序,你自己看吧!注意判断结束的方法
#include<stdio.h>
#include<math.h>

int main()
{
float test = 2,x = 1;
printf("求在区间上[0,1]上的方程e^x+10x-2=0的近似根");
do
{
test = test / 2;
if(exp(x)+10*x-2>0)