




已阅读5页,还剩49页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第7章函数 引例 求阶乘n inti n floatfac 1 printf n scanf d 引例 求任意3个正整数的阶乘的和a b c fa 1 for i 1 i a i fa fa i fb 1 for i 1 i b i fb fb i fc 1 for i 1 i c i fc fc i printf d d d 0f a b c fa fb fc 引例 求任意3个正整数的阶乘的和a b c include stdio h intmain floatfactorial intn inta b c floatsum printf a scanf d floatfactorial intn inti floatfac fac 1 for i 1 i n i fac fac i returnfac 引例 求任意3个正整数的阶乘的和a b c 使用函数可减少程序的重复段落使用函数可使程序功能相对独立 便于维护 模块化的程序设计 应用程序 源程序文件1 函数1 函数2 函数3 源程序文件2 函数1 函数2 C应用程序的构成 函数的概念 includeintmain intmax intx inty inta b c scanf d d intmax intx inty intz if x y z x elsez y returnz 程序必备的main函数 有返回值的函数 函数的概念 上述问题也可只用一个main函数实现intmain inta b c scanf d d 函数的概念 intmain voidstars stars printf Hello n stars printf Bye n stars return0 voidstars inti for i 1 i 8 i printf printf n 无返回值的函数 函数的概念 intmain voidstars intn intn 20 stars 10 printf Hello n stars 5 printf Bye n stars n return0 voidstars intn inti for i 1 i n i printf printf n 有参数 无返回值 函数的概念 intmain voidstars int char intn 20 stars 10 printf Hello n stars 5 printf Bye n stars n return0 voidstars intn charc inti for i 1 i n i printf c c printf n 两个参数 无返回值 函数的概念 functionn 官能 功能 作用 职责 典礼 仪式 数 函数vi 器官等 活动 运行 行使职责模块化程序设计的基本方法 分解程序的功能 使每个模块的功能相对简单而独立 通过调用函数 模块来实现整个功能 使程序的编写 调试思路清晰 实现工业化的生产方式 函数的分类 有返回值 有类型 函数的定义 指定函数名指定函数的类型指定参数名称和类型函数的功能 intmax intx inty intz if x y z x elsez y returnz 函数的返回值 类型与首部定义一致 函数首部 不是语句 行尾无分号 函数的定义 关于函数类型的说明 无返回值的函数类型为void 有返回值的函数 其类型根据返回值类型决定 省略类型时默认为int 建议不要省略 函数的调用 调用函数的准备工作 包含或声明 调用库函数应在C文件开头部分使用 include要调用其他自定义函数 应在本函数体开始的声明部分加上被调用函数的声明 与函数首部内容相同的一个语句 供编译时使用 如果被调用函数出现在本函数之前可省略此部分详见7 4节 函数的调用 函数 实参列表 调用无返回值的函数可以把上述函数直接作为语句使用 以完成其功能 例如 stars 10 函数的调用 函数 实参列表 调用有返回值的函数 应注意返回值的处理 如赋值或输出等 例如 c max a b 或printf d max a b 函数的参数 形式参数 形参 Formalparameter 定义函数时首部括号中定义的变量实际参数 实参 Actualparameter 调用函数时 在函数名后括号中使用的表达式调用函数时 实参将值传递给形参 函数的参数 形式参数和实际参数 voidmain intmax intx inty inta b c scanf d d intmax intx inty intz if x y z x elsez y returnz 函数的参数 形式参数和实际参数 形参在函数调用时分配内存单元 调用结束后释放 实参可以是常量 变量 表达式实参与形参的数目 类型应一致C语言中 实参向形参传递其值 值传递 不传递地址 形参值变化不影响实参 函数的返回值 通过函数体return语句中的表达式值获得 例如 intmax intx inty returnx y x y 无返回值的函数可省略return语句函数执行到return语句结束 关于例题和习题 通过本章例题 习题 不仅要掌握函数定义和调用的语法 也要掌握更多算法和编程技巧 正如学习语文 英语要大量阅读一样 学习计算机语言也要阅读例题 掌握一些基本的编程思路 技巧和表达 才可能对新的问题较快地找到解决方法 同时要多了解语法规则 相当于认字 另外 还应对计算机的工作原理和方式多一些了解 例 最大公约数函数和最小公倍数函数 求最大公约数的算法 从1开始 逐个找公约数 直至两数中较小的一个 辗转求余 循环结构实验指导有流程图 求最小公倍数的算法 从两数中较大的一个开始 由小到大找公倍数 直至找到 两数的乘积 两数的最大公约数 函数的嵌套调用 调用最小公倍数函数 两数乘积 两数的最大公约数 当中需要调用最大公倍数函数函数的嵌套调用 在一个被调用的函数中调用另一个函数例 P183例7 5 函数的递归调用 概念 在一个被调用的函数中直接或间接地调用函数本身 函数的递归调用 递归的另一个典型实例 汉诺塔 P 189例7 8 算法讲解 数组作为函数的参数 两个完全不同的概念以数组元素作为函数的参数 实参是数组元素 对应的形参是变量以数组名作为函数的参数 实参和形参都是数组名 数组元素作为函数的参数 数组元素作为实参 形参是普通变量 值传递 intmain inta 11 i floatfac intn for i 1 i 10 i a i i printf d 0f n a i fac a i return0 floatfac intn floatt 1 inti for i 1 i n i t t i returnt 等价于普通变量 数组作为函数的参数 以数组名作为函数的参数 实参向形参传递首元素地址 intmain intmax inta intn intx 6 i for i 0 i 5 i scanf d intmax inta intn intm i m a 0 for i 1 im m a i returnm 实参为数组名 形参为数组 不指定大小 数组作为函数的参数 以数组名作为函数的参数 注意事项 形参和实参都是数组名 类型要一致 形参中不指定数组大小 指定无实际作用 形参数组名获得实参首元素的地址 即形参第一个元素与实参第一个元素占用相同的地址 这就是 地址传递 方式 形参值改变会引起实参值的变化为了使形参获得实参数组的大小 元素个数 通常在形参和实参对应地增加一个数值型的参数 数组作为函数的参数 以数组名作为函数的参数 考虑 如何写一个排序函数 多个函数组成的程序中变量引用的一些规则 C应用程序的构成 应用程序 源程序文件1 函数1 函数2 函数3 源程序文件2 函数1 函数2 变量作用域 局部变量和全局变量 局部变量 只在一个函数内或只在一个复合语句内有效的变量 花括号内有效 全局变量 外部变量 在一个模块内多个函数中均有效扩展的外部变量 在多个程序文件的函数中有效 extern 变量作用域 局部变量和全局变量 局部变量 函数内定义 只在该函数有效 includeintmain inta b c floatfac intn floatt 0 returnt 主函数中不存在变量n和t fac函数中不存在变量a和b 变量作用域 局部变量和全局变量 局部变量 复合语句内定义 只在语句内有效 编译错误 变量k未定义 intmain inti for i 0 i 10 i intk k i 2 printf d n k printf d n i printf d n k 变量作用域 局部变量和全局变量 局部变量在函数内定义 只在该函数内有效在复合语句内定义 只在该语句内有效形式参数也是局部变量 只在函数内有效 变量作用域 局部变量和全局变量 全局变量 在函数外定义 在其后的多个函数中均有效 includeintA B C intmain intX Y floatf1 intn intf2 变量作用域 局部变量和全局变量 全局变量例 includeintA B C intmain intf1 intn voidf2 printf d n f1 3 printf main d n A A 88 f2 intf1 intn intm m n n A n n n returnm voidf2 printf f2 d n A 变量作用域 局部变量和全局变量 扩展的外部变量 在多个程序文件的函数中有效 见7 9 3节 在程序中可以调用其他文件中的函数 外部函数 可通过全局变量在函数间传递多个数据 变量作用域 局部变量和全局变量 判断下面程序的运行结果 includeinta b n intmain voidf1 intn a 18 b 100 n 20 printf main a d b d n d n a b n f1 50 voidf1 intn floata 13 89 printf f1 a f b d n d n a b n 变量作用域 局部变量和全局变量 关于全局变量应用的说明 全局变量命名时通常首字母大写通过使用全局变量 使函数能够传递实参 形参和返回值之外的其他数据滥用全局变量会造成系统资源占用 降低函数可移植性和程序的清晰度 P 202 203 在函数中定义了与外部变量 全局变量 同名的局部变量时 外部变量被屏蔽 变量的存储方式和生存期 动态存储 自动变量 形式参数 临时 动态地分配存储单元静态存储 全局变量 静态局部变量 程序运行整个过程中都存在 局部变量的存储方式和生存期 自动局部变量 auto 函数中定义的变量和形参 函数被调用时动态分配存储空间 调用结束时释放 默认方式 静态局部变量 static 函数中加static定义的变量 编译时赋初值 调用结束时保留存储空间和当前值 P 206 207说明 寄存器变量 register 保存在CPU中 现已少用 全局变量的存储方式和生存期 均为静态存储在同一文件定义点之前引用全局变量引用前使用extern声明引用另一文件中的全局变量引用前使用extern声明限制全局变量的作用域在本文件中定义时增加static声明 定义 与 声明 的区分 函数的 定义 和 声明 includeintmain intf1 int intf2 a f1 5 f2 intf1 intn intf2 函数声明 函数原型 确定要调用函数的名称 参数类型 函数调用 运行函数代码 变量的 定义 与 声明 includeintmain inta b c 定义性声明 建立存储空间 externX 非定义性声明 不建立存储空间 intX 定义性声明 建立存储空间 intf1 函数的作用域问题 内部函数和外部函数 内部函数 只能在本文件中被调用 加static定义外部函数 可供其他文件中的函数调用 加extern定义 或默认 在调用前加extern声明 亦可省略extern include命令的实质是统一地声
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年潍坊寒亭区(经济区)公开招聘中小学教师(11名)模拟试卷及答案详解(必刷)
- 2025江苏连云港市赣榆区教育局所属学校招聘新教师69人模拟试卷(含答案详解)
- 小学安全培训反思课件
- 2025年文化科技主题公园项目建议书
- 2025年福州市供电服务有限公司招聘65人模拟试卷及答案详解(易错题)
- 2025年氢氧化亚镍合作协议书
- 2025年金属制建筑装饰、散热器及其零件项目建议书
- 2025河南省水利厅厅属事业单位招聘47人模拟试卷完整答案详解
- 2025安徽芜湖市人才发展集团有限公司招聘2人考前自测高频考点模拟试题及参考答案详解1套
- 2025年光电子器件及激光器件项目建议书
- 烘焙类产品的特性及应用
- 第三章转录及转录调控
- 酿造车间绩效考核制度
- GB/T 7193-2008不饱和聚酯树脂试验方法
- GB/T 3810.3-2016陶瓷砖试验方法第3部分:吸水率、显气孔率、表观相对密度和容重的测定
- 部编本语文五年级上册第一单元教材解读
- 医院放疗科护理记录(模板)
- 应急管理行业解决方案及应用
- 7.4.2超几何分布 课件(共14张PPT)
- 高中地理 选必一 地质构造与地貌 PPT 课件
- 含硫化氢油气井井下作业推荐作法
评论
0/150
提交评论