| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 362 人关注过本帖
标题:关于函数的问题。
只看楼主 加入收藏
suoyita
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2013-11-3
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:1 
关于函数的问题。

问题描述

  给定一个连续实函数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)应该怎么用?
搜索更多相关主题的帖子: double 绝对值 
2013-11-03 09:52
rchunjiang
Rank: 4
来 自:大连
等 级:业余侠客
帖 子:42
专家分:262
注 册:2013-10-25
收藏
得分:20 
题目已经说明:
其中,第一个参数是一个函数指针,所表示的函数将在测试的时候给出,你可以把它看成是如下的函数:
   double f(double x)
并可以直接调用f(x)来得到这个函数在参数为x时的值。
比如在你的程序中你可以写
double m,p=2.43;
m=f(p)
或者写
double m=f(2.34);
表示计算函数在2.34处的函数值并放到m中。

2013-11-03 13:02
快速回复:关于函数的问题。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013939 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved