C语言-函数省公开课一等奖全国示范课微课金奖课件_第1页
C语言-函数省公开课一等奖全国示范课微课金奖课件_第2页
C语言-函数省公开课一等奖全国示范课微课金奖课件_第3页
C语言-函数省公开课一等奖全国示范课微课金奖课件_第4页
C语言-函数省公开课一等奖全国示范课微课金奖课件_第5页
已阅读5页,还剩37页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

C语言程序设计

函数周闻钧 朱宏明第1页本讲内容基本函数概念函数递归局部变量和全局变量变量存放类别第2页函数分类main函数是系统定义。全部函数都是平行,即在定义函数时是相互独立,一个函数并不隶属于另一函数,即函数不能嵌套定义(这是和PASCAL不一样),但能够相互调用,但不能调用main函数从用户使用角度看,函数有两种:标准函数,即库函数。这是由系统提供,用户无须自己定义这些函数,能够直接使用它们。应该说明,每个系统提供库函数数量和功效不一样,当然有一些基本函数是共同用户自己定义函数,以处理用户专门需要从函数形式看,函数分两类无参函数。在调用无参函数时,主调函数并不将数据传送给被调用函数,普通用来执行指定一组操作。无参函数能够带回或不带回函数值,但普通以不带回函数值居多有参函数。在调用函数时,在主调函数和被调用函数之间有参数传递,也就是说,主调函数能够将数据传给被调用函数使用,被调用函数中数据也能够带回来供主调函数使用。第3页编写和使用一个简单函数第4页编写和使用一个简单函数Starbar标识符在不一样位置被使用了3次:函数原型(functionprototype):通知编译器starbar()函数类型函数调用(functioncall):造成该函数执行函数定义(functiondefinition):确切指定了该函数详细功效第5页编写和使用一个简单函数函数和变量一样有各种类型。任何程序在使用函数之前都需要申明该函数类型下面是AnsiC格调原型voidstarbar(void);()表明starbar是一个函数名。第一个void指是函数返回值类型,它意思是该函数没有返回值第二个void(位于圆括号内)表明该函数不接收任何参数分号表示该语句是进行函数申明而不是定义第6页编写和使用一个简单函数程序经过在main()中使用函数名后跟圆括号和分号格式调用函数starbar()程序把starbar()和main()包含在同一个文件中,也能够把它们放在不一样两个文件中,这种方式下必须在文件种加入#define或者#include指令第7页编写和使用一个简单函数第8页带参数函数第9页定义带参数函数(形式参数)函数定义以下面ANSIC函数头开始

