某IT外企面试题-二分法求方程

进修社 人气:2.22W

//f(x)=RMAX-R+(R-r)*double (cos(0.5*x))+double (sqrt(r*r-(R-r)*(R-r)* sin(0.500*x)* sin(0.500*x)))

某IT外企面试题-二分法求方程

请用二分法或其他方法求出解x.要求精度esp=1e-5

其中RMAX,R,r从键盘输入。

#include

#include

void get(double RMAX,double R,double r,double x,double y)

{

double m,n,c,p;

double esp=1e-5;

do

{

m=RMAX-R+(R-r)*double (cos(0.5*x))+double (sqrt(r*r-(R-r)*(R-r)* sin(0.500*x)* sin(0.500*x)));

n=RMAX-R+(R-r)*double (cos(0.500*y))+double (sqrt(r*r-(R-r)*(R-r)* sin(0.500*y)*sin(0.500*y)));

c=0.500*(x+y);

p=RMAX-R+(R-r)*double (cos(0.500*c))+double (sqrt(r*r-(R-r)*(R-r)* sin(0.500*c)*sin(0.500*c)));

if(fabs(p)

break;

else if(m*p<0)

{

x=x;

y=c;

}

else if (m*p>0)

{

y=y;

x=c;

}

}while(fabs(y-x)

cout<<”The value of angle:tt”<<(x+y)*0.5<

cout<<<” ”<<<” ”<<

}

void main()

{

double RMAX,R,r,x,y;

cout<<”input RMAX,R,r,x,y:”<

cin>>RMAX;

cin>>R;

cin>>r;

cin>>x;

cin>>y;

get(RMAX,R,r,x,y);

}