呵呵,问一个c语言里函数的嵌套调用的问题。讲得详细好懂答对了奖二十分。

用弦截法求方程x^3-5x^2+16x-80=0的根。#include<math.h>floatf(floatx){floaty;y=((x-5.0)*x+16.0)*x... 用弦截法求方程x^3-5x^2+16x-80=0的根。
#include<math.h>
float f(float x)
{
float y;
y=((x-5.0)*x+16.0)*x-80.0;
return(y);
}
float xpoint(float x1,float x2)
{
float y;
y=(x1*f(x2)-x2*f(x1))/(f(x2)-f(x1));
return(y);
}
float root(float x1,float x2)
{
int i;
float x,y,y1;
y1=f(x1);
do
{
x=xpoint(x1,x2);
y=f(x);
if (y*y1>0)
{y1=y;
x1=x;}
else
x2=x;
}while(fabs(y)>=0.0001);
return(x);
}
main( )
{
float x1,x2,f1,f2,x;
do
{
printf(“input x1,x2:\n");
scanf("%f,%f",&x1,&x2);
f1=f(x1);
f2=f(x2);
}while(f1*f2>=0);
x=root(x1,x2);
printf("A root of equation is%8.4f”,x);
}

这是谭浩强书上的题,书上已经讲了算法,N-S流程图,及分别用的几个函数。但我看得好模糊,没有丝毫头绪。请问看书都这样,怎么学习进行下去。
展开
 我来答
terranlong
2011-11-25 · TA获得超过7294个赞
知道大有可为答主
回答量:2660
采纳率:0%
帮助的人:3998万
展开全部
f() 函数返回的就是方程左边的值,在主函数里面,如果 f(x1) 和 f(x2) 异号就停止输入x1和x2
然后执行root函数,root() 函数里面调用的是类似二分法那样吧,不过它不是用(x1+x2)/2来作为下一个试验的值,而是用(x1*f(x2)-x2*f(x1))/(f(x2)-f(x1))这个公式,忘记叫什么公式了,也可以用这个方法,xpoint() 函数就实现了这个功能。在root 函数里面,y保存的是误差,while(fabs(y)>=0.0001);
这句就是表示如果误差小于0.0001就跳出循环,得到结果x。
因此 x 就是最终的方程的解

最后说一句,这个是个一元三次方程,有三个解,但这个只能求出一个解
百度网友6f59716
2011-11-24
知道答主
回答量:4
采纳率:0%
帮助的人:6639
展开全部
你首先要了解什么是弦截法,说白了就是一个逐渐逼近求近似解的过程,当满足一定精度后,就得出近似解,学C语言,要多读好程序,多写程序。十万行代码后,你就是高手了!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhang_475815
2011-11-25 · TA获得超过225个赞
知道小有建树答主
回答量:333
采纳率:0%
帮助的人:184万
展开全部
你这就是在main里调用root啊 只要参数传递正确就可以了啊
看看传值还是传地址的区别
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式