用函数合理组织程序PPT课件.ppt
《用函数合理组织程序PPT课件.ppt》由会员分享,可在线阅读,更多相关《用函数合理组织程序PPT课件.ppt(31页珍藏版)》请在咨信网上搜索。
1、6.1 模块化带来的好处从软件工程的角度上说,降低程序复杂性的有效方法是合理的模块化和局部化。在设计一个复杂的程序时,往往把整个程序划分为若干个功能较为单一的模块,分别予以实现,再把所有的模块像搭积木一样搭起来,这种在程序设计中分而治之的策略,被称为模块化程序设计方法。在C+中,这些模块就是一个个的函数,函数也是C+构造程序的重要的基本单位。语句是构成程序的最基本单位,函数也是由语句构成的,从程序设计的角度上说,函数(一系列语句)常被当成一个整体来看,这就降低了程序的复杂度。6.1.1 函数的调用过程在前面的学习中大家已经熟悉了main()函数,一个C+程序里包含一个主函数(即main函数)和
2、若干个其它函数,main()处于最顶层,其他函数作为其下层模块,main()函数调用其它函数,其它函数之间也可以互相调用。图6.1为一个C+程序的模块结构图,程序的执行过程为ABCDEFGHIJKMNABCDEFGHIJKMN。任何一个C+程序都是从main()函数开始执行,而且是只执行main()函数,从main()的前花括号开始,到main()的后花括号为止,在此过程中,如果碰到函数调用语句(如中的“函数1;”),便暂时中断main()的执行,将程序流程转到被调用函数(对应中的B B),执行完被调用函数或遇到return语句则返回main()函数(对应中的H H),继续执行,一个函数也可以
3、调用其他函数(如中函数1调用函数3),这时的调用过程与main()函数调用其他函数过程类似,常称为函数嵌套。6.1.2 抽象和封装面向过程的程序设计是基于功能分析的,最关心的是如何实现一个模块的功能以及如何使用这个模块,至于模块内部的结构,对其他模块来说是不重要的,完全可隐藏的。对函数而言,这个道理同样适用,在第2章主函数小节中提到了函数由函数头和函数体两部分组成,而函数头定义了函数和调用它的函数之间的接口。在C+程序中,函数可以看成一个封装体,将一系列相关的、实现某一功能的代码封装起来,并提供了一个使用方法(程序中常称接口),通过该接口可以在程序的任何地方使用这些代码完成特定功能,至于函数是
4、如何编写的,可能并不是用户关心的重点,用户真正关心的是这个函数如何使用。6.1.3 实现一个函数实现一个函数有3个步骤:定义、声明与调用,拿电影来做比喻,定义等价于电影的拍摄,声明等价于电影院得到放映许可,调用是电影院放电影,电影院可以自行拍摄,也可以拿别的单位拍的电影来放,在程序中,这意味着可以自己定义函数,也可以使用诸如标准库或第三方库提供的函数,但在使用前,都要进行声明,通知编译器函数的存在,以获得函数的使用许可,才能进行调用,声明后,程序可以多次调用函数,等同于电影院在获得放映许可后,可以多次放映影片。见示例代码61:6.2 函数定义函数定义由函数头和函数体两部分组成,其基本形式为:返
5、回类型 函数名(参数列表)函数体函数定义通过这一结构告诉编译器要进行的操作。最小的函数-无返回值、无参数void MyFunction1(void)6.2.1 函数头第一行“返回值类型 函数名(参数列表)”称为函数头,定义了函数和调用它的函数之间的接口:(1)函数名 上级函数通过函数名实现对函数的调用,函数名是一个符合C+语法要求的标识符,定义函数名与定义变量名的规则是一样的,但应尽量避免用下划线开头,因为编译器常常定义一些下划线开头的变量或函数。函数名应尽可能反映函数的功能,做到“望文知义”。(2)参数列表 0个或多个变量,用于向函数传送数值或从函数带回数值,每个参数都应采取“类型 变量名”
6、形式,参数列表中的参数称为形式参数,简称形参。编译器并不会在函数定义时为这些参数分配内存空间,只有在函数调用时,向函数传递了实参后,这些参数才称为程序实体,形参相当于剧本中的角色,而实参是演员,在中,函数定义中的x和y是剧本角色,而变量num1和num2是演员,num1扮演了x的角色,num2扮演了y的角色。如果参数表列中参数个数为0,我们称之为无参函数,无参函数可以定义为:返回类型 函数名()或或返回类型 函数名(void)(3)返回类型 指定函数用return返回的函数值的类型,如果函数没有返回值,返回类型应为void。C+对返回值的类型有一定限制,不能是数组,但可以是其他任何类型,如整型
7、、浮点型、指针,甚至是结构和共用体等。6.2.2 函数体花括号中的语句称为函数体,一个函数的功能,通过函数体中的语句来完成,函数体指明了函数要进行的操作及操作顺序。程序执行到函数体中的return语句返回,在函数体中可以有多个return语句,但函数只能有一个出口,换句话说,只执行一条返回语句,返回语句的基本形式为:return 表达式;表达式的类型应当与函数头中指定的返回类型一致,否则,编译器会根据函数头中指定的返回类型对表达式进行转换。返回主要起如下作用:(1)撤销函数调用时为参数和变量分配的栈内存空间;(2)向调用函数(上级)返回最多一个值(表达式的值);(3)将程序流程从当前函数返回上
8、级函数。代码6.1中,add函数的定义如下:int add(int x,int y)int z=x+y;return z;6.2.3 函数定义补充说明当函数的返回类型是void时,表明函数不向上级函数返回任何值,这时可以用一个空的“return;”语句,将程序流程返回,撤销函数调用时为参数和变量分配的栈内存空间,空的“return;”语句位于函数末尾时,该语句可以省略,用函数体的后花括号实现函数的返回即可。通常用返回类型为void的函数执行某些操作,见代码62。int main()void print();/函数声明print();/函数调用return 0;void print()/函数定义
9、,void表示没有返回值int n;cout请输入一个整数n:n;cout你输入的数是:nendl;6.3 函数声明函数声明,也称函数原型。函数声明,用以通知编译器函数的存在,以获得函数的使用许可,惟其如此,才能在程序中对函数进行调用。6.3.1 为什么要进行函数声明函数声明描述了函数和编译器间的接口,想要调用一个函数,必须在调用函数中必须对被调用函数进行说明。在代码61中,main()函数中的“int add(int x,int y);”用于在main()函数内声明add函数,使其在main()函数内可用,同时告诉编译器,add函数接收两个int型的输入参数,如果程序没有提供这样的参数,编译
10、器便会指出错误,或对传入的其他类型参数进行隐式转换,在add函数完成计算后,将把返回值放置到指定位置(可能是CPU寄存器,也可能是某个内存单元),然后上级函数(代码61中为main()函数)从这个位置取得返回值,add函数的声明指出了返回值类型为int,编译器借此知道应检索多少内存字节并对这些字节作出解释。图6.2形象化地说明了代码61中的函数声明的作用和返回值机制。6.3.2 如何声明一个函数函数声明类似于函数定义,不过没有实现代码,函数说明的一般形式如下:返回类型 函数名(参数表列);函数声明是一个语句,所以要以分号结束,在书写函数声明时,只要把函数头复制下来,并在末尾添加分号即可。语句结
11、尾处有无分号常常可用来区分是函数声明还是函数定义。如代码6.1中的“int add(int x,int y);”,不过,函数声明只要与函数定义一致,能提供给编译器足够的信息即可,因此,C+中的函数声明不要求提供变量名,add函数的声明可以写成:int add(int,int);从中编译器得知:函数名为add,接收两个int型的参数,返回值类型为int,这些信息已经足够,“int add(int x,int y);”中的变量名x和y仅仅起到增强程序可读性的作用,而且,这个变量名也可以与函数定义中的形参不同,也就是说,将声明语句写成下列形式丝毫不会影响程序的编译和运行。int add(int A,
12、int B);6.3.3 分割程序文件一些程序常常由许多文件组成,为了方便管理,常常将函数定义在cpp文件中,而将函数的声明语句放在与cpp文件同名的头文件(h文件)中,这样就可以通过编译预处理#include 或#include“xxx.h”实现函数的声明,这种方法在大型程序文件的组织中十分有用,见代码6.3。#include 用于C+系统提供的头文件,这些头文件一般位于C+系统目录下的include子目录下,而#include“xxx.h”适用于用户自己建立的头文件,预处理器接收到该指令后,会首先在当前文件所在目录中进行搜寻,如果找不到,再到C+系统头文件中寻找。6.4 函数调用在前面的代
13、码中,读者已经知道了如何调用一个函数,函数定义和函数声明的目的都是为了函数调用,唯有函数调用才是利用函数实现某个功能的过程,函数调用的基本形式为:函数名(实参列表);对于无参函数,其调用形式为:函数名();函数调用由函数名和函数调用运算符()组成,()内有0个或多个逗号分隔的参数(称为实参)。每一个参数是一个表达式,且参数的个数与参数的类型要与被调函数定义的参数(称为形参)个数和类型匹配,首先计算参数表达式的值,并将此值传递给形参。如果函数调用后有返回值,调用表达式可以用在表达式中,如中的 int numTotal=add(num1,num2);,而无参函数的调用必须是一个单独的语句,如 pr
14、int();。函数调用的主要作用是:(1)用实参向形参传递数据;(2)为获得数据的参数和函数中声明的变量分配临时存储空间;(3)中断当前正在运行的上级调用函数,将程序流程转到被调用函数的入口处。6.4.1 形参和实参形参和实参,类似与剧本角色和演员的关系,同一个角色可以由不同的演员来扮演,只有在演员扮演的过程中,角色才是鲜活、有意义的。前面的章节已经提到,在函数定义时,并不会为参数列表中的参数分配内存空间,只有在函数调用时,才为形参分配内存空间,并用实参的值为其赋值,在执行到函数结束时,程序会撤销调用过程中为参数和中间变量分配的内存空间。代码64演示了形参和实参的关系:int main()in
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 函数 合理 组织 程序 PPT 课件
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【可****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【可****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。