关于函数指针的C++题目,请高手指点

来源:百度知道 编辑:UC知道 时间:2024/06/05 00:53:25
实现二分法求解方程。编写以下函数求方程 f(x)=0的解:
double RolveRoot(double (*pf)(double x), double a, double b, int n);
其中pf是一个函数指针(指向f(x)),RolveRoot(),用来获得f(x)=0在区间[a,b]内的解,f(x)的形式如 f(x)=x*x-3x+6等。a,b指定了方程 f(x)=0解存在的区间。n是迭代次数,次数越多,精度越高。
二分法的步骤:
 计算 f(a) f(b) f((a+b)/2)
 若f(a)与f((a+b)/2)异号,则在[a,(a+b)/2]区间内有解,令
b = (a+b)/2, 回到第一步继续迭代,直到到达足够精度
 否则,令a = (a+b)/2, 回到第一步继续迭代,直到到达足够精 度
实现RolveRoot(),并采用不同 f(x) 验证。

double RolveRoot(double (*pf)(double x), double a, double b, int n){
if(n)
if(a*pf((a+b)/2)<0)
return RolveRoot(pf,a,(a+b)/2,--n);
else
return RolveRoot(pf,(a+b)/2,b,--n);
else return (a+b)/2;

}

在主函数中可以对其精度进行检测:
main(){
...............
n=0
do{
n++;
t=RolveRoot(pf,a,b,--n)-RolveRoot(pf,a,b,--n);
if(t<0)t=t*-1;
}while(t>0.000001)
.........此处得到的n值就是我们所需要精度的