常州信息学院C语言课程组_第1页
常州信息学院C语言课程组_第2页
常州信息学院C语言课程组_第3页
常州信息学院C语言课程组_第4页
常州信息学院C语言课程组_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

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

文档简介

1、第七章 函数本章关键任务:1、把握函数定义、调用、表明.2、函数指标传递方式领会函数递回调用.3、把握变量作用域、生命期.4、把握插入排序 C语言的函数C语言的函数是子程序的总称,包罗函数和环节.(有返回值、无返回值,教材中称为:有返回值函数,无返回值函数).C语言函数能够分为库函数、用户自定义函数.库函数由系统提供,程序员只需要使用(调用),用户自定义函数需要程序员自已编制. 函数是C语言程序的根基单位 C程序是由函数构成1、一个C源程序到少见谅一个main函数,也能够见谅一个main函数和如果干个其它函数.函数是C程序的根基单位. 2、被调用的函数能够是系统提供的库函数,也能够是用户依照需

2、要自已编写设计的函数. 3、C函数库非常富厚,ANSI C提供100多个库函数,Turbo C提供300多个库函数.main函数是每个程序履行的起始点一个C程序老是从main函数最先履行,而不论main函数在程序中的位置.能够将main函数放在整个程序的最前面,也能够放在整个程序的末了,大概放在其它函数之间. 使用函数的意义1、使用函数能够操纵任务的范围.使用函数能够将程序分割为如果干功能相对独站的模块,这些模块还能够再分割为更小的模块,直到各个模块达到程序员所能够操纵的范围.接着程序员再履行各个模块的编制.因为各个模块功能相对独站,环节有限,所以流程简单操纵,程序简单编制,修改. 使用函数的

3、意义2、使用函数能够操纵变量的作用范畴.函数-函数通过接口(指标表,返回值)通讯,交流信息. 使用函数的意义3、使用函数,程序的开发能够由多人分工协作.将程序分割为如果干模块(函数),各个相对独站的模块(函数)能够由多人完成,每个人依照模块(函数)的功能要求,接口要求编制代码,调试,确保每个模块(函数)的精确性.末了将全部模块(函数)合同时,同一调试、运行. 使用函数的意义4、使用函数,能够再一次操纵已有的、调式好的、成熟的程序模块 .函数的一样形式函数的组成一个函数(定义)由函数头(函数首部)和函数体两部分组成 函数头 函数头(首部):讲明了函数类型、函数标题及指标.函数类型:函数返回值的信

4、息类型,能够是根基信息类型也能够是组织类型.似果省略默信任int,似果不返回值,定义为void类型. 函数头函数名:给函数取的名字,往后用那个名字调用.函数名由用户命名,命名法那么同标识符. 函数名背面是指标表,无参函数没有指标传递,但“()”号不能省略,这是标准的规定.指标表讲明指标的类型和形式指标的标题,各个形式指标用“,”分隔. 函数体 函数体:函数首部下用一对括起来的部分.似果函数体内有多个,最外层是函数体的范畴.函数体一样包罗:(1)表明部分:在这部分定义本函数所使用的变量和履行有关表明(似函数表明).(2)履行部分:程序段,由如果干条语句组成号令序列(能够在其中调用其它函数).函数

5、举例例8-1:输入三个整数,求三个整数中的最大值,打印. 不使用函数解决使用函数解决函数的指标 函数的指标包罗形式指标与现实指标.形式指标(形参)形式指标(形参):函数定义时设定的指标.例8-1中,函数头int max(int x,int y,int z)中x,y,z便是形参,它们的类型根基上整型. 现实指标(实参)现实指标(实参):调用函数时所使用的现实的指标.例8-1中,主函数中调用max函数的语句是:nmax=max(n1,n2,n3); 其中n1,n2,n3便是实参,它们的类型根基上整型. 指标的传递 在调用函数时,主调函数和被调函数之间有信息的传递-实参传递给形参.具体的传递方式有两

6、种:(1)值传递方式(传值):将实参单向传递给形参的一种方式. (2)地址传递方式(传值):将实参地址单向传递给形参的一种方式. 注重单向传递:不管“传值”、仍是“传址”,C语言根基上单向传递信息的,必然是实参传递给形参,反过来不可.也便是讲C语言中函数指标传递的两种方式本质一样-“单向传递”. 注重“传值”、“传址”只是传递的信息类型差别(传值-一样的数值,传址-地址).传址现实是传值方式的一个特例,本质仍是传值,只是此刻传递的是一个地址信息值. 注重系统安排给实参、形参的内存单元是差别的,也便是讲纵然在函数中修改了形参的值,也不大概作用实参的值. 注重对传值,纵然函数中修改了形参的值,也不

