下面是一个用二分法求函数在一个范围内的零值的程序:
#include<iostream>
#include<stdio.h>
#include<math.h>
#define EPS 0.00000001
#define TOL 0.000001
using namespace std;
class F
{
public:
double xa,xb; //xa,xb两个数
public:
void GetData();
double Fx(double x);
//void OffSetFx(double xc);
};
void F::GetData()
{
int i=0;
double xc=0.0;
do
{
cout << "请输入一个范围xa 、xb:" ;
//i++;
cin >> xa >> xb; //输入xa xb的值
//cout<<i<<endl;
//cout <<"xa = "<< xa << " xb = "<<xb << endl;
//cout << "fx(xa)= "<< F::Fx(xa) << " fx(xb)="<< F::Fx(xb)<<endl;
}
while(Fx(xa)*Fx(xb)>0 ); //判断输入范围内是否包含函数值0
//int i=0;
if(fabs(Fx(xa))<TOL || fabs(Fx(xb))<TOL)
{
if(fabs(Fx(xa))<TOL)
{
cout << "函数fx(x)=0时,x的取值为:" << xa <<endl;
}
else
{
cout << "函数fx(x)=0时,x的取值为:" << xb <<endl;
}
}
else
{
do
{
// cout<<xc<<endl;
if((Fx(xc=(xa+xb)/2.0)*Fx(xb))<=0) //二分法判断函数值包含0的x取值区间
{
xa=xc;
}
else
{
xb=xc;
}
i++;
cout << "i= " << i << endl;
cout <<"xc1=" << xc <<endl;
cout<<"fx(xc)=" << Fx(xc)<<endl;
cout <<"xa=" << xa <<endl;
cout <<"xb=" << xb <<endl;
cout << "xb-xa=" << xb-xa << endl;
cout << endl;
}
while(fabs(xb-xa)>EPS && fabs(Fx(xc))>TOL ); //判断xb-xa的值否在规定范围内
if(fabs(Fx(xc))<TOL)
{
cout << "函数fx(x)=0时,x的取值为:" << xc << endl;
}
else
{
cout << "此范围内函数无零值!" << endl;
}
}
}
double F::Fx(double x)
{
return(tan(x));
}
int main()
{
F f;
f.GetData();
return 0;
}
请问各位有什么方法,可以将里面的tan(x),像xa,xb一样在命令的界面手动的输进去吗?这样就可以达到任何函数都可以来用它来求零值。(听说好像是要用到函数指针,在这方面我不太懂,还请各位高人帮帮忙呀!在此先谢过了!)