【精品】c c++语言程序设计(西电版第5章 函数(可编辑.ppt
《【精品】c c++语言程序设计(西电版第5章 函数(可编辑.ppt》由会员分享,可在线阅读,更多相关《【精品】c c++语言程序设计(西电版第5章 函数(可编辑.ppt(88页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C C+语言程序设计(西电版)第5章 函数2023/2/2第第5章章 函数与函数与预处理命令理命令5.1 C程序程序结构构5.2 函数定函数定义5.3 函数函数调用和函数用和函数说明明5.4 函数的嵌套函数的嵌套调用和用和递归调用用5.5 变量的作用域与存量的作用域与存储方式方式5.6 函数函数间的数据的数据传递5.7 指指针函数函数5.8 函数指函数指针2023/2/25.1 C程序程序结构构 程序程序程序程序结结构清晰,可构清晰,可构清晰,可构清晰,可读读性好。性好。性好。性好。减少重复减少重复减少重复减少重复编码编码的工作量。的工作量。的工作量。的工作量。可多人共同可多人共同可多人共同可
2、多人共同编编制一个大程序,制一个大程序,制一个大程序,制一个大程序,缩缩短程序短程序短程序短程序设计设计周期,提高程序周期,提高程序周期,提高程序周期,提高程序设计设计和和和和调试调试的效率。的效率。的效率。的效率。使用使用使用使用函数函数函数函数的的的的好处好处好处好处C程序程序源程序文件源程序文件n函数函数1函数函数m 源程序文件源程序文件1函数函数1函数函数n2023/2/2一个一个C源程序可以由一个或多个源程序文件源程序可以由一个或多个源程序文件组成。成。C编译系系统在在对C源程序源程序进行行编译时是以文件是以文件为单位位进行的。行的。一个一个C源程序文件可以由一个或多个函数源程序文件
3、可以由一个或多个函数组成。成。所有函数都是独立的。主函数可以所有函数都是独立的。主函数可以调用其它函数,用其它函数,其它函数可以相互其它函数可以相互调用。用。在一个在一个C程序中,有且程序中,有且仅有一个主函数有一个主函数main。C程序的程序的执行行总是从是从main函数开始,函数开始,调用其它函数用其它函数后最后最终回到回到main函数,在函数,在main函数中函数中结束整个程束整个程序的运行。序的运行。说明明2023/2/2函数的种函数的种类从函数定从函数定义形式分:形式分:有参函数:有参函数:在主调(用)函数和被调(用)在主调(用)函数和被调(用)函数之间通过参数进行数据传递,函数之间
4、通过参数进行数据传递,如:如:int cube(int x)无参函数:无参函数:如:如:getchar()在调用无参函数时,主调函数不在调用无参函数时,主调函数不需要将数据传递给无参函数。需要将数据传递给无参函数。从使用的角度看:从使用的角度看:从使用的角度看:从使用的角度看:标准函数(库函数)标准函数(库函数)标准函数(库函数)标准函数(库函数)库函数是由系统提供的。库函数是由系统提供的。库函数是由系统提供的。库函数是由系统提供的。如:如:如:如:getchar()getchar()、sin(x)sin(x)等。等。等。等。在程序中可以直接调用它在程序中可以直接调用它在程序中可以直接调用它在
5、程序中可以直接调用它们。附录们。附录们。附录们。附录A A列出了列出了列出了列出了C C的部的部的部的部分库函数。分库函数。分库函数。分库函数。用户自定义函数。用户自定义函数。用户自定义函数。用户自定义函数。从是否有返回值的角度:从是否有返回值的角度:有返回值函数有返回值函数 无返回值函数无返回值函数从函数调用的角度:从函数调用的角度:主调函数:主调函数:主调主调函数函数是调用其是调用其它函数它函数来实现功能的函数。如来实现功能的函数。如main()函数。函数。被调函数:被被调函数:被主调主调函数调用的函数调用的函数。函数。5.2 函数定函数定义【例例5.2】错误的函数嵌套定义。错误的函数嵌套
6、定义。voidquestion()printf(Howareyou?);voidanswer()/*非法,错误的嵌套定义非法,错误的嵌套定义*/printf(Fine,thankyou.);2023/2/25.2 函数定函数定义有参函数的定有参函数的定义格式格式 返回值类型返回值类型 函数名函数名(参数表列参数表列)说明部分说明部分语句部分语句部分5.2 函数定函数定义【例例5.3】将将给给定的十定的十进进制整数制整数转换转换成相成相应应的字符的字符串串输输出。出。#includestdio.hvoid change(int n)char str10;int i;if(n0);while(-i
7、=0)putchar(stri);/*倒序倒序输输出出*/5.2 函数定函数定义voidmain()inti;printf(Pleaseinputanintegernumber:);scanf(%d,&i);printf(Thestringis:);change(i);/*调调用有参函数用有参函数*/程序的运行结果为:程序的运行结果为:Please input an integer number:139The string is:1395.2 函数定函数定义函数返回函数返回值和和returnreturn语句句形式:形式:return(表达式表达式);return表达式表达式;return;因此
8、,因此,return语句具有两个重要的用途:句具有两个重要的用途:第一,使函数立即退出程序的第一,使函数立即退出程序的执行返回行返回给调用者。用者。第二,可以向第二,可以向调用者返回用者返回值。5.2 函数定函数定义【例例5.4】定定义一个函数,其功能一个函数,其功能为求三个整数求三个整数中的最大中的最大值。#includestdio.hintmax(intx,inty,intz)inttemp;temp=x;if(ytemp)temp=y;if(ztemp)temp=z;returntemp;5.2 函数定函数定义voidmain()inta,b,c;intmax_value;printf(
9、Pleaseinput3integernumbers:);scanf(%d%d%d,&a,&b,&c);max_value=max(a,b,c);printf(nThemaxvalueis%d.n,max_value);5.2 函数定函数定义说明明:(1)return语句中表达式的句中表达式的类型型应与函与函数返回数返回值类型一致,型一致,如果不一致,如果不一致,则以函以函数返回数返回值的的类型型为准准,对于数于数值型数据将型数据将自自动进行行类型型转换。(2)一个函数中可以有多个)一个函数中可以有多个return语句,句,函数在碰到第一个函数在碰到第一个return语句句时返回返回,函,函数
10、返回数返回值为第一个第一个return语句中表达式的句中表达式的值。5.2 函数定函数定义(3)若函数体内没有)若函数体内没有return语句,就一直句,就一直执行到函数体的末尾后返回行到函数体的末尾后返回调用函数。用函数。这时会会带回一个不确定的函数回一个不确定的函数值,若确若确实不不要求要求带回函数回函数值,则应将函数定将函数定义为void类型。型。(4)主函数)主函数main()向向调用用进程程(一般是操作一般是操作系系统)返回一个整数。返回一个整数。用用return从从main()中中返回一个返回一个值等价于用同一等价于用同一值调用用exit()函数函数。如果如果main()中未明确返
11、回中未明确返回值,返回,返回调用用进程的程的值在技在技术上没有定上没有定义。2023/2/2函数名()函数名()5.3 函数函数调用和函数用和函数说明明无参函数调用的一般形式:无参函数调用的一般形式:有参函数调用的一般形式:有参函数调用的一般形式:函数名(参数表)函数名(参数表)按照被按照被调函数在主函数在主调函数中出函数中出现的位置来的位置来分,可以有以下三种函数分,可以有以下三种函数调用方式:用方式:(1)函数函数调用用作作为一个一个语句句。(2)函数)函数调用用出出现在表达式中在表达式中,这时要要求被求被调函数必函数必须带有返回有返回值,返回,返回值将参将参加表达式的运算。加表达式的运算
12、。(3)函数)函数调用用作作为函数的函数的实参参。5.3 函数函数调用和函数用和函数说明明5.3 函数调用和函数说明【例例5.5】库库函数函数pow(a,b)的功能是求的功能是求ab,在主,在主函数中函数中调调用用该该函数的程序函数的程序为为:#include#includevoid main()int a=2,b=3,i=3,j=2;double c;c=pow(a,i)+pow(b,j);printf(c=%f,c);程序运行结果为:程序运行结果为:c=17.0000005.3 函数调用和函数说明函数原型函数原型说明的一般形式明的一般形式为:其中,其中,圆括号括号说明它前面的明它前面的标识
13、符是符是一个函数,注意不能省略,如果省略,就一个函数,注意不能省略,如果省略,就成成为一般一般变量的量的说明了。明了。返回值类型返回值类型 函数名函数名(参数类型表参数类型表);5.3 函数调用和函数说明【例例5.6】定定义义一个函数,函数一个函数,函数suv()功能功能为为求两个求两个浮点数之差,并在主函数中浮点数之差,并在主函数中调调用此函数。用此函数。#include stdio.hvoid main()float suv(float,float);/*对对suv函数函数进进行行说说明明*/float x1,x2,x3;printf(input x1,x2:);scanf(%f%f,&x
14、1,&x2);x3=suv(x1,x2);printf(nsuv=%6.2f,x3);5.3 函数调用和函数说明float suv(float x,float y)printf(%f,%f,x,y);return(x-y);程序运行结果:程序运行结果:Input m:x1,x2:5.1 6.25.100000 6.200000suv=-1.105.3 函数调用和函数说明语言中言中规定在下列几种情况下,可以省去定在下列几种情况下,可以省去主主调函数中函数中对被被调函数的函数的说明明:(1)如果被如果被调函数定函数定义出出现在主在主调函数定函数定义之前,之前,在主在主调函数中不必函数中不必对被被调
15、函数函数进行行原型原型说明。明。(2)如在所有函数定如在所有函数定义之前,在函数外之前,在函数外预先先说明了各个函数的明了各个函数的类型,型,则在以后的各主在以后的各主调函数中,可不再函数中,可不再对被被调函数作函数作说明。明。(3)对库函数的函数的调用不需要再作用不需要再作说明明,但,但必必须把把该函数的函数的头文件用文件用#include命令包含命令包含在源文件在源文件头部。部。5.3.4函数调用的执行过程【例例5.7】编写计算求编写计算求n!的函数。的函数。程序运行结果:程序运行结果:Input m:33!=65.3.4函数调用的执行过程调用函数的用函数的过程分程分为如下几步:如下几步:
16、l第一步,将第一步,将实参的参的值赋给形参。形参。l第二步,将程序第二步,将程序执行流程从主行流程从主调函数的函数的调用用语句句转到被到被调函数的定函数的定义部分,部分,执行被行被调函数的函函数的函数体;数体;l第三步,当第三步,当执行到被行到被调函数函数体的第一个函数函数体的第一个return语句或者最右句或者最右边的一个大花括号的一个大花括号时,程序,程序执行流程返回到主行流程返回到主调函数的函数的调用用语句。如果句。如果调用用语句是表达式的一部分,句是表达式的一部分,则应用函数的返回用函数的返回值参参与表达式运算之后与表达式运算之后继续向下向下执行;如果行;如果调用用语句句是是单独一条独
17、一条语句句则直接直接继续向下向下执行。行。l第四步,返回主第四步,返回主调函数,函数,带回返回回返回值。5.4函数的嵌套函数的嵌套调用和用和递归调用用l5.4.1函数的嵌套函数的嵌套调用用函数定函数定义部分不能嵌套部分不能嵌套,各个函数定,各个函数定义是相是相对独立的,独立的,但是任何函数内部都可以但是任何函数内部都可以调用另外的函数用另外的函数(不包含(不包含main()函数)。函数)。这样一个函数一个函数调用另一个函数,而另一个用另一个函数,而另一个函数又可以函数又可以调用其他的函数的用其他的函数的调用用过程,程,就形成了函数的嵌套就形成了函数的嵌套调用。用。【例例5.8】编写写计算算=值
18、的程序的程序#includelongfact(intx)/*计算算x的的阶乘乘*/longy;for(y=1;x0;x-)y=y*x;return(y);longrequire(intn,intm)/*计算的算的值*/longz;z=fact(n)/(fact(m)*fact(n-m);returnz;5.4.1函数的嵌套函数的嵌套调用用5.4.1函数的嵌套函数的嵌套调用用voidmain()intm,n;longintresult;printf(inputnandm:);scanf(%d,%d,&n,&m);result=require(n,m);printf(nresult=%ld;,re
19、sult);在在这个程序中,函数个程序中,函数调用用执行行顺序如下序如下图所示。所示。5.4.1函数的嵌套函数的嵌套调用用5.4.2函数的函数的递归调用用在在调用一个函数的用一个函数的过程中如果出程中如果出现直接直接或或间接接调用函数自身用函数自身(除主函数(除主函数main()外)外)的的过程,称程,称为函数的函数的递归调用用。C语言的言的特点之一就在于允特点之一就在于允许函数函数递归调用。函数用。函数递归调用分用分为直接直接调用和用和间接接调用,用,执行行过程如程如图5.4和和图5.5所示。所示。5.4.2函数的函数的递归调用用intf(intx;)inty,z;z=f(y);return
20、(2*z);调用函数f()跳出函数f()再次调用自己(1)(2)(3)intf1(intx)intf2(intt)inty,z;inta,c;z=f2(y);z=f1(a);return(2*z);return(2+c);调用函数f1()(1)(2)(3)5.4.2函数的函数的递归调用用5.4.2函数的函数的递归调用用【例例5.9】用用递归方法求方法求n!。回推过程:回代过程:f(5)=5*4*3*2*1f(5)=5*f(4)f(4)=4*3*2*1f(4)=4*f(3)f(3)=3*2*1 f(3)=3*f(2)f(2)=2*1f(2)=2*f(1)f(1)=1 5.4.2函数的函数的递归调
21、用用#includelongfac(intn)if(n0)printf(n0,dataerror!);return0;elseif(n=0|n=1)return1;elsereturn(fac(n-1)*n);voidmain()intn;longy;printf(n=);scanf(%d,&n);y=fac(n);printf(n%d!=%ld,n,y);程序运行结果:程序运行结果:n=5 5!=120变量完整定量完整定义语句格式如下:句格式如下:完整的完整的变量定量定义语句包括三个方面:一是句包括三个方面:一是变量的数量的数据据类型型,例如,例如int、float、char等;二是等;二是
22、变量的作量的作用域用域,表示一个,表示一个变量在程序中能量在程序中能够被使用到的范被使用到的范围,它是由它是由变量定量定义所在位置决定的;三是所在位置决定的;三是变量的存量的存储类别,表示,表示变量在内存中的存量在内存中的存储方式,直接决定了方式,直接决定了变量占用分配量占用分配给它存它存储空空间的的时限。限。5.5 变量的作用域与存量的作用域与存储方式方式 变量名变量名=初始值初始值;5.5.1变量的作用域量的作用域1.局部局部变量量在在函数内部定函数内部定义的的变量、形参及复合量、形参及复合语句句块中定中定义的的变量都称量都称为局部局部变量量,局部,局部变量只在定量只在定义它的函数内或复合
23、它的函数内或复合语句内有效,其他的函数或句内有效,其他的函数或程序程序块不能不能对它它进行存取操作。因此,在不同函行存取操作。因此,在不同函数内定数内定义的局部的局部变量可以同名,它量可以同名,它们代表的代表的对象象不同,互不影响。不同,互不影响。5.5.1变量的作用域量的作用域关于局部关于局部变量有如下几点量有如下几点说明:明:(1)主函数)主函数main()中定中定义的的变量只在主函数中有量只在主函数中有效,在其他函数中无效;效,在其他函数中无效;(2)函数中的形参也是局部)函数中的形参也是局部变量,只在本函数内量,只在本函数内有效;有效;(3)在一个函数内部复合)在一个函数内部复合语句中
24、可以定句中可以定义变量,量,这些些变量只在本复合量只在本复合语句中有效;句中有效;(4)不同的函数内部可以定)不同的函数内部可以定义相同名字的相同名字的变量,量,它它们名字名字虽然相同,但代表的然相同,但代表的对象却不同,象却不同,为它它们分配的存分配的存储单元也不同。元也不同。5.5.1变量的作用域量的作用域【例例5.11】分析下面程序的运行分析下面程序的运行结果。果。#includevoidmain()intx;/*主函数内定主函数内定义的局部的局部变量量*/x=10;if(x=10)intx;/*if复合复合语句中定句中定义的局部的局部变量量*/x=100;printf(Innerx:%
25、dn,x);printf(Outerx:%dn,x);程序的运行结果为:程序的运行结果为:Inner x:100Outer x:105.5.1变量的作用域量的作用域2.全局全局变量量全局全局变量又称作量又称作外部外部变量量、全程全程变量量,是,是在在函数外部定函数外部定义的的变量量。其。其有效范有效范围为从从定定义变量的位置开始到本源文件量的位置开始到本源文件结束束。全。全局局变量的使用量的使用说明:明:(1)尽量)尽量限制限制全局全局变量的使用。量的使用。(2)全局)全局变量的量的定定义与与说明有所区明有所区别。(3)同一个源文件中局部)同一个源文件中局部变量与全局量与全局变量可以同名,在量
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 精品 【精品】c c+语言程序设计西电版第5章 函数可编辑 c+ 语言程序设计 西电版第 函数 编辑
限制150内