(2) 用函数xpoint (x1,x2)来求(x1,f(x1))和(x2,f(x2))的连线与x轴的交点x的坐标。 (3) 用函数root(x1,x2)来求(x1,x2)区间的那个实根。显然,执行root函数的过程中要用到xpoint函数,而执行xpoint函数的过程中要用到f函数。 根据以上算法,可以编写出下面的程序: #include <iostream> #include <iomanip> #include <cmath> using namespace std; double f(double); //函数声明 double xpoint(double, double); //函数声明 double root(double, double); //函数声明 int main( ) { double x1,x2,f1,f2,x; do {cout<<″input x1,x2:″; cin>>x1>>x2; f1=f(x1); f2=f(x2); } while(f1*f2>=0); x=root(x1,x2); cout<<setiosflags(ios∷fixed)<<setprecision(7); //指定输出7位小数 cout<<″A root of equation is ″<<x<<endl; return 0; } double f(double x) //定义f函数,以实现f(x) {double y; y=x*x*x-5*x*x+16*x-80; return y; } double xpoint(double x1, double x2) //定义xpoint函数,求出弦与x轴交点 {double y; y=(x1*f(x2)-x2*f(x1))/(f(x2)-f(x1)); //在xpoint函数中调用f函数 return y; } double root(double x1, double x2) //定义root函数,求近似根 {double x,y,y1; y1=f(x1); do {x=xpoint(x1,x2); //在root函数中调用xpoint函数 y=f(x); //在root函数中调用f函数 if (y*y1>0) {y1=y; x1=x; } else x2=x; }while(fabs(y)>=0.00001); return x; } 运行情况如下: input x1,x2:2.5 6.7↙ A root of equation is 5.0000000 对程序的说明: (1) 在定义函数时,函数名为f,xpoint和root的3个函数是互相独立的,并不互相从属。这3个函数均定为双精度型。 (2) 3个函数的定义均出现在main函数之后,因此在main函数的前面对这3个函数作声明。 习惯上把本程序中用到的所有函数集中放在最前面声明。 (3) 程序从main函数开始执行。函数的嵌套调用见图4.8。

评论