第6章 函数和过程.doc

第6章 函数和过程.doc

ID:31720938

大小:485.50 KB

页数:18页

时间:2019-01-17

第6章 函数和过程.doc_第1页
第6章 函数和过程.doc_第2页
第6章 函数和过程.doc_第3页
第6章 函数和过程.doc_第4页
第6章 函数和过程.doc_第5页
资源描述:

《第6章 函数和过程.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第6章第6章函数和过程程序表达的计算本身近似于代数演算,演算在符号上进行。只要给出实际的输入值即可得到输出值或所需要的计算机动作。一般说来,程序是通用的,适合于一组输入值。如果把程序中某一段实施某种功能的计算单独划出来,给它取个名字并给出本段所需的参数,即将名字束定于执行某种功能的代码块。在程序世界里这段程序叫子程序。50年代人们就理解了这种分割的好处:它实施的功能单一,便于调试;它相对独立,便于多人分工完成,且时间不受约束;它相对封闭,所有数据从接口出入,人们易于控制,是分解复杂性的有力措施。命令式语言中子程序有两种形式:函数(必须返回值)

2、和过程(实施一组动作),有时叫函数过程和子例程subroutine。它们是程序的第一次分割。子程序开创程序世界里局部性、模块性的先河。由于子程序是程序的一个相对独立部分,它和主程序联系的接口特别重要。在这个界面上要指出该例程的数据特征,即输入什么输出什么。而整个子程序体是完成从输入到输出的实现手段。因此,界面指出“做什么?”而子程序体回答“怎么做”。于是,在80年代程序完成第二次分割:将子程序定义(即界面)和子程序体显式的分开,成为相对独立的规格说明(Specification)和体(body)。这样在程序设计的早期只写规格,详细设计时再选算

3、法、数据结构实现它的体。只要规格说明不变,即使过程体作重大的修改或换掉也不会影响整个程序系统。Ada和C++即是完成第二次分割的实例。本章我们首先研究函数和过程的定义和调用。关注的焦点在第二章中讨论,它们的接口和数据传送机制。原则上所有的程序值都可以作参数传递,第三节讨论实参求值策略,最后讨论参数本身为函数或返回值及函数的高阶函数。6.1函数和过程抽象函数抽象是用一个简单的名字抽象代表一个函数。该函数由函数型构(Signature)和函数体(body)组成。函数计算的目的是求值。函数体等同于一个复合的表达式。所以,函数抽象是对表达式的抽象。同

4、样,过程抽象是用一个简单的名字抽象代表一个计算过程。该过程由过程型构和过程体组成。过程调用的目的是执行一组命令以更新数据,过程抽象是对命令(即语句)集的抽象。6.1.1函数定义与引用函数定义定义了一个程序世界的函数,它有名字,输入、输出参数(组成函数型构),和实现函数从输入到输出的映射的函数体组成:functionFUNC(fp1,fp2,...):returntype;//函数型构B;//函数体,可包括任何声明和语句函数型构中fp1,fp2,…为形式参数,也叫形式变元(argument).returntype为返回值类型,函数引用是应用函数

5、的唯一手段,它在同名的函数名之下给出实在参数(实在变元):第115页第6章FUNC(ap1,ap2,...);其应用过程是:先匹配函数名,找到函数定义模块,然后匹配形、实参数。匹配后程序控制转而执行函数体。实参以形参别名参与运行直至函数体结束,或至显式的Return语句。主调程序的引用处此时得到一函数返回值。函数引用可出现在任何求值的表达式中。返回的参数值在程序的下文显式引用。(1)函数定义的形式早期语言函数定义和子程序一样,都是过程的一种。但函数要返回值,于是函数名同时起到携带返回值的作用,函数返回值的类型加在函数关键字之前,如例6-1(a

6、)。函数名至少要出现在赋值号之前一次;局部量和参数的类型在型构之后语句开始之前声明;至少要有一个RETURN语句。Pascal和Ada函数返回值的类型放在型构后,且参数类型在参数表中声明,和局部量声明明显分开,且Return只作中途返回之用,不用Return从块末出口也可以。由于Pascal支持递归,它承袭了函数名至少在赋值号左边出现一次,于是造成名字含义不同,见例6-1(b),左边的函数名是变量引用,右边是函数引用。Ada(见例6-1(d))就避免了这个缺点:函数名仅仅是函数名,返回值由return关键字后跟的表达式表示,其求值结果为某个临

7、时的中间变量,程序员不可见。return机制同pascal。这样,和充当块结束括号的关键字end分工也明确了(一指程序行文结束,一指执行结束)。C语言,见例6-1(c),在函数型构和局部量声明的形式与Pascal同。用return加表达式指明返回值与Ada同。但由于C只有函数形式,若为主函数或过程则无return语句,且缺省的函数返回值类型等同于int型。ANSIC和C++进一步吸取在参数表中指明参数类型的优点。例6-1各种语言函数定义(a)FORTRAN的函数定义INTEGERFUNCTIONFACT(N)INTEGERN,I,F//参数类

8、型在此声明F=1DO10I=2,NF=F*110CONTINUEFACT=F//必须至少定义函数名一次RETURN//至少有一返回语句END(b)Pascal的函数

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。