一、问题
C语⾔中不允许进⾏嵌套的函数定义,因此各函数之间是平⾏的,不存在上⼀级函数和下⼀级函数的问题。但是C语⾔允许在⼀个函数的定义中出现对另⼀个函数的调⽤,这就是函数嵌套调⽤。那么如何嵌套调⽤呢?
二、解答
函数的嵌套调⽤,即在被调函数中又调⽤其他函数。
下⾯通过⼀个分数相加的例⼦来介绍如何进⾏函数的城套调⽤。本例要实现的是,在程序运⾏时,输⼊4个数。前两个数分别是⼀个分数的分⼦和分母,后两个数也是⼀个分数的分⼦和分母。按 Enter 键以后,将这两个分数相加的计算结果显示出来。
代码如下:
#include <stdio.h>
int gys(int x, int y)
{return y ? gys(y, x % y) : x;
}
int gbs(int x, int y)
{return x / gys(x, y) * y;
}
void yuefen(int fz, int fm)
{int s = gys(fz, fm);fz /= s;fm /= s;printf("the result is %d/%d\n", fz, fm);
}
void add(int a, int b, int c, int d)
{int u1, u2, v, fz1, fm1;v = gbs(b, d);u1 = v / b * a;u2 = v / d * c;fz1 = u1 + u2;fm1 = v;yuefen(fz1, fm1);
}
int main()
{int a, b, c, d;scanf("%d,%d,%d,%d", &a, &b, &c, &d);add(a, b, c, d);
}
程序运⾏结果如下所示:
1,3,2,4
the result is 5/6
下⾯分析⼀下函数嵌套调⽤执⾏的过程:
- 在执⾏ main( ) 函数的过程中,当遇到调⽤ add( ) 函数的操作语句时,流程转向 add( ) 函数;
- 在执⾏ add( ) 函数时,当遇到调⽤ gbs( ) 函数的操作语句时,流程转向 gbs( ) 函数;
- 在执⾏ gbs( ) 函数时, 当遇到调⽤ gys( ) 函数的操作语句时,流程转向 gys 函数;
- 当完成 gys( ) 函数的全部操作后 返回到 gbs( ) 中;
- 当完成 gbs( ) 剩下的全部操作后,返回到 add( ) 中执⾏剩余部分;直到 add( ) 函数结束,再返回到 main( ) 函数。
三、总结
通过函数的嵌套调⽤,可以把⼀个复杂问题分解成多个简单的问题进⾏处理。