C语言(函数)ppt课件_第1页
C语言(函数)ppt课件_第2页
C语言(函数)ppt课件_第3页
C语言(函数)ppt课件_第4页
C语言(函数)ppt课件_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

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

文档简介

,函数,程序的模块化函数定义原型调用参数传递函数的嵌套调用递归函数程序设计举例,C语言程序设计,简介,分而治之与程序的模块化把一个规模较大的问题分解成若干个较小的相对独立的部分,对每一个部分使用一个较小的程序段,即程序模块(module)来处理。从较小的程序段或组件来构建程序。这些小片段或组件比原始程序更容易实现和管理。这些小组件可以被重复使用。,函数,C语言的函数,在C语言中,函数(function)是构成程序的基本模块。一个C程序由一个或多个函数组成,有且仅有一个主函数,即main()函数。每个函数完成一个相对独立的且功能明确的任务。由主函数调用其他函数,其他函数也可以互相调用。同一个函数可以被一个或多个函数调用任意多次。,函数,C语言的函数,C语言的函数有两大类:标准库函数提供了丰富的函数。例如数学计算:sqrt(),abs()输入/输出:scanf(),printf()自定义函数程序员可以编写函数来完成特定的任务。应该熟悉C系统中的标准函数库。应该避免从零开始构建一切。,函数,为什么使用函数,函数使程序模块化。程序采用模块化结构的好处:分而治之提高程序开发的效率。使程序易于管理。代码重用使用现有的函数作为构件来创建程序。函数可以被重复使用。抽象隐藏了实现的细节。例如使用库函数(printf()),但并不知道它的具体实现(没有影响使用)。,函数,案例分析:一个简单的函数,编写和使用一个简单的函数(cw0801.c)定义一个函数square,用来计算任意整数的平方。然后,使用该函数计算从1到10所有整数的平方。,函数,#includeintsquare(int);voidmain()intx;for(x=1;x=b?a:b;returnc;,3,4,5,1、2、主调函数暂停,保存现场。3、把实参的值拷贝给形参,控制权交给函数max。4、,5、被调函数执行结束,把函数值返回给主调函数,同时把控制权还给主调函数。6、恢复现场,主调函数继续执行。,参数传递,函数间的数据传递方式:参数返回值,函数,intmax(inta,intb)returnc;main()c=max(a,b);,参数传递,返回值传递,调用,实参和形参,实参和形参,函数,intmax(inta,intb)intc=a=b?a:b;returnc;main()inta,b,c;scanf(“%d%d”,形式参数简称“形参”。在函数定义时表示可以接受传递过来的值。,实际参数简称“实参”。在函数调用时给出。,形参,形参,函数,intmax(inta,intb)intc=a=b?a:b;returnc;main()inta,b,c;scanf(“%d%d”,只有在函数被调用、启动后,才临时为其分配存储单元,并接受主调函数传来的数据。在函数调用结束后,形参所占存储单元被释放。,实参,实参,函数,intmax(inta,intb)intc=a=b?a:b;returnc;main()inta,b,c;scanf(“%d%d”,实参是函数调用时主调函数传送给被调函数的形式参数的实际值。实参可以是常量、变量和表达式。实参必须有确定的值。,参数传递,参数传递的顺序。,函数,intmax(inta,intb)intc=a=b?a:b;returnc;main()intx=6,y;y=max(x,x+);printf(“%d”,y);,当实参表列中有多个实参时,对实参的求值顺序并不确定。VC和BC是按从右往左的顺序求值。,b=x+;a=x;,7,在参数传递时,参数传递,参数传递的影响。,函数,intmax(inta,intb)intc=a=b?a:b;a+;b+;returnc;main()inta=6,b=5,c;c=max(a,b);printf(“%d,%d,%d”,a,b,c);,实参与形参不共用存储单元。参数传递时,把实参的值复制一份给形参。形参值的变化不影响实参的值。所以,形参和实参可以同名。,6,5,6,值传递和引用传递,函数间参数的传递有两种类型:值传递主调函数把实参的值的副本传递给被调函数的形参。在被调函数内改变形参的值不会改变主调函数中实参的值。如果函数不需要修改参数的值,就采用这种调用方式。引用传递主调把实参“自身”传递给被调函数的形参。在被调函数内改变形参的值将改变主调函数中实参的值。用于可信的函数。在C语言中,所有参数传递都采用值传递。,函数,参数传递,实参和形参的类型应该相同或赋值兼容。,函数,intmax(inta,intb)intc=a=b?a:b;returnc;main()intx=6,y=5,z;z=max(x,y);printf(“%d”,z);,如果x,y是整型,则结果正确;如果x,y是字符型,则自动进行类型转换,结果正确;如果x,y是短整型,则自动进行类型转换,结果正确;如果x或y是实数,则自动进行类型转换,有数据丢失,结果可能不正确。,b=y;a=x;,在参数传递时,函数的返回值,函数返回值的类型应该与函数的类型一致。如果不一致,采用函数的类型,对返回值进行类型转换。,函数,intmax(floata,floatb)floatc=a=b?a:b;returnc;,main()floatx=6.5,y=5.6,z;z=2*max(x,y);printf(“%f”,z);,c的类型?返回值的类型?,max(x,y)的类型?2*max(x,y)的类型?,函数的嵌套调用,嵌套调用在调用一个函数的过程中又调用另一个函数,函数,案例分析:函数的嵌套调用,计算圆环的面积分析圆环的面积=外圆的面积内圆的面积可以定义两个函数circleArea计算圆的面积ringArea计算圆环的面积,函数,doublecircleArea(doubler);doubleringArea(doubler1,doubler2);,案例分析:函数的嵌套调用,计算圆环的面积源代码(cw0804.c),函数,#include#definePI3.14doublecircleArea(doubler);doubleringArea(doubler1,doubler2);voidmain()doubler1,r2,s;printf(tInputr1,r2:);scanf(%lf%lf,案例分析:函数的嵌套调用,计算圆环的面积源代码(续),函数,doublecircleArea(doubler)returnPI*r*r;doubleringArea(doubler1,doubler2)if(r1%cn,n,s,d);,小结,函数可以作为大型程序的组成模块。每个

温馨提示

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

评论

0/150

提交评论