第08章_函数剖析.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第八章 §8.1概述 int a; main() { ... f1(); ... f2(); ... f1(); } f1() { int b; } f2() { static int c; } 本章结束 §8.6函数的递归调用 在一个函数的过程中出现直接或间接地调用该函数本身,称为函数的递归调用。C语言的特点之一就在于允许函数的递归调用。例如: int f(int x) { int y,z; z=f(y); return(2*z); } 例 8.8用递归方法求n! 求n!也可以用递归方法,即5!=4!×5,而4!=3!×4,1!=1。 可用下面的递归公式表示: 1 (n=0,1) n·(n-1)! (n>1) n!= float fac(int n) { float f; if(n 0) { printf(n0,dataerror!); } else if(n == 0 || n == 1) f = 1; else f = fac(n-1) * n; return(f); } main() { printf(4!=%f\n,fac(4); } main →fac(4) 输出 12 fac:4 →fac(3) * 4 return 12 fac:3 →fac(2) * 3 return 6 fac:2 →fac(1) * 2 return 2 fac:1 return 1 §8.8局部变量和全局变量 §8.8.1局部变量 在一个函数内部定义的变量是局部变量,它只在本函数范围内有效,也就是说只有在本函数内才能使用它们,在此函数以外是不能使用这些变量的。这称为“局部变量”。 float f1( int a) /*函数f1 */ {int b,c; … //a、b、c有效 } char f2(int x,int y) /*函数f2 */ {int i,j; … //x、y、i、j有效 } void main( ) /*主函数*/ {int m,n; … //m、n有效 }    (1) 主函数中定义的变量也只在主函数中有效,而不因为在主函数中定义而在整个文件或程序中有效。 (2) 不同函数中可以使用相同名字的变量,它们代表不同的对象,互不干扰。它们在内存中占不同的单元,互不混淆。 (3) 形式参数也是局部变量。 (4) 在一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效,这种复合语句也称为“分程序”或“程序块”。 说 明 void main ( ) {int a,b; … {int c; c=a+b; //c在此范围内有效 a,b在此范围内有效 … } …//c在此范围内无效 }   §8.8.2 全局变量 在函数内定义的变量是局部变量,而在函数之外定义的变量称为外部变量,外部变量是全局变量(也称全程变量)。全局变量可以为本文件中其他函数所共用。它的有效范围为从定义变量的位置开始到本文件结束。 int p=1,q=5; /* 全局变量 */ float f1(int a) {int b,c; 全局变量p,q的作用域 … } char c1,c2; /* 全局变量*/ char f2 (int x, int y) {int i,j; 全局变量c1,c2的作用域 … } void main ( ) {int m,n; … }    建议不在必要时不要使用全局变量,原因如下: ① 全局变量在程序的全部执行过程中都占用存储单元,而不是仅在需要时才开辟单元。 ② 使用全局变量过多,会降低程序的清晰性,人们往往难以清楚地判断出每个瞬时各个外部变量的值。在各个函数执行时都可能改变外部变量的值,程序容易出错。因此,要限制使

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档