- 1、本文档共23页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
5.5 函数的嵌套调用和递归调用 5.5.2 函数的递归调用(嵌套调用的特例 ) 递归举例:求 n! 5.6 变量的作用域和存储类型 静态存储:变量存放在静态区,定义变量(程序编译)时就分配内存单元,直到程序结束。生存期为整个程序运行期。 注意: 复合语句 3. 全局变量 5.6.2 变量的存储类型 1、 自动类型— auto(C 默认的存储方式) 3、 静态类型— static 4、 外部类型(全局变量) — extern 外部变量的副作用 5.6.3 内部函数与外部函数 综合举例: 5.7 编译预处理 说明: 2、带参数的宏定义 5.7.2 文件包含 文件包含举例:求半径为r的园面积、园周长。 5.7.3 条件编译 举例:通过条件编译选择求最大值或最小值 ★ 思考题: * 合肥工业大学 WANGJINLING 第五章 函 数 5.5.1 函数的嵌套调用 C语言不允许函数嵌套定义(单一性、独立性)。但允许函数嵌套调用,即被调函数中又调用其它函数(见P133 例5.11 / P128 例5.18 ) 。 main 函数 ① 调用W1 函数 结 束 W1 函数 调用W2函数 W2 函数 ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ 两层嵌套的执行过程 概念:函数直接或间接地自我调用称为递归函数。 int fun1(int x) { … z=fun1(y); … } int fun1(int x) int fun2(int t) { { … … z=fun2(y); c=fun1(a); … … } } 直接引用自身 间接引用自身 递归在没有控制条件的情况下是无穷的递归。 void main(void) { printf(“*****\n”); main(); } 只有通过控制条件,使递归调用终止,才能应用。 void main(void) {char ch; printf(“*****\n”); ch=getchar(); if(ch!=‘9’)main(); } n!= 1 n=0或n=1 n(n-1)! n1 f(n)= 1 n=0或n=1 nf(n-1) n1 #include stdio.h long lfac(long); void main(void) { long i,x; scanf(“%ld”,i); x=lfac(i); printf(“\n%ld\n”,x); } long lfac(long n) { if (n==0||n==1) return 1; else return(n*lfac(n-1)); } lfac(4) 4*lfac(3) 3*lfac(2) 2*flac(1) 2*1 3*2*1 4*3*2*1 递推 回归 chap6ex7 = n×(n-1)×(n-2)× … × 3×2×1=n×(n-1)! 1.变量的生存期和作用域 变量生存期:变量在内存中占用内存单元的时间。 内存中供用户使用的存储空间: 程序区:存放程序代码。 数据区:存放数据,分为动态存储区、 静态存储区。 5.6.1 局部变量和全局变量 C语言中,定义变量应包含三个内容: ① 数据类型:变量占用内存空间的大小。如:int, float, char。 ② 作用域:变量在程序中的有效区域。 ③存储类型:变量在内存中的存储方式。存储方式不同,变量占用内存时间不同。存储类型确定了变量在时间上的生存期和空间上的作用域。 变量的作用域:变量在程序中的有效范围(可见性)。取决于定义变量的位置。可分为局部变量和全局变量。 2. 局部变量 定义在函数内部的变量。也称为内部变量。放在动态区中,只有调用它的函数才能使用它。调用时才分配内存单元,调用结束,内存即刻被释放, 作用域:仅限于函数内部或复合语句内。 生存期:函数调用期间。 动态存储:变量存放在动态区,使用时才分配内存单元,使用完毕,立即释放。生存期为函数调用期。 不同的函数或复合语句中可以使用相同的变量名。因为它们作用域不同,所以它们互不干预。即:同名,不同作用域的变量是不同的变量。 #includestdio.h void func()
文档评论(0)