收藏 分销(赏)

函数(0003)省公共课一等奖全国赛课获奖课件.pptx

上传人:快乐****生活 文档编号:3090856 上传时间:2024-06-17 格式:PPTX 页数:73 大小:1.60MB
下载 相关 举报
函数(0003)省公共课一等奖全国赛课获奖课件.pptx_第1页
第1页 / 共73页
函数(0003)省公共课一等奖全国赛课获奖课件.pptx_第2页
第2页 / 共73页
函数(0003)省公共课一等奖全国赛课获奖课件.pptx_第3页
第3页 / 共73页
函数(0003)省公共课一等奖全国赛课获奖课件.pptx_第4页
第4页 / 共73页
函数(0003)省公共课一等奖全国赛课获奖课件.pptx_第5页
第5页 / 共73页
点击查看更多>>
资源描述

1、第7章函数 学习目标和要求:学习目标和要求:1.掌握函数申明与定义掌握函数申明与定义。2.了了解解并并掌掌握握函函数数调调用用时时参参数数传传递递中中形式参数与实际参数结合方式。形式参数与实际参数结合方式。3.强调对main函数学习与了解。推荐课时推荐课时:56课时课时第1页第7章函数 1.在在C语语言言中中,函函数数实实际际上上就就是是一一段段代代码码总总称称,比比如如,我我们们已已经经熟熟知知main()函函数数和和printf()、scanf()等等函函数数,其其中中,main()函函数数是是我我们们用用户户自自己己编编写写一一段段代代码码,printf()和和scanf()函函数数所所

2、对对应应代代码码是是C系系统统已已经经写写好好,只只要要按按照照格格式式调调用用它它们即可。们即可。2.函数是函数是C语言程序基本组成单元语言程序基本组成单元 3.第2页在C语言中,能够从不一样角度对函数进行分类。(1)从函数角度分,可分为库函数和用户自定义函数。库函数:由C系统提供函数。这类函数用户无需定义,也无须在程序中作类型说明,只需在程序前包含有该函数原型头文件,即可在程序中直接调用。如前面重复用到过printf()、scanf()等函数。(2)从函数有没有返回值分,可分为有返回值函数和无返回值函数。(3)从主调函数和被调函数之间数据传送角度分,可分为无参函数和有参函数。n无参函数:函

3、数定义、函数说明及函数调用中均不带参数,主调函数和被调函数之间不进行参数传送。7.1 函数分类函数分类 第3页 库函数示例库函数示例 第4页用户自定义函数示例用户自定义函数示例第5页无参函数示例无参函数示例不带参数不带参数第6页有参函数:也称带参函数。函数定义与函数说明时都带参有参函数:也称带参函数。函数定义与函数说明时都带参数,称为形式参数(简称形参)。函数调用时也必须给数,称为形式参数(简称形参)。函数调用时也必须给出参数,称为实际参数(简称实参)。在进行函数调用出参数,称为实际参数(简称实参)。在进行函数调用时,主调函数将实参传递给形参,供被调用函数使用。时,主调函数将实参传递给形参,供

4、被调用函数使用。7.1 函数分类函数分类 第7页有参函数示例有参函数示例 带参数带参数aa为形式参数为形式参数,999为实际参数为实际参数第8页7.2 函数定义函数定义用用户户自自定定义义函函数数必必须须定定义义后后才才能能使使用用,函函数数定义即编写实现函数功效程序模块。定义即编写实现函数功效程序模块。第9页例例7.1 使用函数:编写程序求使用函数:编写程序求n!(n!=12(n-1)n)第10页分析说明分析说明 语语句句第第211行行是是main()函函数数即即主主调调函函数数,语语句句第第1321行行是是自自定定义义函函数数fact(),功功效效是是求求n!。对对照照输输出出结结果果能能

5、够够看看出出,程程序序运运行行时时,在在main函函数数中中,输输入入n=10,然然后后调调用用fact函函数数,程程序序转转去去执执行行fact函函数数,计计算算出出10!值值,所所求求结结果果返返回回main()函函数数,输输出出10!值值。在在这这个个程序中包括到了函数定义、函数调用等知识点。程序中包括到了函数定义、函数调用等知识点。第11页函数定义语法函数定义语法定义函数语法形式为:定义函数语法形式为:类型标识符函数名(形式参数列表)类型标识符函数名(形式参数列表)函数体;函数体;第12页强调说明强调说明 n类型标识符:指明本函数类型,即调用该函数后所得到函数类型标识符:指明本函数类型

