函数的递归调用.doc_第1页
函数的递归调用.doc_第2页
函数的递归调用.doc_第3页
函数的递归调用.doc_第4页
函数的递归调用.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

4、函数的递归调用: 函数中出现直接或间接的自身调用例、计算 f(x)=xn, 要求采用递归调用函数完成。分析:求xm=xxm-1,只需知道xm-1 /*设函数 f(x,n) 求取 xn (此时n=m)*/ 求xm-1=xxm-2,只需知道xm-2 /*自身调用f(x,n) (此时n=m-1)*/ 求xm-2=xxm-3,只需知道xm-3 /*f(x,n) , n=m-2*/ x2=xx1 /*f(x,n) , n=2*/ x1=xx0 /*f(x,n) , n=1*/ x0=1 /*f(x,n) , n=0*/ n=0为递归调用终止条件 f(int x, int n) int y; if(n0) y=f(x, n-1)*x; else y=1; return y;main( ) int x, n; printf(“n输入xn的x、n值: ”); scanf(“%d,%d”, &x, &n); printf(“%d*%d=%dn”, x, n, f(x, n); 五、局部变量和全局变量1、局部变量在一个函数内部定义的变量是内部变量,它只在本函数内有效,也就是说只有在本函数内才能引用它们,在此函数以外是不能使用这些变量的。主函数内定义的变量也是局部变量,其它函数不能引用。例:2、全局变量在函数之外定义的变量称为外部变量,外部变量是全局变量。全局变量可以为本文件中其它函数所共用。即在全局变量定义点之后的所有函数都可以使用该变量。全局变量增加了函数间联系的渠道。但不提倡用这种方式,因为它降低了函数的独立性。使得模块间的耦合增加,提高了程序的复杂性。 3、外部变量说明如果函数要使用外部变量,且这个外部变量的定义点在该函数之后,或定义点不在本文件内,则要进行外部变量的说明。例:外部变量说明只是申明该变量是一个已在外部定义过的变量,可以在任何需要使用它的函数内作说明,但作说明的同时不能给该变量赋初值。注意:局部变量与外部变量同名时,在局部变量定义的函数内,外部变量不起作用,也不能在该函数内作此外部变量说明,否则会产生编译错误。六、动态存储变量和静态存储变量1、变量的存储类别把变量分为局部变量与外部变量是从变量的作用域来分的。如果从变量值存在的时间(即生存期)来分,可以分为静态存储变量和动态存储变量。内存中供用户使用的部分可分为:程序区(放代码)静态存储区(放数据)动态存储区(放数据)变量的存储方式:程序区(放代码)静态存储区全局变量局部静态变量(有static说明) int a;main() static int b; 动态存储区函数形参变量局部自动变量(无static说明)函数调用相关数据 int func1(int x) main()int c; /*省略了auto*/auto int d;/*auto可以省*/ 2、局部变量的存储方式上面的表格中已经说明,局部变量的存储方式有两种:static 与auto ,如果不加以特别说明,系统默认为auto类型。两者的区别是什么呢?只要记住静态存储与动态存储的区别就可以了。程序区(放代码)静态存储区存储的变量在整个程序运行期间有效,变量的值保持不变,直到有语句改变它。动态存储区当变量超出作用范围时,它的存储空间被收回,下次再分配到时,上次的值的状态不能保持。如果我们希望局部变量的值在离开作用域后仍能保持,则将它说明为静态局部变量。其它说明:1、局部静态变量赋初值只在编译时赋一次,程序运行时就不再执行赋初值的操作了。2、局部静态变量如果不赋初值则自动为0。自动变量不赋初值则初始值为随机数值。3、全局变量的存储方式全局变量在函数的外部定义,编译时即在静态存储区分配空间。它可以为程序中的其它函数引用。如果其它文件中函数要引用它,则需在要引用它的文件中作extern说明。如果不想被其它文件中的函数引用,可以在定义时作static说明。4、变量的存储类别分为四种自动的 auto 可用于局部变量寄存器的 register静态的 static外部的 extern 可用于全局变量七、内部函数和外部函数1、内部函数根据函数能否被其它源文件调用,将函数区分为内部函数和外部函数。如果一个函数只能被本文件中其它函数所调用,它称为内部函数。在定义内部函数时,在函数名和函数类型前面加static。static 类型 函数名(形参表)例:上例中的fun函数因被定义为static类型,它不能被其它文件中的函数调用。2、外部函数extern 类型 函数名(形参表)上例中的fun2,fun3函数都是外部函数。对不加特别说明的,都认为是外部函数。TURBO C2.0中,主调函数调用其它文件中的外部函数可以不加外部函数说明。注意:下面的示例包括三个文件。请按注释把下面的内容分开保存到指定名称的文件中。编译的方法请见下面的“多文件编译”一段。八、多文件编译大型的软件开发往往由多人进行,且源程序代码量非常大,为便于合作和管理,通常把源代码放在多个文件中,编译时分别进行,最后把目标文件联接成可执行文件。这里要注意的是编译的过程中每一个源程序文件都要对应的生成一个目标文件,它的扩展名为obj。函数代码放在目标文件中,可以被其它的语言所调用,同样,C程序也可调用其它语言生成的目标文件中的函数。目标文件中存放数据、变量、和函数代码,只是它们在内存中的存储位置不确定。联接程序作的工作就是安排所有目标文件中的数据与函数代码,把存储位置确定下来,便于函数间的相互调用。1、方法一:用tc集成环境 项目工程文件多个文件的管理我们用工程项目文件来进行。工程项目文件的扩展名为prj,一个可执行文件对应一个工程项目文件。通常编译联接一个项目生成的可执行文件名称即项目文件名。下面是一个工程文件的内容:它分两行,每行是一个源程序文件名称。也就是说这个工程项目包括两个文件,分别是e07-08.c和e07-09.c。下面是e07-08.c文件的内容,注意此时要设置编译环境当前工程项目名称为e07-09.prj。(如何设置呢?打开project主菜单,光带停在第一行project name上时,打回车键,就会出现一个输入框,在框内输入项目文件名称后再打回车键即可。)设置好project name后,请大家看compile菜单:这时不管当前打开的文件是什么,都可联接当前项目了,生成的可执行文件名为e07-09.exe注意,项目文件中包括的源文件中只能有一个含有主函数main。下面是e07-09.c文件的内容。如何编译联接项目呢?在设置好上面的project name后(当然先要编辑好项目文件的内容啦),执行compile菜单中的make EXE file菜单项就行了。如果出现错误,请仔细加以更正后再试。看看工作的成果:2、方法二:tc在DOS状态下运行 D:c:turboc2tc

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论