第5章模块化程序设计.ppt
《第5章模块化程序设计.ppt》由会员分享,可在线阅读,更多相关《第5章模块化程序设计.ppt(77页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1第第5 5章章 模块化程序设计模块化程序设计C C/C C+语言程序设计案例教程语言程序设计案例教程第第5章章 函数函数2023/4/2725.1 C程序结构程序结构5.2 函数的定义函数的定义5.3 函数调用和函数说明函数调用和函数说明5.4 函数的嵌套调用和递归调用函数的嵌套调用和递归调用5.5 变量的作用域和存储方式变量的作用域和存储方式5.6 函数间的数据传递函数间的数据传递5.7 指针函数指针函数5.8 函数指针函数指针要求掌握函数的概念和定义方法,理解实参和形参的一要求掌握函数的概念和定义方法,理解实参和形参的一致性致性(5.1-5.4)理解函数的执行过程,理解函数中的各种数据的
2、作用域理解函数的执行过程,理解函数中的各种数据的作用域和传递方法和传递方法(5.4-5.6)了解函数指针和指针函数的概念(了解函数指针和指针函数的概念(5.7-5.8)u学习内容学习内容 u学习目标学习目标 lC语语言是一种言是一种结结构化程序构化程序设计语设计语言,函数言,函数是其基本模是其基本模块块,当要解决的,当要解决的问题问题比比较较复复杂杂时时,可以把复,可以把复杂问题杂问题分解成若干个分解成若干个简单问简单问题题,每个,每个简单问题简单问题用用单单独的函数独的函数实现实现,通,通过过函数函数调调用用执执行某个功能,如此将一个复行某个功能,如此将一个复杂杂的程序分化,可使程序的的程序
3、分化,可使程序的结结构更构更为为清晰。清晰。5.1 C程序结构程序结构2023/4/274 程序结构清晰,可读性好。程序结构清晰,可读性好。程序结构清晰,可读性好。程序结构清晰,可读性好。减少重复编码的工作量。减少重复编码的工作量。减少重复编码的工作量。减少重复编码的工作量。可多人共同编制一个大程序,缩短程序设计周期,可多人共同编制一个大程序,缩短程序设计周期,可多人共同编制一个大程序,缩短程序设计周期,可多人共同编制一个大程序,缩短程序设计周期,提高程序设计和调试的效率。提高程序设计和调试的效率。提高程序设计和调试的效率。提高程序设计和调试的效率。使用函数使用函数使用函数使用函数的好处的好处
4、的好处的好处C程序程序源程序文件源程序文件n函数函数1函数函数m 源程序文件源程序文件1函数函数1函数函数n复杂问题的结构化程序设计思想:复杂问题的结构化程序设计思想:复杂问题的结构化程序设计思想:复杂问题的结构化程序设计思想:“自上而下,逐步细化,结构化,模块化自上而下,逐步细化,结构化,模块化自上而下,逐步细化,结构化,模块化自上而下,逐步细化,结构化,模块化”C C程序的一般结构程序的一般结构程序的一般结构程序的一般结构 案例一案例一 四则运算器四则运算器 l1.问题描述l计算器是一种很方便的小工具。参照算器是一种很方便的小工具。参照计算器算器进行行简单模模拟,实现针对两个整数的四两个整
5、数的四则运算。运算。l2.问题分析l本案例需要本案例需要实现加、减、乘、除四加、减、乘、除四则运算,其中加、减、乘三种运运算,其中加、减、乘三种运算算处理方法完全一致,除法因要考理方法完全一致,除法因要考虑除数不能除数不能为0的情况,略有不的情况,略有不同。同。因此此因此此处以乘法操作以乘法操作为例,例,对计算算过程程进行分析。行分析。l执行乘法操作的行乘法操作的细节如下:如下:l(1)乘法操作需要两个操作数,首先由用乘法操作需要两个操作数,首先由用户输入一个数据,作入一个数据,作为第第一个操作数;一个操作数;l(2)其次用其次用户输入一个操作符,此入一个操作符,此处应输入乘法符号;入乘法符号
6、;l(3)然后用然后用户输入第二个操作数;入第二个操作数;l(4)最后用最后用户按下回按下回车符,将数据符,将数据传入入计算机内算机内进行行计算,算,计算器算器操作之后操作之后输出出结果。果。l除法运算与乘法运算也基本相同,只是在除法运算与乘法运算也基本相同,只是在输入第二个操作数入第二个操作数时,需,需要要进行判断,当第二个操作数不行判断,当第二个操作数不为0时才能才能继续往下往下执行。行。l3.C语言代码l#include lvoid Add(float op1,float op2)/*加法函数加法函数*/l float s;l s=op1+op2;l printf(%.2fn,s);ll
7、void Sub(float op1,float op2)/*减法函数减法函数*/ll float s;l s=op1-op2;l printf(%.2fn,s);llvoid Mult(float op1,float op2)/*乘法函数乘法函数*/ll float s;l s=op1*op2;l printf(%.2fn,s);llvoid Div(float op1,float op2)/*除法函数除法函数*/ll if(op2=0)l printf(除数不能除数不能为0!);l elsel l float s;/*复合复合语句中定句中定义的的块变量量*/l s=op1/op2;l pr
8、intf(%.2fn,s);l llvoid main()ll float op1,op2;/*定定义两个操作数两个操作数变量量*/l char ch;/*定定义一个运算符一个运算符*/l printf(请输入数据和四入数据和四则运算符运算符(+-*/),如:如:2+4n);l scanf(%f%c%f,&op1,&ch,&op2);l switch(ch)l l case+:Add(op1,op2);break;l case-:Sub(op1,op2);break;l case*:Mult(op1,op2);break;l case/:Div(op1,op2);break;l default
9、:break;l ll4.程序运行结果l请输入数据和四入数据和四则运算符运算符(+-*/),如:如:2+4l3*6l18.005.1 函数的基本概念和操作函数的基本概念和操作 l5.1.1 函数的概念lC语言是言是结构化程序构化程序设计语言,一个言,一个C语言程序由一个或言程序由一个或多个源程序文件多个源程序文件组成。成。这样可以分可以分别编写、分写、分别编译,提高提高调度效率。一个源程序文件由一个或多个函数度效率。一个源程序文件由一个或多个函数组成。成。一个源程序文件是一个一个源程序文件是一个编译单位。位。lC语言中的函数是一个独立完成某种功能的程序言中的函数是一个独立完成某种功能的程序块,
10、其,其中封装了一些程序代中封装了一些程序代码和数据。使用者只需关心函数的和数据。使用者只需关心函数的功能和使用方法,而不必关心函数功能的具体功能和使用方法,而不必关心函数功能的具体实现细节。利用函数可将复利用函数可将复杂问题的解决的解决过程分割成一个个小的模程分割成一个个小的模块,每一个模,每一个模块编写一个函数,而各函数分写一个函数,而各函数分别完成一个完成一个功能功能单一而独立的任一而独立的任务,因此,因此C语言程序通常是由言程序通常是由许多多函数函数组成。函数在使用之前除了成。函数在使用之前除了标准函数准函数库的函数以外,的函数以外,其他函数都必其他函数都必须事先定事先定义。l在在C语言
11、中,根据使用的角度不同,函数可以有以下的分言中,根据使用的角度不同,函数可以有以下的分类。l(1)从用从用户使用的角度,函数分使用的角度,函数分为两两类:标准函数和用准函数和用户自定自定义函函数。数。l标准函数:在准函数:在C语言的言的编译系系统中提供了很多系中提供了很多系统预定定义的函数,的函数,用用户程序只需包含有相程序只需包含有相应的的头文件就可以直接文件就可以直接调用,不同的用,不同的编译系系统提供的提供的库函数名称和功能是不完全相同的。例如在上一章所介函数名称和功能是不完全相同的。例如在上一章所介绍的字符串的字符串处理函数都是系理函数都是系统给我我们提供的提供的标准函数,只需要在使用
12、准函数,只需要在使用时将将头文件文件string.h包含包含进来就可以了。来就可以了。l用用户自定自定义函数:用函数:用户根据自己特殊需要,按照根据自己特殊需要,按照C语言的言的语法法规定定编写一段程序,写一段程序,实现特定的功能。特定的功能。l(2)从函数参数的形式,函数分从函数参数的形式,函数分为两两类:无参函数和有参函数。:无参函数和有参函数。l无参函数:使用无参函数:使用该类函数函数时,不需,不需给函数提供数据信息,就可以直函数提供数据信息,就可以直接使用接使用该函数提供的功能。函数提供的功能。l有参函数:使用有参函数:使用该类函数函数时,必,必须给该函数提供所需要的数据信息,函数提供
13、所需要的数据信息,按照提供的数据不同,在使用按照提供的数据不同,在使用该函数后函数后获得不同的得不同的结果。果。5.1.2 函数的定义l前面提到,从函数参数的形式角度来看,前面提到,从函数参数的形式角度来看,函数分函数分为无参函数和有参函数,下面分无参函数和有参函数,下面分别介介绍这两种函数的定两种函数的定义形式。形式。l1.无参函数的定义l无参函数定无参函数定义的一般形式的一般形式为l返回返回值类型型 函数名函数名()ll说明部分明部分l执行部分行部分ll说明:明:l(1)无参函数定无参函数定义由函数由函数头部和函数体两部分部和函数体两部分组成。函数成。函数头部包括部包括返回返回值类型,函数
14、名两个部分;在型,函数名两个部分;在内的部分称内的部分称为函数体,其在函数体,其在语法上是一个复合法上是一个复合语句。句。l(2)函数名是唯一函数名是唯一标识函数的名字,是函数的名字,是C语言中任何合法的言中任何合法的标识符,符,而且在而且在该标识符后面必符后面必须有一有一对圆括号,用来表明括号,用来表明该标识符符为函数函数名。名。l(3)返回返回值类型是在型是在调用函数用函数结束后,函数束后,函数给调用者返回用者返回结果所具果所具有的有的类型,返回型,返回值的的类型型为各种基本数据各种基本数据类型和自定型和自定义数据数据类型;型;函数在被函数在被调用后也可以没有返回用后也可以没有返回值,此,
15、此时返回返回值类型型为void;另外,;另外,函数默函数默认返回返回值类型型为int。例如:。例如:lvoid output()ll printf(*);ll注意:注意:l(1)函数体内可以是函数体内可以是0条、条、1条或多条条或多条语句。当函数体是句。当函数体是0条条语句句时,称,称该函函数数为空函数。空函数作空函数。空函数作为一种什么都不一种什么都不执行的函数,通常在程序行的函数,通常在程序设计初期初期作作为临时函数使用,在函数使用,在设计过程中再程中再实现或或扩充功能。注意函数体内无充功能。注意函数体内无论有多少条有多少条语句,大括号是不能省略的。例如:句,大括号是不能省略的。例如:lv
16、oid nothing()l ll(2)在函数体内不能定在函数体内不能定义另一个函数,也就是另一个函数,也就是说函数定函数定义不能嵌套。例如下不能嵌套。例如下面函数的定面函数的定义是是错误的。的。lvoid output1()ll printf(*);l void output2()l l printf(#);l ll2.有参函数的定义l有参函数定有参函数定义与无参函数的区与无参函数的区别在于有参函数在于有参函数带有参数表列,作用有参数表列,作用是在函数被是在函数被调用用时接受提供接受提供给该函数的数据,以便在函数体内函数的数据,以便在函数体内进行行处理。理。l有参函数定有参函数定义的一般形式
17、的一般形式为l返回返回值类型型 函数名函数名(参数表列参数表列)ll 说明部分明部分l 执行部分行部分ll说明:明:l(1)返回返回值、函数名和函数体与无参数含、函数名和函数体与无参数含义相同;相同;l(2)参数表列通常称参数表列通常称为形式参数表形式参数表(简称形参表称形参表),形式参数表的形式,形式参数表的形式为l类型型 参数名参数名1,类型型 参数名参数名2,.,类型型 参数名参数名nl其中,形参表其中,形参表说明函数参数的名称、明函数参数的名称、类型和数目,由一个或多个参型和数目,由一个或多个参数数说明明组成,每个参数成,每个参数说明之明之间用逗号分隔。用逗号分隔。书写函数写函数时要养
18、成要养成给函数注函数注释的的习惯,一般最少要,一般最少要对函数的功能,参数的意函数的功能,参数的意义进行行说明。明。l例如,例如,输输出两个整数出两个整数值值的函数可定的函数可定义为义为:lvoid outint(int x,int y)/*有参函数定有参函数定义义*/ll printf(x=%d,y=%d,x,y);ll3.函数的返回值与return语句l调用者在用者在调用函数用函数时,函数有,函数有时需要把需要把处理的理的结果返回果返回给调用者,用者,这个个结果就是函数的返回果就是函数的返回值,函数的返回,函数的返回值是由是由return语句句传递的。的。lreturn语句的形式:句的形式
19、:lreturn(表达式表达式);或;或 return表达式;或表达式;或 return;l注意:注意:l(1)return语句中表达式的句中表达式的类型型应与函数返回与函数返回值类型一致,若不一型一致,若不一致,致,则以函数返回以函数返回值的的类型型为准,准,对于数于数值型数据将自型数据将自动进行行类型型转换。void类型函数中型函数中return后不得跟表达式。后不得跟表达式。l(2)一个函数中可以有多个一个函数中可以有多个return语句,函数在碰到第一个句,函数在碰到第一个return语句返回,函数返回句返回,函数返回值为第一个第一个return语句中表达式的句中表达式的值;若;若re
20、turn后面无表达式,后面无表达式,则返回返回调用函数用函数处。l(3)若函数体内没有若函数体内没有return语句,就一直句,就一直执行到函数体的末尾后返回行到函数体的末尾后返回调用函数。用函数。这时会返回一个不确定的函数会返回一个不确定的函数值,若确,若确实不要求返回函不要求返回函数数值,则应将函数定将函数定义为void类型。型。l例如,求两个整数的最大者的函数可定例如,求两个整数的最大者的函数可定义义为为:lint max(int x,int y)ll if(xy)l return x;l else l return y;l5.1.3 函数的调用与函数说明函数的调用与函数说明 l函数在定
21、函数在定义之后并不能主之后并不能主动运行,必运行,必须通通过对函函数数调用才能用才能实现函数的功能。一个函数可以被其函数的功能。一个函数可以被其他函数多次他函数多次调用用(main函数不能被任何函数函数不能被任何函数调用用),调用函数的函数称用函数的函数称为主主调函数,被函数,被调用的函数用的函数称称为被被调函数。如果被函数。如果被调函数是有参函数,主函数是有参函数,主调函数在函数在调用用时将数据将数据传递给被被调函数,从而得到函数,从而得到所需要的所需要的处理理结果。果。l1.函数调用的形式l(1)无参函数无参函数调用形式用形式为l函数名函数名();l(2)有参函数有参函数调用形式用形式为l
22、函数名函数名(参数表参数表);l注意:注意:l(1)函数函数调用用语句中函数名与函数定句中函数名与函数定义的名字相同。的名字相同。l(2)有参函数有参函数调用用时参数表中列出的参数是参数表中列出的参数是实际参数参数(简称称实参参)。l实参的形式参的形式为l参数参数1,参数,参数2,参数,参数nl其中,各参数其中,各参数间用逗号隔开,用逗号隔开,实参与形参要保持参与形参要保持顺序一序一致、个数一致、致、个数一致、类型型应一致。一致。实参与形参按参与形参按顺序一一序一一对应,传递数据。当数据。当实参与形参参与形参类型不一致型不一致时,实参的参的值转化化为形参的形参的类型型赋给形参。形参。l(3)实
23、参要有确定的参要有确定的值,它可以是一个表达式或者是,它可以是一个表达式或者是值。例如:例如:lint y=3;loutput();/*无参函数无参函数调用用*/loutint(2,y);/*有参函数有参函数调用用*/l2.函数调用的使用方式l(1)函数函数调用作用作为一个一个语句,函数完成一定功能。句,函数完成一定功能。例如:例如:lputchar(c);l(2)函数函数调用出用出现在表达式中,在表达式中,这时要求被要求被调函函数必数必须带有返回有返回值,返回,返回值将参加表达式的运算。将参加表达式的运算。l例如求两个整数的最大者的函数例如求两个整数的最大者的函数int max(int x,
24、int y)可以有如下可以有如下调用:用:lm=2+max(5,6);l(3)函数函数调用作用作为函数的函数的实参。例如参。例如lMax=max(a,max(b,c);l3.函数说明l在函数在函数调用用过程中,若被程中,若被调函数函数(除函数返回除函数返回值类型型为int、char之外之外)的定的定义出出现在主在主调函数之后,函数之后,则在在调用用函数前函数前还必必须对该被被调函数函数进行原型行原型说明。明。l函数函数类型型说明的格式明的格式为l返回返回值类型型 函数名函数名(参数参数类型表型表);l说明:明:l(1)圆括号是函数的括号是函数的标志,不能省略,如果省略,就成志,不能省略,如果省
25、略,就成为一般一般变量的量的说明了。明了。l(2)参数参数类型表的形式与函数定型表的形式与函数定义的形参表相同,也可以的形参表相同,也可以只列出形参的只列出形参的类型名。型名。l(3)函数函数类型型说明明语句句应放在主放在主调函数函数体中的数据函数函数体中的数据说明位置或在主明位置或在主调函数前面。函数前面。l例例5.1 定定义一个函数,一个函数,suv函数功能函数功能为求两个浮点数的之和,并在求两个浮点数的之和,并在主函数中主函数中调用此函数。用此函数。l#include stdio.hlvoid main()ll float suv(float,float);/*对suv函数函数进行行说明
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 模块化 程序设计
限制150内