程序的设计基础第05章.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
程序的设计基础第05章

第 5 章 函数 函数(I) 函数 模块化。C++的基本程序单位。 所有在函数体中说明的变量都是局部变量 仅在定义的函数中有效 参数 函数间传递信息 局部变量 函数(II) 优点 分而治之 有利于程序开发 避免代码重复,软件重用 重用已有的函数来构造新的程序 抽象-隐蔽内部的细节 函数定义 函数原型 函数名 参数类型: 函数的各形式参数类型,所带参数名被忽略 可定义默认参数(不能重复定义) 返回值类型:函数返回值的数据类型 (省缺是 int) 原型仅在函数先调用后定义或调用和定义不在同一个文件时使用 函数调用:传值和传引用(I) 调用函数时一般要传递参数 传值 把实在参数的值传递给函数的形式参数 函数的执行对实在参数没有影响 函数不需要修改实在参数时,用传值方式 避免意外改变 函数调用:传值和传引用(II) 传引用 把实在参数的地址传递给函数的形式参数 函数的执行可以改变实在参数 函数确实需要修改实在参数时,用传引用方式 要求实在参数有“左值性质” 变量的存储类别和作用域(1) auto,register,extern,static 存储期:在内存中的存在期 作用域:在程序中可以引用该变量的区域 连接:变量在多个源文件中能够被识别 “最近嵌套原则”(如何处理同名变量) 变量的存储类别和作用域(2) 自动存储 在定义的块中建立、存在和撤销 auto: 局部变量(包括形式参数)的省缺说明符 auto double x, y; register: 为变量分配高速寄存器 只能用于auto变量 register int counter = 1; 变量的存储类别和作用域(3) 静态存储 变量在整个程序运行期间都存在 省缺值为0 static: 可以用于函数中的局部变量 函数运行结束,变量的值依然存在 只能在定义变量的函数中访问该变量 static还可用于全局变量和函数头的定义 extern: 全局变量和函数性质的省缺定义 在所有的函数中都能访问 变量的存储类别和作用域(4) 文件作用域 函数作用域 块作用域 函数原型作用域 变量的存储类别和作用域(5) 文件作用域 在函数外面定义的标识符,能够被从标识符说明到文件结束之间的所有函数引用 全局变量、函数定义、函数原型 变量的存储类别和作用域(6) 函数作用域 只能在函数体中引用 标号是唯一具有函数作用域的标识符 变量的存储类别和作用域(7) 块作用域 在程序块中声明的标识符具有块作用域 块作用域开始于声明处,结束于程序块的右花括号(有例外) 函数的形式参数、函数的局部变量、在复合语句中声明的变量具有块作用域 如果外层块和内层块有相同名字的变量,外层说明会被内层说明屏蔽(最近嵌套原则) 注意:for、while等语句中声明的变量 变量的存储类别和作用域(8) 示例: 变量的存储类别和作用域(9) 函数原型作用域 函数原型参数表中的参数名标识符具有函数原型作用域 函数原型中的参数名可以省略,也可以在程序的其它地方再次定义 递归 递归函数 函数直接或间接调用自己 通过解决简单的问题,达到解决整个问题的目的 递归应用示例 有5人坐在一起,问第5个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第3个人,他说比第2个人大2岁。问第2个人,说比第1个人大2岁。最后问第1个人,他说是10岁。请问第5个人多大? 解题思路 age(5)=age(4)+2 age(4)=age(3)+2 age(3)=age(2)+2 age(2)=age(1)+2 age(1)=10 求解过程 程序实现 函数调用过程 递归算法的基本思想 将一个问题向下分解为具有同样的解决方法但规模不断缩小的子问题,不断分解,直到分解出的子问题有一个已知的解。 例子:求Fibonacci 数列(1) Fibonacci 数列: 0, 1, 1, 2, 3, 5, 8... 每个元素是前面两个元素的和 fib(n) = fib(n-1) + fib(n-2) long fibonacci(long n) { if (n==0 || n==1) /*base case*/ return n; else return fibonacci(n-1) + fibonacci(n-2); } 例子:求Fibonacci 数列(2) 递归与迭代 重复 迭代:明显的循环 递归:反复的函数调用 终止 迭代: 循环条件不满足 递归: 执行到递归基础 二者都有可能导致无限循环 权衡 执行效率与软件结构,适用性 Hanoi塔问题 Hano

文档评论(0)

erterye + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档