7、大概作用实参的值. 对传址,纵然函数中修改了形参的值,也不大概作用实参的值.但是,注重:不大概作用实参的值,不等于不作用实参指向的信息. 注重传址与传值一样不能通过指标返回信息,但因为传递的是地址,那么便大概通过实参指标所指向的空间间接返回数值.两种指标传递方式中,实参能够是变量、常量、表达式;形参一样是变量,要求两者类型一样或赋值兼容. 示意图函数的返回值C语言能够从函数(被调用函数)返回值给调用函数(这与数学函数相当类似).在函数内是通过return语句返回值的.使用return语句能够返回一个值或不返回值(此刻函数类型是void). return语句的标准:return 表达式;或ret

8、urn (表达式); 讲明 1、函数的类型便是返回值的类型,return语句中表达式的类型应该与函数类型一致.似果不一致,以函数类型为准(赋值转化). 2、函数类型省略,默信任int. 3、似果函数没有返回值,函数类型应当讲明为void(无类型). 函数的调用方式 函数调用的一样方式:函数名(实参表列); 讲明1、无参函数调用没有指标,但是“()”不能省略,有参函数如果见谅多个指标,各指标用“,”分隔,实参指标个数与形参指标个数一样,类型一致或赋值兼容. 讲明2、以单独语句形式调用(注重背面要加一个分号,构成语句).以语句形式调用的函数能够有返回值,也能够没有返回值.例似:printf(“ma

9、x=%d”,nmax);swap(x,y);puts(s);讲明3、在表达式中调用(背面没有分号).在表达式中的函数调用必须有返回值.例似:if(strcmp(s1,s2)0)函数调用strcmp()在关系表达式中.nmax=max(n1,n2,n3) ; 函数调用max()在赋值表达式中,“;”是赋值表达式做为语句时加的,不是max函数调用的.fun1(fun2(); 函数调用fun2()在函数调用表达式fun1()中.函数调用fun2()的返回值做为fun1的指标.函数调用时信息的传递(函数之间的通讯)函数是相对独站的,但是不是独站的,它们通过调用时1)指标传递和2)函数的返回值3)全局变

10、量(背面讲解)来彼此联系. 函数的表明函数定义的位置能够1)在调用它的函数之前,也能够2)在调用它的函数之后,甚到位于3)其它的源程序模块中.l 函数定义位置在前,函数调用在后,不必表明,编译程序产生精确的调用标准.函数定义在调用它的函数之后大概函数在其它源程序模块中,且函数类型不是整型,这时,为了使编译程序产生精确的调用标准,能够在函数使用前对函数履行表明.如此不管函数在啥位置,编译程序都能产生精确的调用标准. 函数表明的标准 函数类型 函数名(指标类型,指标类型); C语言的库函数便是位于其它模块的函数,为了精确调用,C编译系统提供了相应的.h文件.h文件内很多根基上函数表明,当源程序要使

11、用库函数时,便应当见谅相应的头文件. 函数的嵌套调用 函数嵌套调用:函数调用中又存在调用.似函数1调用函数2,函数又调用函数3.函数之间没有从属关系,一个函数能够被其它函数调用,同时该函数也能够调用其它函数. 函数的递回调用函数的递回调用:是指函数直截了当调用或间接调用自已,或调用一个函数的环节中表现直截了当或间接调用该函数自身.前者称为直截了当递回调用,后者称为间接递回调用. 递回调用环节(两个期间) 1、递推期间:将原咨询题接续地分化为新的子咨询题,追渐从未知的向已知的方向猜测,终极达到已知的前提,即递回结束前提,这时递推期间结束. 2、回回期间:从已知前提出发,依照“递推”的逆环节,追一

12、求值回回,终极到达“递推”的最先处,结束回回期间,完成递回调用. 递回实例例8-7:用递回法求n! .解:n!=n*(n-1)*(n-2)*1=n(n-1)!.递回程式: 1 n0,1n!= n*(n-1)! 其它变量的作用域变量的作用域:变量的有效范畴大概变量的可见性.变量定义的位置决意了变量的作用域. 变量的分类变量从作用域(变量的有效范畴,可见性)的角度能够分为:局部变量,全局变量. 局部变量 局部变量:是指在必然范畴内有效的变量.C语言中,在以下列位置定义的变量均属于局部变量.(1)在函数体内定义的变量,在本函数范畴内有效,作用域局限于函数体内.(2)在复合语句内定义的变量,在本复合语