6、,即调用该函数后所得到函数值类型,函数值经过值类型,函数值经过return语句提供。语句提供。n函数名:要定义函数名字,命名要符合函数名:要定义函数名字,命名要符合C对标识符要求,函数对标识符要求,函数名后跟一对圆括号。名后跟一对圆括号。n形式参数(形参):必须是变量,放在函数名后一对圆括号形式参数(形参):必须是变量,放在函数名后一对圆括号中,形参给出全部形参类型和名称,其语法形式为:中,形参给出全部形参类型和名称,其语法形式为:类型类型1 形参形参1,类型,类型2 形参形参2,类型类型n 形参形参nn各参数间用逗号间隔。各参数间用逗号间隔。n假如函数没有形参,函数为无参函数,不然函数为有参

7、函数。假如函数没有形参,函数为无参函数,不然函数为有参函数。第13页强调说明强调说明假如函数没有形参,函数体也没有任何语句,则函数为空函数。空函数表示什么也不做,没有任何实际作用,但该函数功效能够在需要时补充上,空函数在程序设计中是经惯用。空函数语法形式为:类型标识符函数名()类型标识符函数名()第14页函数不能嵌套定义,即在一个函数定义中函数不能嵌套定义,即在一个函数定义中不能再定义另一个函数不能再定义另一个函数。因为全部函数都是平行,在定义函数时是分因为全部函数都是平行,在定义函数时是分别进行,是相互独立,一个函数不隶属于别进行,是相互独立,一个函数不隶属于另一函数。另一函数。强调说明强调

8、说明第15页7.3 函数调用函数调用 定义一个函数后,就能够在程序中使用这定义一个函数后,就能够在程序中使用这个函数,称函数调用。个函数,称函数调用。其中自定义函数称为其中自定义函数称为“被调函数被调函数”,调用,调用它函数称为它函数称为“主调函数主调函数”。第16页此处为函数调用此处为函数调用fact为被调函数为被调函数main为主调函数为主调函数第17页函数原型申明函数原型申明 C语言中调用标准库函数时,只需在程序语言中调用标准库函数时,只需在程序前用前用#include命令包含对应头文件。命令包含对应头文件。调用自定义函数时,程序要有与调用函数相调用自定义函数时,程序要有与调用函数相对应

9、函数定义,即在主调函数调用某函数对应函数定义,即在主调函数调用某函数之前应对被调用函数进行申明,这与使用之前应对被调用函数进行申明,这与使用变量之前要先申明变量是一样。变量之前要先申明变量是一样。第18页 函数申明目标是说明函数类型和参数情况。函数申明目标是说明函数类型和参数情况。函数申明普通语法形式为:函数申明普通语法形式为:类型标识符函数名类型标识符函数名(形式参数列表形式参数列表);第19页(1)函数申明语法形式可写成两种形式:函数申明语法形式可写成两种形式:类型标识符函数名类型标识符函数名(参数类型参数类型1,参数类型,参数类型2,,参数,参数类型类型n);类型标识符函数名类型标识符函

10、数名(参数类型参数类型1,参数名,参数名1,参数类,参数类型型n,参数名参数名n);(2)函数原型与函数首部写法要一致,即函数类型、函数函数原型与函数首部写法要一致,即函数类型、函数名、参数个数、参数类型和参数次序必须相同。但函名、参数个数、参数类型和参数次序必须相同。但函数申明是数申明是C语言一条语句,必须以分号结束。语言一条语句,必须以分号结束。(3)在调用函数前,既不定义函数,也不申明函数,程序在调用函数前,既不定义函数,也不申明函数,程序编译时会犯错。编译时会犯错。强调说明强调说明第20页 假如自定义函数放在主调函数之前,能够不申明函数原型,反之则必须在调用前申明函数原假如自定义函数放

