第8章函数 8.5函数的嵌套调用 嵌套定义 ☆指在定义一个函数时,函数体内包含另一个函数的完整定义。 ◇C语言的函数定义是互相平行的、独立的,不能嵌套定义函数。 ■嵌套调用 指在调用一个函数的过程中又调用另一个函数 ☆C语言可以嵌套调用。 嵌套调用的执行过程 main函数a函数 b函数 调用a函数 调用b函数 结束
-16- 第8章 函数 8.5 函数的嵌套调用 嵌套定义 v 指在定义一个函数时,函数体内包含另一个函数的完整定义。 v C语言的函数定义是互相平行的、独立的,不能嵌套定义函数。 嵌套调用 v 指在调用一个函数的过程中又调用另一个函数。 v C语言可以嵌套调用。 嵌套调用的执行过程 main函数 a函数 b函数 调用a函数 调用b函数 结束
第8章函数 8.5函数的嵌套调用 例8.6:用弦截法求方程f(x)=x3-5x2+16x-80=0的根。 ◆算法分析 (x2,f(x2)) ■取两个不同的点x1和x2 使f(x1)和f(x2)异号。 1,f(x1 (x, f(x)) ■x点坐标为: (x)-x。X(x f( ■从而可得f(x)。 2x(x,) 若f(x)与f(x1)同号,则根必在(x,x2)区间内,将x作为新的x1 若f(x)与f(x2)同号,则根必在(x1,x)区间内,将x作为新的x2 重复步骤2和3),直到f(x)<106为止。即f(x)≈0。 17
-17- 第8章 函数 8.5 函数的嵌套调用 例8.6:用弦截法求方程f(x)=x3-5x2 +16x-80=0的根。 v 算法分析 取两个不同的点x1和x2, 使f(x1)和f(x2)异号。 x点坐标为: 从而可得f(x)。 若f(x)与f(x1)同号,则根必在(x,x2)区间内,将x作为新的x1。 若f(x)与f(x2)同号,则根必在(x1,x)区间内,将x作为新的x2。 重复步骤2)和3),直到|f(x)|<10-6为止。即f(x) ≈ 0。 x1 x x2 (x2,f(x2)) (x1,f(x1)) (x,f(x)) x y ( ) ( ) ( ) ( ) 2 1 1 2 2 1 f x f x x f x x f x x - × - × =
第8章函数 8.5函数的嵌套调用 E画出NS流程图(P169) ☆用函数f(x)求x的函数:x3-5x2+16x-80。 ◆用函数 xpoint(x1,x2)求x的坐标。 ◆用函数root(x1,x2)求(x1,x2)区间的实根 d inc ude <math. h> float xpointfloat x1, float x2) float f(float x) float y; float y; y=(x-5.0)*x+16.0) y=(x1*f(x2)-x2*f(x1)) x-80.0 /(f(x2)-f(x1)); return y: return y; 18
-18- 第8章 函数 8.5 函数的嵌套调用 画出N-S流程图(P169) v 用函数f(x)求x的函数: x3-5x2 +16x-80。 v 用函数xpoint(x1, x2)求x的坐标。 v 用函数root(x1, x2)求(x1, x2)区间的实根。 #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; }
第8章函数 8.5函数的嵌套调用 float root(float x1, float x2) float x,y, y1: 1=f(x1); do Expoint(x1, x2) y=f(x) if(y*y1>0) X1=x; else x2=x I whi le(fabs(y)>0. 0001) return x 19
-19- 第8章 函数 8.5 函数的嵌套调用 float root(float x1, float x2) { 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; }
第8章函数 8.5函数的嵌套调用 ma in 0 float x1. x2. f1. f2. x. pr intf("input x1, x2: \n") scant("%f,%",&x1,&x2); f1=f(x1) f2=f(x2); } while(f1*f2)>=0); xroot(x1, x2) pr intf( "a root of equation is %8 4f", x) 20
-20- 第8章 函数 8.5 函数的嵌套调用 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); }