问题及代码:
/*用弦截法求方程f(x)=x^3-5x^2+16x-80=0的根。*/
#include<stdio.h>
#include<math.h>
double f(double x);
double root(double x1,double x2);
double point(double x1,double x2);
int main ()
{
double x1,x2,f1,f2,x;
do
{
printf("输入两个数字x1,x2:");
scanf("%lf %lf",&x1,&x2);//这里为何要用lf,做题时因为用%f,导致程序算不出来
f1=f(x1);
f2=f(x2);
}
while(f1*f2>=0);//弦截法介绍,两个值为异号,则在(x1,x2)区间有根,即函数段与x轴有交点。
x=root(x1,x2); //x为在x轴上的交点的坐标值
printf("实根是%f\n",x);
return 0;
}
/*
功能:求(x1, x2)区间方程的实根
参数:两个浮点型值,表示x轴上两点,由主调函数保证f(x1)和f(x2)是异号
返回值:方程的根
*/
double root (double x1,double x2)
{
double x,y,y1;
y1=f(x1);//这步的目的是什么,为了后续的判断吗?
do
{
x=point(x1,x2);//x为在(x1,x2)区间的x轴坐标值
y=f(x);
if(y*y1>0) //这个判断有什么根据?
{
y1=y;
x1=x;
}
els