11、在主调函数之前,能够不申明函数原型,反之则必须在调用前申明函数原型;假如已在文件开头(全部函数前),对文件中使用函数进行了申明,则在各函数中无须型;假如已在文件开头(全部函数前),对文件中使用函数进行了申明,则在各函数中无须对其所调用函数再作申明。比如:对其所调用函数再作申明。比如:int f1(int a,int b);float f2(float m,float n);void main()/*main函数要调用函数函数要调用函数f1和和f2*/f1(2,3);/*调用函数调用函数f1前,无须函数前,无须函数f1进行申明进行申明*/int f1(int a,int b)/*定义函数定义函数

12、f1*/float f2(1.2,2.8);/*调用函数调用函数f2前,无须函数前,无须函数f2进行申明进行申明*/float f2(float m,float n)/*定义函数定义函数f2*/强调说明强调说明第21页函数调用语法形式函数调用语法形式 函数调用语法形式为:函数调用语法形式为:函数名(实际参数列表);函数名(实际参数列表);【强调说明】【强调说明】(1)实际参数(实参)能够是常量、变量和表示示,各参数之间用逗号分隔。实际参数(实参)能够是常量、变量和表示示,各参数之间用逗号分隔。(2)对无参函数调用时,无实际参数。对无参函数调用时,无实际参数。(3)函数调用方式有三种:函数调用方

