函数的嵌套调用:
C++不允许对函数作嵌套定义,也就是说在一个函数中不能完整地包含另一个函数。
在一个程序中每一个函数的定义都是互相平行和独立的,如
void f1() {...}
int f2() {...}
float f3() {...}
long f4() {...}
虽然C++不能嵌套定义函数,但可以嵌套调用函数,也就是说,在调用一个函数的过程中,又调用另一个函数。
在程序中实现函数嵌套调用时,需要注意的是:在调用函数之前,需要对每一个被调用的函数作声明(除非定义在前,调用在后)。
解题思路:
根据题目的要求,可以定义一个函数max_4来实现从4个数中找出最大的数。前面已知,用max函数可以很方便地找出两个数中的大者。因此考虑能否通过调用max函数来实现从4个数中找出最大数呢?结论是可以的。先用 max(a,b)找出a和b中的大者,赋给变量m。再用max(m,c)函数求出a,b,c三者中的大者,再赋给m(因为m是a和b 中的大者,因此max(m,c)就是a,b,c三者中的大者),把它赋给m。再用max(m,d)求出a,b,c,d四者中的大者,它就是a,b,c,d4个数中的最大数。
在max_4函数中调用3次max函数,就求出4个数中的最大数。最后在主函数中输出结果。
编写程序:
运行结果:
程序分析:
在主函数中要调用max_4函数,因此在主函数的开头要对max_4函数作声明。在max_4函数中3次调用max函数(这是嵌套调用),因此在max_4函数的开头要对max函数作声明。由于在主函数中没有直接调用max函数,因此在主函数中不必对max函数作声明,只须在max_4函数中作声明即可。
max_4函数执行过程是这样的:第1次调用max函数得到的函数值是a和b中的大者,把它赋给变量m,第2次调用max(m,c)得到m和c的大者,也就是a,b,c中的最大数,再把它赋给变量m。第3次调用max(m,d)得到m和d的大者,也就是a,b,c,d中的最大数,再把它赋给变量m。这是一种递推方法,求出两个数的大者;再以此为基础求出3个数的大者;再以此为基础求出4个数的大者。m的值一次一次地变化,直到实现最终要求。
max函数的函数体可以只用一个return语句,返回一个条件表达式的值:
{retum(x>y? x: y);}
本例是一次嵌套调用,有些较复杂的问题可以用多层嵌套调用。