c语言电子版教程第5章函数_第1页
c语言电子版教程第5章函数_第2页
c语言电子版教程第5章函数_第3页
c语言电子版教程第5章函数_第4页
c语言电子版教程第5章函数_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

1、第5章函数与程序结构容提要函数定义、函数调用、函数原型、函数返回值难点:函数的参数传递与返回值全局变量、自动变量、静态变量、寄存器变量难点:变量的作用域与类型结构设计与模块化2007-05-262程序设计的艺术程序设计有两大的艺术算法设计艺术结构设计艺术函数fun函cti数o(nf)un是ct结ion构设计的最基本的,它的子过就“一个程序应该是轻灵象串在一根线上的珍珠。” Geoffrey James的2007-05-263用函数解决问题打印阶乘表的程序函数把较大的任务分解成若干个较小的任务,并提炼出公用任务程序员可以在其他函数的基础上构造程序,而不需要从头做起设计得当的函数可以把具体操作细节

2、对程序中不需要知道它们的那些部分隐藏掉,从而使整个程序结构清楚分而治之、信息隐藏2007-05-264函数的分类库函数自定义函数2007-05-265函数定义()返回值类型()函数体函数体return表达式return表达式;返回值类型与return 如果不需要返回值,则应v该oi用dv定o义id返回值类型,同时r语e句tu之rn后不再需要任何表达式return当函数r执et行ur到n返回到调用它的地方r语e句tu时rn,就中止函数的执行,函数可以定义只能自己使用的,变称量变量。参数表里的变量也是变量2007-05-266函数名命名in风格函数名命名 用大写字母开头的单词组合而成变量名形式“名

3、词”或者“形容词+名词”如变量名oldValue与newValue等函数名形式“动词”或者“动词+名词”(动宾词组)如函数名GetMax()等2007-05-267对函数接口加以注释说明/* 函数功能:实现功能函数参数:参数1,表示参数2,表示函数返回值: */返回值类型函数名(参数表)函数体return表达式;2007-05-268例/*5计算两个整数的平均数函数功能:计算平均数参数: 整型x,y,函数第一个运算数第二个运算数函数返回值:*/平均数AvgeAvgeultresult;result = (x + y) / 2;return result;return result;2007-0

4、5-269函数调用()单向值传递调用函数时,必须提供所有的参数f和rff是采用变长变量表定义的函数,所以变量的个数不固定。pr提供的参数个数、类型、顺序与定义时相同有返回值时 放到一个数值表达式中,如c= max(a,b); 作为另一个函数调用的参数,如c=max(max(a,b),c);,max(a,b);无返回值时 函数调用表达式,如display(a,b);2007-05-2610例使用函数main()x,result; / 2;+ y) = (x result= 12;b);ave= Average(a,returnresult;b24aib = 24;prf();数据传递执行顺序av

5、e;ave = Average(a, b);prf opfrdf and %d is %d.(Averagen, a, b, ave);2007-05-2611a = 12;b = 24;ave;函数原型()调用一个函数之前,先要对其返回值类型、函数(re是非常)declare的名和参数进行不对函数进行时不要省略参数以及返回值的类型2007-05-2612includ#e#i5.1例5.1函数功能:计算平均数入函数参数:整型x x, 平均数第一个运算数第二个运算数函数返回值:*/ i Average(ix,iult result =result;(x + y)/2;returnresult;r

6、eturn result;maai(n)a=12;b = 24;= Average(a, b);24eprf2007-05-26p(rfrage of %d and%d is %d.n, a, b, ave);13includ#e#irAavge函er(数a)ge()*函/5数.*1例5.1verageAa(gxe,);/*maai(n)i24a =12;b = 24;= Average(a, b);eprf(Average of%dand%dis%d.n,a,b,ave);函数功能:计算平均数整型x x, 平均数入函数参数:第一个运算数第二个运算数函数返回值:*/ age ult resul

7、tAAveey)result;= (x + y) / 2;retur2n00r7e-0s5-u26lt;return result;14函数的嵌套调用在被调函数中,又调用了函数嵌套调用main()a 函数b函数.2007-05-2615变量的作用域指在源程序中定义变量的位置及其能被读写的范围范围局部变量(Local Variable)(Global Variable )2007-05-2616部变量在语句块内定义的变量形参也是局部变量定义时不会自动初始化,除非程序员指定初值进入语句块时获得内存,仅能由语句块内语句,退出语句块时内存,不再有效并列语句块各自定义的同名变量互不干扰2007-05-2

