呵呵,问一个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流程图,及分别用的几个函数。但我看得好模糊,没有丝毫头绪。请问看书都这样,怎么学习进行下去。 展开
#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流程图,及分别用的几个函数。但我看得好模糊,没有丝毫头绪。请问看书都这样,怎么学习进行下去。 展开
3个回答
展开全部
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 就是最终的方程的解
最后说一句,这个是个一元三次方程,有三个解,但这个只能求出一个解
然后执行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 就是最终的方程的解
最后说一句,这个是个一元三次方程,有三个解,但这个只能求出一个解
展开全部
你首先要了解什么是弦截法,说白了就是一个逐渐逼近求近似解的过程,当满足一定精度后,就得出近似解,学C语言,要多读好程序,多写程序。十万行代码后,你就是高手了!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你这就是在main里调用root啊 只要参数传递正确就可以了啊
看看传值还是传地址的区别
看看传值还是传地址的区别
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询