C程序设计第七章函数.ppt
《C程序设计第七章函数.ppt》由会员分享,可在线阅读,更多相关《C程序设计第七章函数.ppt(77页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Chapter7-FunctionsOutline7.1Introduction7.2Program Modules in C7.3Math Library Functions7.4Functions7.5Function Definitions7.6Function Prototypes7.7Header Files7.8Calling Functions:Call by Value and Call by Reference7.9Random Number Generation7.10Example:A Game of Chance7.11Storage Classes7.12Scope
2、Rules7.13Recursion7.14Example Using Recursion:The Fibonacci Series7.15Recursion vs.Iteration17.1IntroductionDivideandConquer分而治之ConstructaprogramfromsmallerpiecesorcomponentsEachpiecemoremanageablethantheoriginalprogram函数函数是一段完成特定任务的程序。是一段完成特定任务的程序。2模块化程序设计模块化程序设计基本思想:将一个大的程序按功能分割成一些小模块特点:各模块相对独立、功能
3、单一、结构清晰、接口简单控制了程序设计的复杂性提高元件的可靠性缩短开发周期避免程序开发的重复劳动易于维护和功能扩充开发方法:自上向下,逐步分解,分而治之3C程序结构&C是函数式语言&必须有且只能有一个名为main的主函数&C程序的执行总是从main函数开始,在main中结束&函数不能嵌套定义,可以嵌套调用C是模块化程序设计语言是模块化程序设计语言47.2Program Modules in CFunctionsModulesinCProgramswrittenbycombininguser-definedfunctionswithlibraryfunctionsCstandardlibrary
4、hasawidevarietyoffunctionsMakesprogrammersjobeasier-avoidreinventingthewheel57.2Program Modules in C(II)Functioncalls函数调用Invokingfunctions调用函数Providefunctionnameandarguments(data)FunctionperformsoperationsormanipulationsFunctionreturnsresultsBossasksworkertocompletetaskWorkergetsinformation,doestask
5、,returnsresultInformationhiding:bossdoesnotknowdetails67.3Math Library FunctionsMathlibraryfunctionsperformcommonmathematicalcalculations#includeFormatforcallingfunctionsFunctionName(argument);Ifmultiplearguments,usecomma-separatedlistprintf(%.2f,sqrt(900.0);Callsfunctionsqrt,whichreturnsthesquarero
6、otofitsargumentAllmathfunctionsreturndatatypedoubleArgumentsmaybeconstants,variables,orexpressions77.4FunctionsFunctionsModularizeaprogramAllvariablesdeclaredinsidefunctionsarelocalvariables(局部变量)KnownonlyinfunctiondefinedParametersCommunicateinformationbetweenfunctionsLocalvariablesBenefitsDividean
7、dconquerManageableprogramdevelopmentSoftwarereusabilityUseexistingfunctionsasbuildingblocksfornewprogramsAbstraction-hideinternaldetails(libraryfunctions)Avoidscoderepetition87.5Function DefinitionsFunctiondefinitionformatreturn-value-type function-name(parameter-list)declarations and statementsFunc
8、tion-name:anyvalididentifierReturn-value-type:datatypeoftheresult(defaultint)void-functionreturnsnothingParameter-list:commaseparatedlist,declaresparameters(defaultint)97.5Function Definitions(II)Functiondefinitionformat(continued)return-value-type function-name(parameter-list)declarations and state
9、mentsDeclarationsandstatements:functionbody(block)Variablescanbedeclaredinsideblocks(canbenested)FunctioncannotbedefinedinsideanotherfunctionReturningcontrolIfnothingreturnedreturn;or,untilreachesrightbraceIfsomethingreturnedreturnexpression;101.无参函数的定义形式无参函数的定义形式类型标识符类型标识符 函数名(函数名()说明部分说明部分 语句语句 例如
10、:printstar()printf(“*n”);无参数传递无参数传递有参数传递有参数传递2.有参函数的定义形式有参函数的定义形式 类型标识符类型标识符 函数名(形式参数表列)函数名(形式参数表列)形式参数说明形式参数说明 说明部分说明部分 语句语句 11例int max(int x,int y)int z;z=xy?x:y;return z;/*求x和y二者中大者,x,y为形参*/*形参说明必须在函数体外*/*函数体中变量的说明*/*将z的值作为函数返回值,该值的类型应该和类型标识符确定的函数的类型一致。*/3.空函数的定义形式空函数的定义形式类型标识符类型标识符 函数名函数名()例如:du
11、mmy()特点:调用后什么也不做。用处:建立程序结构,在需要时补充功能。127.5 函数参数函数参数1.形式参数和实际参数形式参数和实际参数形式参数形式参数:在定义函数时函数名后面括弧中的变量名,简称形参形参。实际参数实际参数:在调用函数时函数名后面括弧中的表达式,简称实参实参。例main()int a,b,c;scanf(“%d,%d”,&a,&b);c=max(a,b);printf(“Max is%d”,c);int max(int x,int y)int z;z=xy?x:y;return(z);13上例中形参与实参、函数名与返回值之间的关系:上例中形参与实参、函数名与返回值之间的关系
12、:c=max(a,b);-实参实参:在运行时把函数的 max(int x,int y)把值传给函数.结果赋给 函数名 returu(z);形参形参:通知系统 要预留内存位置.14形参调用前不占内存单元,调用时占用,调用后释形参调用前不占内存单元,调用时占用,调用后释放。放。形参是函数的内部变量,只在函数内部才有意义。形参是函数的内部变量,只在函数内部才有意义。对每个形参必须指明其名字和数据类型。对每个形参必须指明其名字和数据类型。实参必须有确定的值,可以是常量,变量或表达式。实参必须有确定的值,可以是常量,变量或表达式。实参与形参的类型个数应一致。实参与形参的类型个数应一致。实参对形参的数据传
13、递是值传递,即单向传递,只实参对形参的数据传递是值传递,即单向传递,只由实参传递给形参,反之不可。调用结束后,只有由实参传递给形参,反之不可。调用结束后,只有形参单元被释放,形参单元被释放,实参单元中的值不变实参单元中的值不变。2.关于参数的几点说明关于参数的几点说明:15返回语句形式:return(表达式);或return表达式;或return;功能:使程序控制从被调用函数返回到调用函数中,同时把返值带给调用函数说明:函数中可有多个return语句若无return语句,遇时,自动返回调用函数若函数类型与return语句中表达式值的类型不一致,按前者为准,自动转换-函数调用转换void型函数例
14、无返回值函数voidswap(intx,inty)inttemp;temp=x;x=y;y=temp;函数的返回值函数的返回值16 函数定义时应该指定函数的类型函数定义时应该指定函数的类型(即函数值即函数值的类型),应该与的类型),应该与return语句的类型一致。语句的类型一致。说明说明:凡不加类型说明的函数,一律自动按整型处理。如果函数类型和return语句的类型不一致,以函数类型为准。对数值型数据,可以自动进行类型转换。即函数类型决定返回值的类型。如果函数不返回值,可以将函数定义为“无类型”void(或称“空类型”)。例如:voidprint_star()函数值的类型函数值的类型17Ou
15、tline1.Function prototype(3 parameters)2.Input values2.1 Call function3.Function definition4.Program Output1/*Fig.7.4:fig07_04.c2Findingthemaximumofthreeintegers*/3#include45intmaximum(int,int,int);/*functionprototype*/67intmain()89inta,b,c;1011 printf(Enterthreeintegers:);12 scanf(%d%d%d,&a,&b,&c);
16、13 printf(Maximumis:%dn,maximum(a,b,c);1415 return0;16 1718/*Functionmaximumdefinition*/19 intmaximum(intx,inty,intz)20 21 intmax=x;2223 if(ymax)24 max=y;2526 if(zmax)27 max=z;2829 returnmax;30 Enterthreeintegers:228517Maximumis:857.6Function PrototypesFunctionprototype函数原型FunctionnameParameters-wha
17、tthefunctiontakesinReturntype-datatypefunctionreturns(defaultint)UsedtovalidatefunctionsPrototypeonlyneedediffunctiondefinitioncomesafteruseinprogramintmaximum(int,int,int);Takesin3intsReturnsanintPromotionrules(提升规则)andconversionsConvertingtolowertypescanleadtoerrors197.3 对被调用函数的说明对被调用函数的说明(声明)(声明)
18、对被调用函数说明的前提条件对被调用函数说明的前提条件被调用函数必须是已存在的函数,如用户自定义函数或库函数。2.被调用函数是用户自定义函数的函数说明被调用函数是用户自定义函数的函数说明同变量一样,函数的调用也应该遵循“先说先说明,后使用明,后使用”的原则。如果使用用户自定义函数,而且主调函数和被调用函数在同一个文件中,应该在主调函数中说明被调函数的类型。其说明格式的一般形式如下:20一般形式:一般形式:类型标识符类型标识符 函数名函数名(类型类型1 1,类型,类型2 2,);类型标识符类型标识符 函数名函数名(类型类型1 1 形参形参1 1,类型,类型2 2 形参形参2,);2,);功能:功能
19、:通知编译程序函数值是什么类型,有多少参数及它们各自的类型,为编译程序进行类型检查提供依据。main()float add(float x,float y);float a,b,c;scanf(“%f,%f”,&a,&b);c=add(a,b);printf(“sum is%f”,c);/*定义定义add函数函数*/float add(float x,float y)float z;z=x+y;return(z);对被调用函数的说明作为表达式被调用213.函数说明和函数定义的区别函数说明和函数定义的区别 函数说明函数说明的作用是把函数的名字、函数类型以及形参的类型、个数和顺序通知编译系统,以便
20、在调用该函数时系统按此进行对照检查。函数定义函数定义是指对函数功能的确立,包括指定函数名、函数值类型、形参及其类型、函数体等,它是一个完整的、独立的函数单位。227.7Header FilesHeaderfilescontainfunctionprototypesforlibraryfunctions,etcLoadwith#include#includeCustomheaderfilesCreatefilewithfunctionsSaveasfilename.hLoadinotherfileswith#includefilename.hReusefunctions23函数概述在C语言中,子
21、程序被称为函数一个C程序一般由多个函数组成,其中必须有一个且仅有一个名为main主函数。C程序总是从main函数开始执行main函数可以调用其它函数,反之不行。有两类函数:标准库函数;用户自定义函数。longsquare(longx)longx_square;x_square=x*x;returnx_square;举例说明函数声明,调用,函数定义,说明部分,执行部分函数名字必须唯一。函数是独立的封闭的。互相不干扰。24例:输入三个整数,计算它们的和并输出运算结果。例:输入三个整数,计算它们的和并输出运算结果。main()int a,b,c,sum;scanf(%d,%d,%d,&a,&b,&c
22、);sum=add(a,b,c);printf(sum=%dn,sum);int add(int x,int y,int z)int s;s=x+y+z;return s;25调用形式函数名(实参表);说明:实参与形参个数相等,类型一致,按顺序一一对应实参表求值顺序,因系统而定(TurboC自右向左)函数的调用函数的调用26函数语句:例printstar();printf(“Hello,World!n”);函数表达式:例m=max(a,b)*2;函数参数:例printf(“%d”,max(a,b);m=max(a,max(b,c);函数的调用方式函数的调用方式27例:用函数计算浮点数例:用函数
23、计算浮点数x的的n次方,其中次方,其中n为为int型型,n=0double power(double x,int n)double p;int i;for(p=i=1;i=n;i+)p=p*x;return p;28例:计算函数的值例:计算函数的值.f(x)=int f(int x)int y;if(x0)y=x-1;else if(x=0)y=1;else y=x+1;return y;X+1X-11X0X=0main()int x;scanf(“%d”,&x);printf(“f(x)=%d”,f(x);297.8Calling Functions:Call by Value and Ca
24、ll by ReferenceUsedwheninvokingfunctionsCallbyvalueCopyofargumentpassedtofunctionChangesinfunctiondonoteffectoriginalUsewhenfunctiondoesnotneedtomodifyargumentAvoidsaccidentalchangesCallbyreferencePassesoriginalargumentChangesinfunctioneffectoriginalOnlyusedwithtrustedfunctionsFornow,wefocusoncallby
25、value30值传递值传递方式方式方式:函数调用时,为形参分配单元,并将实参的值复制到形参中;调用结束,形参单元被释放,实参单元仍保留并维持原值特点:形参与实参占用不同的内存单元单向传递参数传递方式参数传递方式31711x:y:调用前:调用结束:711x:y:/*swap.c*/#includemain()intx=7,y=11;printf(x=%d,ty=%dn,x,y);printf(swapped:n);swap(x,y);printf(x=%d,ty=%dn,x,y);swap(inta,intb)inttemp;temp=a;a=b;b=temp;调用:711a:b:711x:y:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 第七 函数
限制150内