8、617局变量在所有函数之外定义的变量在程序中定义它的位置以后都有效自动初始化为0从程序运行起即占据内存,程序运行过程中可随时,程序退出时内存在定义点之前或在其他文件中,应该进行:extern使函数之间的;更容易,也更高效 但是并不使用 因为谁都可以改写全局变量,所以很难确定是谁改写了它尽量少用全局变量。不得不用时,要严格控制对它的改写的改写2007-05-2618例includ#ei/*定义全局变量*/voidvGGoliodbalPlusPlvuosi(d );vo)i;dmaa(i)nglobal = 1;prf(profre GlobalPlusPlus(), it is %dn, gl

9、obal);GlobalPlusPlus();prf(prefr GlobalPlusPlus(), it is %dn, global);/*函/*数功能:全局变量对 global全局变量g加l1o,ba并l打印加1之前与之后的值函数参数: 无函数返回值:无*/voidvGGoliodbalPlusPlvuosi(dvoid)prf(profre +, it is %dn, global);global+;prf(prefr +, it is %dn, global);2007-05-2619例includ#eivoidvGGoliodbalPlusPlvuosi(d);vo)i;dmaa(

10、i)nglobal = 1;prf(profre GlobalPlusPlus(), it is %dn, global);GlobalPlusPlus();prf(prefr GlobalPlusPlus(), it is %dn, global);/*函/*数功能:局部变量对 global局部变量g加l1o,ba并l打印加1之前与之后的值函数参数: 无函数返回值:无*/voidvGGoliodbalPlusPlvuosi(dvoid)global (pr= 1;ofre +, it is %dn, global);prfglobal+;(er +, it is %dn, global);2

11、007-05-2620变量的类型指数据在内存中的方式,即编译器为变量分配内存的方式,它决定变量的生存期动态动态根据需要临时分配静态空间,离开即静态在程序运行期间分配固定的空间不程序区全局变量、静态变量静态区形参、自动变量、函数调用现场等动态区2007-05-2621程课件 制作人自动()“自动”体现在 进入语句块时自动申请内存,退出时自动动态局部变量内存标准定义格式a变ut量o 名缺省的类au型to名变量名类型名;类型不初始化时,值是不确定的2007-05-2622静态(一个函数的变量在函数退出后失效。再次进入函数,变量值重新初始化把此变量为量的值可以保存到下次进入函数 sici;静态变量和全

12、局变量都是静态类型自动初始化为0从静态区分配,生存期为整个程序运行期间但作用域不同2007-05-2623includ#e#ivoidFunc(voviodidFun)c;v(oi)d;例maai(n) 假如没有sic,结果会怎样呢?forf(oir=0;i10;i+)Func(); Func();函/数* 功能/:*函数:函数功调能用的次数被印打参数:函数返回值:无*/sictisi=c 1;/*/定*义定静义态静变态量变*量/prfp(rfc() was called %dtime(s).n, times+);2007-05-2624寄存器变量()CPUC的容量很有限但速度极快的器使用频率

13、比较高的变量r为egregister,er可以使程序更小、执行速度更快registerregister;i;现代编译器有能力自动把普通变量优化为寄存器变量,并且可以忽略用户的指定,所以一般无需特别变量为2007-05-2625函数设计的原则函数的功能要单一,不要设计多用途的函数函数的规模要小,尽量控制在50行代码以内1986IB1M9O86S年/3在在6IB0M的OS研/3究60结的果研:究大结多果数:有大错多误数的有函错数误都的大函50于数0 都大5行0于08,000行代码的研究表明:小于行的函数比更长的函数更容易每个函数只有一个和一个出口向函数传递信息时,尽量不使用全局变量几个有关联的函数

14、需要使用全局变量时,全局变量应和全局变量的函数放在单独的一个文件中,与其它文件分别编译,并且将该全局变量si为cic全局变量)s函数参数的书写要完整,不要省略参数以及返回值的类型和名字,如果没有,则vo用idvoid定义好函数接口以后,应在文件的开头处进行函数说明尽量少用静态局部变量,以避免使函数具有“2007-05-26”功能26模块和将一个程序分解成若干个模块,分别放在几个源文件中,形成一个P项ro目je(ctP)roject然后,对每一个源文件分别单独进行编译再将它们的目标代码连同标准函数库中的函数一起,形成可执行文件。在主模块主模块 main()所在的文件也是一个模块模块之间通过互相调

15、用函数和共享全局变量联系起来头文件里对全局变量的用以说明该变量为外部变量要xt加er上n关键字,extern 关键字,2007-05-2627模块和优点:当一个文件中的代码被修改后,不必对所有程序重新编译,从而节省了程序的编译时间。使程序更宜于,给多个程序员共同编制一个大型项目的代码提供了方便。2007-05-2628程序调试实例5例.11例i5.11includ#e#ctorial(maai(n)xx;/*prfp(r fase input x(-1 to quit):); &x);1)-i1f)(ixf= -(x =/* *elseprelse n,fp(rff,act(orTihaelfaocfto%rdiails o%fd.%dis %d.x, Factorial(x);

温馨提示

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

评论

0/150

提交评论