当前位置: 首页 > news >正文

【时时三省】(C语言基础)函数的嵌套调用

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省

C语言的函数定义是互相平行、独立的,也就是说,在定义函数时,一个函数内不能再定义另一个函数,即不能嵌套定义,但可以嵌套调用函数,即在调用一个函数的过程中,又调用另一个函数,

其执行过程是:

①执行main函数的开头部分;

②遇函数调用语句,调用函数a,流程转去a函数;

③执行a函数的开头部分;

④遇函数调用语句,调用函数b,流程转去函数b;

⑤执行b函数,如果再无其他嵌套的函数,则完成b函数的全部操作;

⑥返回到a函数中调用b函数的位置;

⑦继续执行a函数中尚未执行的部分,直到a函数结束;

⑧返回main函数中调用a函数的位置;

⑨继续执行main函数的剩余部分直到结束。

例题

输入4个整数,找出其中最大的数。用函数的嵌套调用来处理。

解题思路:

这个问题并不复杂,完全可以只用一个主函数就可以得到结果。现在根据题目的要求,用函数的嵌套调用来处理。在main函数中调用max4函数,max4函数的作用是找出4个数中的最大者。在max4函数中再调用另一个函数max2。max2函数用来找出两个数中的大者。在max4中通过多次调用max2函数,可以找出4个数中的大者,然后把它作为函数值返回main函数,在main函数中输出结果。以此例来说明函数的嵌套调用的用法。

编写程序:

运行结果: 

程序分析: 

可以清楚地看到,在主函数中要调用max4函数,因此在主函数的开头要对max4函数作声明。在max4函数中3次调用max2函数,因此在max4函数的开头要对max2函数作声明。由于在主函数中没有直接调用max2函数,因此在主函数中不必对max2函数作声明,只须在max4函数中作声明即可。

max4函数执行过程是这样的:第1次调用max2函数得到的函数值是a和b中的大者,把它赋给变量m,第2次调用max2得到m和c中的大者,也就是a,b,c中的最大者,再把它赋给变量m。第3次调用max2得到m和d中的大者,也就是a,b .c,d中的最大者,再把它赋给变量m。这是一种递推方法,先求出2个数的大者;再以此为基础求出3个数的大者;再以此为基础求出4个数的大者。m的值一次一次地变化,直到实现最终要求。

程序改进:

( 1 )可以将max2函数的函数体改为只用一个return语句,返回一个条件表达式的值:

int max2 ( int a , int b ) / /定义max2函数

{ return ( a > = b ? a : b );} / /返回条件表达式的值,即a和b中的大者

( 2 )在max4函数中,3个调用max2的语句(如m = max2 ( a,b );)可以用以下一行代替:

m = max2 ( max2 ( max2 ( a,b ),c ),d );/ /把函数调用作为函数参数

甚至可以取消变量m,max4函数可写成

int max4 ( int a , int b , int c , int d )

{ int max2 ( int a , int b );/ /对max2的函数声明

return max2 ( max2 ( inax2 ( a , b ),c ),d );

}

先调用“max2 ( a,b )”,得到a和b中的大者。再调用“max2 ( max2 ( a,b ),c )”(其中max2 ( a , b )为已知),得到a,b,c三者中的大者。

最后由“max2 ( max2 ( max2 ( a , b ),c ),d )”求得a , b , c , d四者中的大者。

相关文章:

  • python学习day28
  • Linux 系统常用核心库----用户态程序运行的基石
  • 广东省省考备考(第二十天5.25)—言语:逻辑填空(听课后强化训练)
  • 前端常见的安全问题
  • java高级 -Junit单元测试
  • 用VMWare架飞牛nas 启用Intel千兆网卡
  • 基于点标注的弱监督目标检测方法研究
  • Linux Kernel调试:强大的printk(一)
  • 程序代码模块化设计的架构方法论
  • 《仿盒马》app开发技术分享-- 定位获取(端云一体)
  • LangChain02-Agent与Memory模块
  • React整合【ECharts】教程003:关系图的构建和基本设置
  • 在langchain4j中 UserMessage注解和SystemMessage两个注解的区别
  • MyBatis-Plus整合SpringBoot及使用
  • 将 Shp 导入 PostGIS 空间数据的五种方式(全)
  • 数据集全解析:从基础概念到实践应用的完整指南
  • 消息队列kafka的基础概念和部署
  • Lambda表达式的方法引用详解
  • PCB 通孔是电容性的,但不一定是电容器
  • GO 语言进阶之 Template 模板使用
  • 网站多语言建设方案/哪里做网络推广好
  • 做陶瓷公司网站/百度手机快速排名点击软件
  • 多个网站一个域名/吉安seo
  • 个人网站设计 优帮云/seo 是什么
  • 正能量网站ip/新乡搜索引擎优化
  • 沈阳建委网站/seo排名课程咨询电话