13、式有三种:函数语句:函数语句:把函数调用作为一个语句。函数能完成一定操作。比如把函数调用作为一个语句。函数能完成一定操作。比如printf(“%d”,a);。);。函数表示式:函数表示式:函数出现在一个表示式中,这种表示式称为函数表示式。函数出现在一个表示式中,这种表示式称为函数表示式。这时要求函数带回一个确定值以参加表示式运算。这时要求函数带回一个确定值以参加表示式运算。比如:比如:*(,);。(,);。函数参数:函数参数:将函数调用作为一个函数实参。将函数调用作为一个函数实参。比如:比如:m=max(a,max(b,c);其中其中max(b,c)是一次函数调用,它值作为是一次函数调用,它值

14、作为max另一次调用实参。另一次调用实参。m值是值是a、b、c三者中最大者。三者中最大者。第22页参数传递参数传递 函数调用时经过参数传递来传递数据,函数调用时经过参数传递来传递数据,即将实参值传递给形参。即将实参值传递给形参。(1)函数定义中形参和函数调用中实参在个数、类型上应该一致,实函数定义中形参和函数调用中实参在个数、类型上应该一致,实参加形参按次序对应,一一传递数据。参加形参按次序对应,一一传递数据。(2)形参只有当调用时才暂时分配存放单元,实参一定要有确定值,形参只有当调用时才暂时分配存放单元,实参一定要有确定值,能够是表示式。能够是表示式。(3)在参数传递过程中,将实参值复制给形

15、参,这种传递是单向,称在参数传递过程中,将实参值复制给形参,这种传递是单向,称为为“值传递值传递”,即实参将值复制给形参,即使形参值在函数中发,即实参将值复制给形参,即使形参值在函数中发生了改变,也不会影响到实参。生了改变,也不会影响到实参。(4)参数传递还有一个方式是参数传递还有一个方式是“按址传递按址传递”,此方式要利用数组或指,此方式要利用数组或指针实现。针实现。第23页(1)函数定义中形参和函数调用中实参在个数、类型上应该一致,实参加形参按次序函数定义中形参和函数调用中实参在个数、类型上应该一致,实参加形参按次序对应,一一传递数据。对应,一一传递数据。比如比如:int jiaquanp

16、ingjun(float,float,float,n);/函数原型申明函数原型申明void main();avg=jiaquanpingjun(99.7,55.0,87.8,3);/函数调用函数调用(2)形参只有当调用时才暂时分配存放单元,实参一定要有确定值,能够是表示式。形参只有当调用时才暂时分配存放单元,实参一定要有确定值,能够是表示式。强调说明强调说明形参和实参个数、类型形参和实参个数、类型一致,次序对应。一致,次序对应。第24页强调说明强调说明(3)在参数传递过程中,将实参值复制给形参,在参数传递过程中,将实参值复制给形参,这种传递是单向,称为这种传递是单向,称为“值传递值传递”,即实

17、参将,即实参将值复制给形参,即使形参值在函数中发生了改值复制给形参,即使形参值在函数中发生了改变,也不会影响到实参。变,也不会影响到实参。(4)参数传递还有一个方式是参数传递还有一个方式是“按址传递按址传递”,此,此方式要利用数组或指针实现。方式要利用数组或指针实现。第25页例7.2:值传递示例第26页结果为:第27页分析说明:程序中程序中a,b是实参,是实参,x,y是形参,函数是形参,函数swap实现两实现两数交换。从键盘输入数交换。从键盘输入a=4、b=9,执行,执行swap(a,b)函数时,系统自动给形参函数时,系统自动给形参x、y分配内存单元。如图分配内存单元。如图7.1所表示,并将实

18、参所表示,并将实参a、b值对应传递给形参值对应传递给形参x、y,即,即x=4,y=9,然后执行,然后执行swap函数体,交换函数体,交换x、y值。值。从程序运行结果看,数据交换前后,从程序运行结果看,数据交换前后,a值都是值都是4,b值值都是都是9,交换前后数据不变;而形参,交换前后数据不变;而形参x、y进行了数据进行了数据交换,交换前后值不一样。这说明参数传递是值传递,交换,交换前后值不一样。这说明参数传递是值传递,形参值不能传回给实参,形参值改变不会影响实参。形参值不能传回给实参,形参值改变不会影响实参。第28页yx4499abxya a4499b图图7.17.1实参对形参数据传递图实参对

19、形参数据传递图第29页函数值(函数返回值)是指函数被调用后,执行函数体中程序段所得并返回给主调函函数值(函数返回值)是指函数被调用后,执行函数体中程序段所得并返回给主调函数值。数值。【强调说明】【强调说明】(1)函数值只能经过函数值只能经过return语句返回主调函数,其语法形式为:语句返回主调函数,其语法形式为:return 表示式;表示式;或者为或者为return(表示式);(表示式);先求表示式值,再返回其值。先求表示式值,再返回其值。return功效一是使流程返回主调函数,宣告函数一次执行终止,二是将函数值返回主调函数。功效一是使流程返回主调函数,宣告函数一次执行终止,二是将函数值返回

20、主调函数。函数中允许有多个函数中允许有多个Return语句,但每次调用只执行一个语句,但每次调用只执行一个return语句,所以语句,所以return语句只能返回语句只能返回一个值。一个值。(2)return提供函数值类型应与函数定义中函数类型一致。假如不一致,以函数类型为准,自动提供函数值类型应与函数定义中函数类型一致。假如不一致,以函数类型为准,自动进行类型转换。进行类型转换。(3)假如函数值为整型(假如函数值为整型(int),在函数定义中能够省略类型说明。),在函数定义中能够省略类型说明。(4)不返回函数值函数,能够明确定义为空类型,类型标识为不返回函数值函数,能够明确定义为空类型,类型

21、标识为“void”,函数体中不得出现,函数体中不得出现return语句。语句。函数返回值函数返回值 第30页使用函数编写程序使用函数编写程序【例【例7.4】计算表示式值。】计算表示式值。xxx+1 (x0)x+1 (x=0)x+x+3 (x=0)y=y=第31页代代码码1116行行为为自自定定义义函函数数。代代码码29行行为为主主调调函函数数。代代码码8行行在在printf()函函数数中中直直接接调调用用函函数数y。代代码码14、16行行依依据据x取取值值将将结结果果返返回回return到主调函数到主调函数main第32页例7.5:求三个正整数最大条约数。求三个正整数最大条约数。代码8行和代码

22、9行两次调用gcd用于求3个数最大条约数,第一次调用求a,b最大条约数,保留求得结果在g中,第二次调用求g,c最大条约数。代码13行23行定义了求两个正整数最大条约数函数。采取算法是辗转相除法。第33页mnr57r为2,不为0,执行while循环7%5m=5n=2r=5%2r为1,不为0,执行while循环m=2n=1r=2%1525%2212%1r为0,循环结束结果保留在n中辗转相除求最大条约数辗转相除求最大条约数int gcd(int m,int n)int r;r=m%n;while(r!=0)m=n;n=r;r=m%n;return n;请大家一定要注意和教材比较,结果为何保留在n中第

23、34页例7.6:求求100以内全部素数。以内全部素数。第35页第36页结果为:结果为:第37页7.5函数嵌套与递归调用C语言中不允许函数嵌套定义,但允许在语言中不允许函数嵌套定义,但允许在一个函数中出现对另一个函数调用,这一个函数中出现对另一个函数调用,这就是函数嵌套调用,即在函数中又调用就是函数嵌套调用,即在函数中又调用其它函数。其它函数。第38页嵌套调用嵌套调用main 函数a函数结束b函数调用a函数调用b函数函数嵌套调用图第39页例7.7:求求 1!+2!+3!+n!第40页循环嵌套常见形式:(3)for(;)for(;)(4)while()dowhile();第41页循环嵌套常见形式:

24、(5)for(;)while()(6)dofor(;)第42页break 语句语句break语句通惯用在循环语句和多分支语句中。当break用于多分支语句switch中时,可使程序跳出switch而执行switch以后语句。第43页例例6.10:代码1924行将低于60分成绩都转换成E等级。代码25行default后break能够省略,也能够写上。读者自行测试。百分制转换成百分制转换成A,B,C,D,E等级制。等级制。第44页当break语句用于do-while、for、while循环语句中时,可使程序终止循环而执行循环后面语句,通常break语句总是与if语句联在一起。即满足条件时便跳出循环

25、。在多层循环中,一个break语句只向外跳一层。第45页例例6.11:从从结结果果能能够够看看出出,从从55开开始始,后后面面全全部部跳跳过过不不输输出出。共共执执行行了了54次次循循环环。这这正正是是代代码码7行行10行行if语句中执行了语句中执行了break语句。语句。第46页6.7 continue语句语句continue语句作用是跳过循环体中剩下语句而强行执行下一次循环。第47页例6.12:从从结结果果能能够够看看出出,只只跳跳过过i=55这这一一次次循循环环,共共执执行行了了99次次。这这正正是是代代码码7行行10行行if语语句句中执行了中执行了continue语句。语句。第48页第

26、49页break语句和continue语句对比第50页例6.13:分析说明分析说明程序中使用泰勒级数展开式来求自然对数底e近似值,泰勒级数展开式以下:e1+1/1!+1/2!+1/3!+1/n!,n从键盘输入。第51页第52页例6.14:分析说明分析说明利用/41-1/3+1/5-1/7+公式求近似值,直到最终一项绝对值小于10-6。第53页代码7行用到求绝对值函数fabs,所以在代码2行要包含”math.h”。代码14行需要将/4乘以4才能得到。读者一定要体会代码11行中累加求值多项式中正负交替项用C代码实现。第54页例6.15:分析说明分析说明显然应该用二重循环嵌套,不然,全部*就输出在一

27、行了。关键在于找出每行打印*个数和行号、空格个数和行号函数关系。能够分成上下部分用不一样循环写,也能够写在一个外循环内。第55页第56页第57页代码8行和22行语句中如过加上35,钻石形状将显示在屏幕中间。第58页能够经过if-else语句控制行号。第59页分析说明分析说明 每个月第一天都在银行存入100元,按单利计息,月利率为3,求一年后本利之和。例6.16:第60页第61页例6.17:编程计算1!+2!+3!+4!+n!代码4行将sum,p申明为double是预防溢出。因为阶乘增加很快,况且是求阶乘和。有兴趣读者能够换成int或者long试下当从键盘输入n=20看看。第62页第63页求Fi

28、bonacci数列:1,1,2,3,5,8,前40个数,即F1=1(n=1)F2=1(n=2)Fn=Fn-1+Fn-2(n3)例6.18:第64页f1=1,f2=1for i=1 to20输出输出f1,f2f1=f1+f2f2=f2+f1第65页代码7行只循环了20次,是因为每次能够输出2个数。第66页第67页例6.19:读入读入mk=i=2当当ikm被被i整除整除真真假假用用break结束循环结束循环i=i+1ik+1真真假假输出是素数输出是素数输出不是素数输出不是素数第68页第69页求100200间全部素数。分析说明分析说明在上题基础上,用一个嵌套for循环即可到达目标。例6.20:第70页第71页第72页作业n习题六n6.1(结果写在书本)n上机习题:6.2、6.3、6.4、6.5、6.6、6.7、6.8、6.9、6.10、6.11、6.12第73页

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服