一个程序由多个模块(文件)组成ppt课件_第1页
一个程序由多个模块(文件)组成ppt课件_第2页
一个程序由多个模块(文件)组成ppt课件_第3页
一个程序由多个模块(文件)组成ppt课件_第4页
一个程序由多个模块(文件)组成ppt课件_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

1、第八章函数一、概述n一个程序由多个模块文件组成,每个模块文件又由很多小的功能模块函数组成,而且这些功能模块函数能够在很多文件模块中都要运用。因此,运用函数可以减少反复劳动语句函数1函数n文件1函数1函数n文件n程序二、阐明n1、C程序=多个源文件,便于分别编写、编译、提高效率。n2、一个源程序文件=多个函数。以源文件为单位进展编译。n3、在多个函数中,有且仅有一个main函数,程序从main开场执行。n4、一切函数都是平等的,可以相互调用,但是不能嵌套定义n5、函数=规范函数+用户函数n6、函数=有参函数+无参函数3、定义函数(1)n1、无参函数nType f_Name()n函数内部变量声明n

2、 nn如:nInt Add()nint x=2,y=3,z;n z=x+y;n return z;n3、定义函数(2)n2、有参函数nType f_Name(形参变量类型表)n 函数内部变量声明n nn如:int Add(int x,int y)n int z;n z=x+y;n return z;n 形参:在定义函数的时候,它的值是未知的,也就是说它只是方式上存在,并不在内存中占用空间。如x,y4、形参的传统声明方式nType f_Name(形参变量表n形参变量类型声明n函数内部变量声明n nn如:int Add(x,y)n int x,y;n int z;n z=x+y;n Return

3、z;n 5、函数参数n在调用函数时,主调函数与被调函数之间存在数据传送关系:n实参从主调函数传给被调函数对应的形参,函数值从被调函数传回到主调函数对应的函数名处。n留意:n1、形参只在进展函数调用的时候才自动分配内存空间(必需有明确的类型),函数调用终了后自动释放所占内存空间n2、实参在任何时候都必需有实践的值,可以是常量或常量表达式n3、实参与形参的类型应该一样或能赋值兼容n4、实参到形参是单向值传送,只能从实参传到形参,形参的改动不会引起实参的改动。6、函数前往值n1、函数的前往值普通是经过return语句带回n1return ;终了被调函数,前往到主调函数,但是不传送回任何可用的值。(v

4、oid)n2return (表达式);终了被调函数,前往到主调函数,并将表达式的值带回到主调函数。n3return 表达式;同2n2、前往值的类型n1可以是任何合法的类型n2函数值的类型与前往值的类型不一致,以函数的类型为准。n3假设函数类型为int,可以不写。n4为了明确表示不带回值,那么函数类型为void(空类型)7、举例nmain()n float x,y;n int c;n scanf(%f,%f,&x,&y);n c=max(x,y);n printf(Max is %dn,c);n return ; n int max(float x,float y)n if(xy) return

5、 x;n else return (y); max(float,float);main() float x,y; int c; scanf(%f,%f,&x,&y); c=max(x,y); printf(Max is %dn,c); return ; max(float x,float y) if(xy) return x; else return (y); 8、函数原型声明n1、作用:n提早通知系统,程序中有这样一个函数n2、方法:n在main函数之前,用函数声明语句n3、方式:nType f_Name(形参类型表);n普通只写类型,不需求变量名。n假设函数类型type为int,那么可以不

6、进展原型声明最好都写9、函数调用n定义了子函数,而且对子函数进展原型声明后,就可以调用子函数了。子函数与主函数的位置可以恣意排放。n调用方式:n1、假设函数类型为void(对应return ;),用函数调用语句:f_Name(实参表);n2、否那么(对应return ;) ,将函数调用放在表达式中,或作为函数的参数。如:n d=max(a,max(b,c)/2;10、函数的嵌套(相互)调用n由于子函数之间是平等的,因此子函数之间可以相互调用。nmain()nn f1();nn f1()n n f2();n n f2()n n f1();n 11、举例(8_6)n用弦截法求f(x)=x3-5x2

7、+16x-80=0 的根x1x2xx1、if(f(x1)*f(x2)=0)方程有根2、直线段x1x2与x轴相交于x3、if(f(x1)*f(x)=0)根在x1与x之间,x2=x,否那么,根在x与x2之间,x1=x4、反复2、3,直到f(x)无限接近0,即可求出x12、函数的递归调用n递归调用本人调用本人nf1()nn f1();n 13、举例(8_7)n求n!n n!=n*(n-1)!n (n-1)!=(n-1)*(n-2)!n n 1!=1*0!n 0!=1nn!=fact(n)=n*fact(n-1)=n*(n-1)*fact(n-2)14、数组作为函数参数n1、数组元素作为函数参数n数组

8、元素相当于与一个普通变量,因此数组元素作为函数参数与变量作为函数参数完全一样。n见例题8_8(比较两个数组的大小)15、数组作为函数参数n2、数组名作为函数参数n1数组名表示函数的起始地址,是常量n2数组名作为函数参数是双向传送,实参的改动引起形参的改动,形参的改动也会引起实参的改动。n3数组名作为函数参数,要务虚参、形参都是数组,而且类型应该一致n4可以省略形参第一维的长度,经常运用一个变量来传送。n5数组名作为函数参数,形参数组和实参数组在同一个内存单元。n见例题8_9(比较两个数组的大小)16、部分变量nInt F1(int x,int y)nint z;x,y,z只在f1中有效nnIn

9、t f2(int a,int b)nint c; a,b,c只在f2中有效nnVoid main()nint m,n; m,n只在main中有效n17、全局变量nInt x,y;x,y在它下面的一切程序中有效nInt f1(int a,int b)nint c; a,b,c只在f1中有效x,y有效nnFloat z; z在它下面的一切程序中有效nInt f2(int c,int d)nint e; c,d,e只在f2中有效x,y,z有效nn全局变量长期占有内存n经过全局变量,让一个函数得到多个结果n尽量不用全局变量例题8_10)18、变量的类别n1、自动变量auton变量运用终了后自动释放内存

10、空间n普通变量都是auto类型n2、静态变量static(例题8_11)n变量运用终了后不释放内存空间,保管原值n3、存放器变量registern将运用频繁的变量放在存放器中。n不能定义太多n加快程序的运转19、外部变量n外部变量全局变量在函数外部定义的变量n假设外部变量前面的函数要援用该外部变量,可以用关键字extern声明n例题8_12n当多个文件组成一个程序,而文件之间要用到同一个变量的时候:只在一个文件中定义外部变量,在其它需求的文件中用extern声明这个变量。n例题8_13,8_13_220、外部函数n内部函数一个函数只能被本文件调用,在定义和声明的时候加上关键字static,作用是多个文件中的同名函数不相互关扰(例题8_1

温馨提示

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

评论

0/150

提交评论