关于函数的问题。
问题描述
给定一个连续实函数f(x)和一个区间[a, b],已知f(a)*f(b)<0。由微积分的知识可知,在[a, b]上至少存在一个点c,使得f(c)=0,即f(x)在[a, b]区间上至少有一个根。请求出这个根。
这是一个补充程序的试题,你要完成一个函数
double getRoot(double (*f)(double), double a, double b)
并将f(x)=0的在[a, b]区间上的一个根返回,考虑到实数的误差,你只要使得f(x)的绝对值小于10-6(1e-6)即可。
其中,第一个参数是一个函数指针,所表示的函数将在测试的时候给出,你可以把它看成是如下的函数:
double f(double x)
并可以直接调用f(x)来得到这个函数在参数为x时的值。
算法描述
由于f(x)在[a, b]上连续且f(a)*f(b)<0,所以可以任取[a, b]区间上的一个点p,若f(p)为0(或者绝对值小于10-6),则p为方程的根,否则f(p)一定与f(a)同号(同正负)或与f(b)同号,如果f(p)与f(a)同号,则在[p, b]上存在一个根,否则在[a, p]上存在一个根。
通过上面的一步,可以将根的范围从[a, b]缩小为[a, p]或[p, b],重复这种方法可以不断缩小根的范围,直到找到根。
一般情况下,我们取p=(a+b)/2,即每次使用区间的中点进行判断,这种求根的方法叫做二分法。
--------------------------------------------------------------------------------
这是一道完善程序的试题,你只需要在下面程序标注的"@你的代码"的位置补充适当的语句或语句段使程序能正确运行即可,在提交的时候,你要提交的内容只包括补充的内容,不包括其他的代码。
1.#include <cstdlib>
2.#include <cstdio>
3.#include <cmath>
4.
5.using namespace std;
6.
7.double getRoot(double (*f)(double), double a, double b)
8.{
9.@你的代码
10.}
请问这个double getRoot中double(*f)(double)应该怎么用?