- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
B e n e t */31 BENET 4.0 B e n e t */31 BENET 4.0 BENET 4.0 B e n e t */31 BENET 4.0 */35 B e n e t */31 BENET 4.0 */35 第十二章:函数的变量和调用 —— 理论部分 函数的递归调用和嵌套调用 生存期和作用域的概念 全局变量和局部变量 本章目标 C语言规定函数体内不能再定义函数 在函数体内调用其他函数,就是嵌套调用 嵌套调用 int func1() { …… } int func2() { func1(); } 函数体fun2内调用了func1 递归调用的两个函数,形参要一致 递归调用就是函数调用本身 递归调用可以代替在函数体内的循环体 但是递归调用效率低,一般都是尽量避免 递归调用 int fun1() { …… fun1(); } 计算数列1到n的和 可以将这个序列记为f(n)=1+2+3+……+n f(x)的值具有以下特点: 递归调用示例 f(n)=f(n-1)+n 当x大于1时,f(x)=f(x-1)+1 其中,f(x-1)递归进行 教员演示操作过程 示例代码 int func_sum(const int n) { if(n==0) { return 0; } else { return n+func_sum(n-1); } } 递归调用自身 十进制转换成二进制 假定有一个输入数,其二进制形式一共有N位。 若要输出第N位,就必须输出N+1位。 递归调用示例2 输出的二进制形式(x) { 如果x的二进制多于一位 输出二进制形式(x/2) 对2求余 否则:输出x } 示例代码 void dec_bin(const int x) { if(x/20) { dec_bin(x/2); printf(“%d”,x%2); } else printf(“%d”,x); } 教员演示操作过程 生存周期是指函数形参被调用的时期 调用函数?给形参内存 变量的生存期 函数func1() 包含形参变量a 函数func1() 包含形参变量a 调用func1 调用func2 变量a的生存期 变量B的生存期 一个函数模块内的变量只作用一个模块 变量的作用域 int glob=0; int function1(int expr1) { int expr1; } int function2(int expr1) { int expr1; } 在函数模块外的变量,可以被两个函数使用 在函数模块内的变量,只能被当前函数使用 演示变量的作用域 int num2=23; int main(void) { int i=0; for(i=0;i30;i++) { int k=0; k+=i; } } 变量num2的作用域 变量i的作用域 变量k的作用域 教员演示操作过程 变量重名的问题 int main(void) { float name = 12.00000; float name = 11.00000; } 声明两个同名变量导致编译错误 float name = 12.00000; float Name = 11.00000; C程序区分大小写 正确方案 相同模块下的变量,即同一作用域下的变量,不允许同名 下级模块的变量不能和上级模块的变量同名 不同作用域的变量允许同名,但最好不要同名 变量重名的问题 可以被所有模块,包括函数,if模块,循环模块使用的变量就是全局变量 全局变量必须初始化,否则编译器会将其值清0 全局变量的生存期长,会一直占用着内存 全局变量不利于模块化编程,所以尽量少用或不用 全局变量 内存存储区 栈:先进后出的存储方式 存储函数形参,局部变量,自加语句产生的临时变量 堆 用malloc函数申请的空间(本课程不作要求) 静态区 存储全局变量,占用整个生存周期 常量区 存储const变量 变量的存储类别 S2将带领大家走向计算机内存操作 指针 堆管理 位运算 结构体 共用体 S2预习准备 * B e n e t */31 BENET 4.0 B e n e t */31 BENET 4.0 BENET 4.0 B e n e t */31 BENET 4.0 */35 B e n e t */31 BENET 4.0 */35 *
文档评论(0)