ANSIC也接收ANSI之前形式,但将其视为废弃不用形式第10页调用带参数函数(实际参数)使用实际参数对形式参数赋值实际参数能够是常量、变量或一个复杂表示式第11页调用带参数函数(实际参数)实际参数传递给形式参数是单向值传递第12页形式参数和实际参数形式参数和实际参数在调用函数时,大多数情况下,主调函数和被调用函数之间有数据传递关系在定义函数时函数名后面括弧中变量名称为形参intfunc(intx,inty){…}在调用函数时,函数名后面括弧中表示式称为实际参数(简称实参){…intx=1,y=0;func(x,y);func(x+y,y-x);}第13页形式参数和实际参数关于形参和实参说明在定义函数中指定形参变量,在未出现函数调用时,它们并不占内存中存放单元。只有在发生函数调用时函数max中形参才被分配内存单元。在调用结束后,形参所占内存单元也被释放实参能够是常量、变量或表示式,但要求它们有确定值。在调用时将实参值赋给形参变量(假如形参是数组名,则传递是数组首地址,而不是变量值)在被定义函数中,必须指定形参类型实参加形参类型应一致。假如实参为整型,形参为实型,或者相反,则发生“类型不匹配”错误。字符型与整型能够相互通用第14页使用return从函数中返回一个值第15页使用return从函数中返回一个值关键字return指明了其后表示式数值即是该函数返回值。因为min类型是int,所以函数imin()类型也是int返回值不但能够被赋给一个变量,也能够被用作表示式一部分第16页使用return从函数中返回一个值Return语句另一个作用是终止程序执行,把程序控制权返回给调用函数下一个语句第17页函数类型函数应该进行类型申明,同时其类型应和返回值类型相同早期c语言中,假如函数没有进行类型申明,则该函数含有默认函数类型int。C99标准不再支持函数int类型默认设置第18页本讲内容基本函数概念函数递归局部变量和全局变量变量存放类别第19页函数递归一个函数调用其本身,这种调用过程被称为递归第20页递归基本原理每一级函数调用都有自己变量每一次函数调用都会有一次返回递归函数中,位于递归调用前语句和各级被调用函数含有相同执行次序递归函数中,位于递归调用后语句执行次序和各个被调函数次序相反即使每一级递归都有自己变量,不过函数代码并不会得到重复递归函数中必须包含能够终止递归调用语句第21页递归基本原理第22页尾递归递归调用出现在函数尾部,相当于一条循环语句第23页尾递归递归和循环比较选择循环更加好一些每次递归调用都用自己变量集合,需要占用较多内存每次递归调用需要把新变量机和存放到堆栈中递归执行速度较慢第24页递归和反向计算第25页递归优缺点优点:为一些编程问题提供了最简单处理方法缺点:递归算法会很快耗尽计算机内存资源,难于维护和阅读第26页本讲内容基本函数概念函数递归局部变量和全局变量变量存放类别第27页局部变量和全局变量局部变量在一个函数内部定义变量是内部变量,它只在本函数范围内有效,也就是说只有在本函数内才能使用它们,在此函数以外是不能使用这些变量。这称为“局部变量”floatfl(inta) {intb,c; … } Charf2(intx,inty) {inti,j; … } voidmain() {intm,n; … }a,b,c有效x,y,i,j有效m,n有效第28页局部变量和全局变量局部变量(续)主函数main中定义变量(m,n)也只在主函数中有效,而不因为在主函数中定义而在整个文件或程序中有效,这是和PASCAL不一样。主函数也不能使用其它函数中定义变量不一样函数中能够使用相同名字变量,它们代表不一样对象,互不干扰。比如,在f1函数中定义了变量b,c,倘若在f2函数中也定义变量b和c,它们在内存中占不一样单元,互不混同形式参数也是局部变量。比如fl函数中形参a,也只在fl函数中有效。其它函数不能调用在一个函数内部,能够在复合语句中定义变量,这些变量只在本复合语句中有效,这种复合语句也称为“分程序”或“程序块”charc;{intj;}c=j;//错误第29页局部变量和全局变量全局变量程序编译单位是源程序文件,一个源文件能够包含一个或若干个函数。在函数内定义变量是局部变量,而在函数之外定义变量称为外部变量,外部变量是全局变量。全局变量能够为本文件中其它函数所共用,它有效范围为从定义变量位置开始到源文件结束在一个函数中既能够使用本函数中局部变量,又能够使用有效全局变量,打个通俗比喻:国家有统一法律和法令,各地方还能够依据需要制订地方法律、法令,一个地方居民既恪守国家统一法律法令,又要恪守当地方法律法令。而另一个地方居民则应恪守国家统一和该地方法律法令第30页局部变量和全局变量全局变量(续)定义全局变量作用是:增加了函数间数据联络渠道。因为同一文件中全部函数都能引用全局变量值,所以假如在一个函数中改变了全局变量值,就能影响到其它函数,相当于各个函数间有直接传递通道。因为函数调用只能带回一个返回值,所以有时能够利用全局变量增加函数联络渠道,从函数得到一个以上返回值。能够利用全局变量以降低函数实参加形参个数,从而降低内存空间以及传递数据时时间消耗。另外,C语言要求,外部数组能够赋初值,而局部数组不能赋初值第31页局部变量和全局变量全局变量(续)提议不在必要时不要使用全局变量,因为全局变量在程序全部执行过程中都占用存放单元而不是仅在需要时才开辟单元它使函数通用性降低了,因为函数在执行时要依赖于其所在外部变量。假如将一个函数移到另一个文件中,还要将相关外部变量及其值一起移过去。模块功效要单一,其它模块相互影响要尽可能少。而用全局变量是不符合这个标准。普通要求把C程序中函数做成一个封闭体,除了能够经过“实参—形参”渠道与外界发生联络外,没有其它渠道。这么程序移植性好,可读性强。使用全局变量过多,会降低程序清楚性,人们往往难以清楚地判断出每个瞬时各个外部变量值。在各个函数执行时都可能改变外部变量值,程序轻易犯错。所以,要限制使用全局变量第32页局部变量和全局变量全局变量(续)假如在一个源文件中,全局变量和局部变量同名,则在局部变量作用范围内,外部变量被屏蔽,即它将不起作用第33页本讲内容基本函数概念函数递归局部变量和全局变量变量存放类别第34页变量存放类别动态存放方式和静态存放方式从变量存在时间(生存期)角度分:静态存放方式:在程序运行期间分配固定存放空间方式动态存放方式:在程序运行期间依据需要进行动态分配存放空间方式内存中存放空间:程序区静态存放区动态存放区用户区第35页变量存放类别数据存放在静态存放区和动态存放区全局变量存放在静态存放区,在程序开始执行时给全局变量分配存放区,程序执行完成后释放动态存放区(程序栈)存放:函数形式参数自动变量(未加static申明局部变量)函数调用时现场保护和返回地址第36页变量存放类别Auto变量函数中局部变量,假如不是static,都是动态分配存放空间函数形参和函数中变量,在调用函数时,系统会给他们分配存放空间,在函数调用结束时自动时释放这些存放空间没有申明变量自动隐含指定为自动变量第37页变量存放类别static变量静态变量属于静态存放类别,在静态存放区内分配存放单元,在程序整个运行期间都不释放静态局部变量是在编译时赋初值,即只赋初值一次,在程序运行时他已经有初值了,以后每次调用函数时不再重新赋初值而是保留上次值对静态局部变量来说,假如没有赋初值话,编译时自动赋初值0或空字符static变量多占内存,降低程序可读性,应尽可能少用static变量第38页变量存放类别Register变量对一些频繁使用变量,C语言为了提升执行效率,允许将局部变量值放到CPU存放器中,需要时能够直接从存放器中读取,而不要从内存中读取只有局部自动变量和形式参数才能作为存放器变量,其它不行计算机系统中存放器数目有限,不能定义任意多存放器变量static变量不能定义为存放器变量第39页变量存放类别extern变量用extern变量来申明外部变量,以扩展外部变量作用域在一个文件内申明外部变量扩展外部变量作用范围在多个文件程序中申明外部变量一个文件引用另一个文件中已定义外部变量为了预防这种引用错误,能够在定义一个外部变量时加static申明第40页变量存

温馨提示

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

评论

0/150

提交评论