- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第5章 函数和C程序结构
函数的嵌套调用和递归调用 递归函数设计基础 例5-14 求菲波拉契数列。已知一对小兔出生一个月后变成一对成兔,两个月后这对成兔就会生出一对小兔,三个月后这对成兔将生出第二对小兔,而第一对小兔又长大变成一对成兔,即一月成熟,二月生育,如此类推。请用计算机求解一对小兔经n月后将繁衍成多少对兔子? 例5-15 编程序用递归方法求两个正整数的最大公约数。 函数的嵌套调用和递归调用 递归函数设计基础 例5-16 汉诺塔问题。 有A、B、C三根杆,最左边杆上自下而上、由大到小顺序串有64个金盘呈一塔形。现要把左边杆上的金盘全部移到右边杆上,条件是一次只能移动一个盘,且不允许大盘压在小盘的上面。 A B C 3 2 1 1 2 1 解题思想: ①把n-1个盘子设法借助b杆放到c杆,记做hanoi(n-1,A,C,B) 3 ②把第n个盘子从a杆移动到b杆 D1: A→B D2: A→C D1: B→C D3: A→B ③把c杆上的n-1个盘子借助a杆移动到b杆,记做hanoi(n-1,C,B,A) D1: C→A 1 D2: C→B 2 D1: A→B 1 算法:Hanoi(n,A,B,C) 算法开始 If(n=1) then 金盘A→B盘;/* 如果盘数n=1即只有一个圆盘 */ Else Hanoi(n-1,A,C,B) /* 先把A顶上的n-1个圆盘借助于B移到C*/ 金盘A→B盘; /*把A剩下的最大的圆盘一次移到B*/ Hanoi(n-1,C,B,A) /*同样把C中的n-1个圆盘借助于A移到B */ 算法结束 [特别提示] 通过计算可以得出,64个盘的移动次数为: 264-1=18,466,744,073,709,511,615次。 函数与C程序结构 模块化基本概念 函数的定义和调用 函数的嵌套调用和递归调用 变量的作用域和生存期 编译预处理基础 变量的作用域和生存期 变量的作用域和生存期问题 函数将一个C程序划分为若干个相对独立的区域。对于在不同的区域范畴之内声明或定义的变量必须要考虑以下几个方面的问题: 变量的作用范围如何确定; 变量的存在期间如何确定; 如何使用同一程序的其它源程序文件中定义的变量; 如何限制某一源程序文件中定义的变量在同一C程序的其它源程序文件中的使用; C语言中变量定义的完整形式 [存储类别符] 数据类型符 变量表; 变量的作用域和生存期 变量的作用域 变量按作用域的分类 全局变量 局部变量 全局变量 全局变量是指定义在所有函数外面的变量; 定义形式 [extern] 数据类型符 变量表; 作用范围从其定义处开始到其所处的源程序文件结束为止 全局变量没有显式初始化,编译系统会自动将其初始化为0(若是字符类数据则初始化为’\0’); extern类型符是全局变量默认的存储类型,定义时可省略; 例5-17 全局变量的作用域示例。 变量的作用域和生存期 变量的作用域 局部变量 定义局部变量的地方 函数形式参数表 局部变量的作用域被限定在它们所定义的范围之内; auto是局部变量默认存储类型,变量定义时可省略; 局部变量的建立和撤消都是系统自动进行的; 没有显式初始化的局部变量具有随机的初始值; 关于局部变量的两个重要结论 同一组局部变量的值在函数的任意两次调用之间不会保留; 例5-18 局部变量在函数调用时的特征示例。 定义在不同局部范围内的局部变量之间毫无关系; 例5-19 编制程序按要求输出字符图形(每行5个星号,共输出5行)。 函数体内部 复合语句内部 变量的作用域和生存期 变量的作用域 全局变量和局部变量作用域重叠现象 在作用域问题上,有可能出现作用域重叠的情况。即在某些特定的情况下,可能会出现全局变量、在函数内部定义的局部变量乃至于在复合语句中定义的局部变量名字相同的现象,这样在程序中的某些区域内势必会出现若干个同名变量都起作用的情形。 int x; void main() { x++; … } void f1() { int x=1; { int x=2; x++; } x++; } void f2() { x++; … } 全局变量x的作用域 函数内部定义的局部变量x的作用域 复合语句内部定义的局部变量x的作用域 变量的作用域和生存期 变量的作用域 作用域重叠区域内使用变量的原则 int x; void main() { x++; … } void f1() { int x=1; { int x=2; x++; } x++; } void
文档评论(0)