13、句范畴内有效,作用域局限于复合语句内.(3)有参函数的形式指标也是局部变量,只在其所在的函数范畴内有效. 局部变量举例讲明1、差别函数中和差别的复合语句中能够定义(使用)同名变量.因为它们作用域差别,程序运行时在内存中占据差别的存储单元,各自代表差别的对象,所以它们互不干预.即:同名,差别作用域的变量是差别的变量. 讲明2、局部变量所在的函数被调用或履行时,系统临时给相应的局部变量安排存储单元,一旦函数履行结束,那么系统站即释放这些存储单元.所以在各个函数中的局部变量起作用的时候是差别的. 全局变量 全局变量:在函数之外定义的变量.(全部函数前,各个函数之间,全部函数后)全局变量作用域:从定义

14、全局变量的位置起到本源程序结束为止. 讲明1、在引用全局变量时似果使用“extern”表明全局变量,能够张大全局变量的作用域.例似,张大到整个源文件(模块),对多源文件(模块)能够张大到其它源文件(模块).2、在定义全局变量时似果使用修饰关键词static,示意此全局变量作用域仅限于本源文件(模块). 全局变量举例全局变量举例全局变量举例讲明1、全局变量能够和局部变量同名,当局部变量有效时,同名全局变量不起作用. 2、使用全局变量能够增加各个函数之间的信息传输渠道,在一个函数中改变一个全局变量的值,在另外的函数中便能够操纵.但是,使用全局变量使函数的通用性落低,使程序的模块化、结构化变差,所以

15、要慎用、少用全局变量. 变量的存储类不(生活期、生命期) 从变量存在的时候的长短(即变量生活期)来分割,变量还能够分为:动态存储变量、静态存储变量.变量的存储方式决意了变量的生活期. C语言变量的存储方式能够分为:动态存储方式、静态存储方式. 示意图动态存储方式 动态存储方式:在程序运行期间依照需要为相关的变量动态安排存储空间的方式.C语言中,变量的动态存储方式关键有自动型存储方式和寄存器型存储方式. 自动型存储方式(auto) auto型存储方式是C语言默认的局部变量的存储方式,也是局部变量最常使用的存储方式.讲明1、自动变量属于局部变量的范畴,作用域限于定义它的函数或复合语句内. 2、自动

16、变量所在的函数或复合语句履行时,系统动态为相应的自动变量安排存储单元,当自动变量所在的函数或复合语句履行结束后,自动变量失效,它所在的存储单元被系统释放,所以原来的自动变量的值不能保留下来.如果对同一函数再次调用时,系统会对相应的自动变量再一次安排存储单元. 寄存器型存储方式(register) register型存储方式是C语言使用较少的一种局部变量的存储方式.该方式将局部变量存储在CPU的寄存器中,寄存器比内存操纵要快非常多,所以能够将部分需要反复操纵的局部变量存放在寄存器中. 寄存器(局部变量)的定义标准:其中:register为寄存器存储类不关键词,不能省略. 注重 CPU的寄存器数量

17、有限,似果定义了过多的register变量,系统会自动将其中的部分改为auto型变量. 静态存储方式 静态存储方式:在程序编译时便给相关的变量安排固定的存储空间(在程序运行的整个期间内都不变)的存储方式.C语言中,使用静态存储方式的关键有静态存储的局部变量和全局变量. 静态存储的局部变量讲明1、静态局部变量的存储空间是在程序编译时由系统安排的,且在程序运行的整个期间都固定不变.该类变量在其函数调用结束后仍旧能够保留变量值.下次调用该函数,静态局部变量中仍保留上次调用结束时的值. 讲明2、静态局部变量的初值是在程序编译时一次性赋予的,在程序运行期间不再赋初值,往后如果改变了值,保留末了一次改变后

18、的值,直到程序运行结束. 全局变量全部是静态存储的 C语言中,全局变量的存储根基上采纳静态存储方式,即在编译时便为相应全局变量安排了固定的存储单元,且在程序履行的全环节始终连结不变.全局变量赋初值也是在廉价时完成的.因为全局变量全部是静态存储,所以没有必要为讲明全局变量是静态存储而使用关键词static.全局变量的extern表明及令人困惑的全局变量的static定义全局变量的static定义,不是讲明“此全局变量要用静态方式存储”(全局变量天生全部是静态存储),而是讲,那个全局变量只在本源程序模块有效(文件作用域). 全局变量的extern表明及令人困惑的全局变量的static定义似果没有stat

温馨提示

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

评论

0/150

提交评论