1、第7章 用用RAPTORRAPTOR子过程子过程实现模块化实现模块化程序设计程序设计学习目标学习目标 了解程序设计中为什么要模块化 掌握子过程的概念目录目录7.1 模块化模块化程序设计的引入程序设计的引入7.2 子过程子过程7.3 子过程实现子过程实现模块化程序设计模块化程序设计应用举例应用举例入入7.1 7.1 模块化模块化程序设计的程序设计的引入引入 模块化模块化程序设计程序设计进行程序设计过程中把一个大的问题按照功能划分为若干个小的功能模块,每个模块完成一个确定的功能,在这些功能模块之间建立必要的联系,互相协作完成整个程序要完成的功能,这种方法称为模块化程序设计。模块化程序设计不仅使程序
2、更容易理解,也更容易调试和维护。从上面的程序可以看出,在没有学习RAPTOR子图和子过程之前,编写该程序需要利用3次循环分别对n!、m!、(n-m)!求解。这3次循环除了阶乘的次数不同外,循环中使用图形符号和功能都是相同的(虚框部分)。如果要对重复性程序段部分修改,就需要对每个程序段进行修改,不仅给设计者带来很大不便,而且使得程序很长。为了使设计程序更加简练,避免程序段重复,可以将重复程序段改造成一个子程序。模块化程序设计的好处在于:程序功能独立,每一个模块实现单一功能。代码段重用,可以在一个程序的多个位置使用。降低程序的复杂度,使得程序设计、调试和维护等操作简单化。程序结构清晰,容易阅读和理
3、解。目录目录7.1 模块化模块化程序设计的引入程序设计的引入7.2 子过程子过程7.3 子过程实现子过程实现模块化程序设计模块化程序设计应用举例应用举例入入7.2 7.2 子过程子过程7.2.1 7.2.1 子过程的定子过程的定义和调用义和调用7.2.27.2.2子过程的参数子过程的参数传递传递7.2.1 7.2.1 子过程的定义和子过程的定义和调用调用【例7-2】采用子过程设计方法,从键盘上输入n值,求解n以内阶乘和Sum=1!+2!+3!+n!。其中主图用于实现数据输入和输出,子过程实现求解阶乘的累加和。问题分析:依据题意,从整体分析可以将程序划分成不同功能的模块,使得一个复杂的功能程序划
4、分成为一些更小、更简单的功能程序。按照本题实现的功能可将程序分解为“求解阶乘”、“求解累加和”、“输入输出”等三个模块,其中“求解累加和”功能实现比较简单,可以与“求解阶乘”功能一起实现,因此本程序分为两个模块:主图main用于实现数据输入和输出;子过程用于实现求解阶乘和累加功能。创建子过程创建子过程创建一个子过程的方法为:将鼠标光标定位在主图“main”标签上,单击右键,选择“Add procedure”选项,将出现一个创建子过程对话框,提示为子过程命名和参数定义。说明:“过程名”的命名可以是任何有效地RAPTOR标识符;“参数”是调用子过程时交换信息,可以由1个或多个(最多不能超过6个)组
5、成。参数分为形式参数和实际参数。参数定义形式:输入(Input):正向传递,参数从调用者向被调用过程单向传递,即实参赋给形参。输出(Output):反向传递,参数从被调用者向调用过程单向传递,输入/输出(Input/Output):双向传递,参数从调用者向被调用过程双向传递。主图和子过程之间相同之处在于:主图和子过程都是完整RAPTOR流程图,包含了“Start”和“End”语句;不同之处在于:它们之间相互独立,主图和子过程实现各自功能;它们各自具有独立变量。子子过程调用过程调用程序从主图main“Start”语句开始执行,当执行到调用子过程时需执行以下几个步骤:Step1:主图main程序在
6、调用处暂停执行。Step2:转向调用子过程时,实参的值一一对应传递给形参;Step3:执行子过程;Step4:子过程执行结束,形参传递形式为output的参数值返回给主图main对应的实参,并继续执行调用语句的下一语句。整个算法程序仍终止于主图main中的“End”语句。子过程与变量的相互关系子过程与变量的相互关系主图和子过程具有各自的一套独立变量,即每个过程中变量的作用域仅局限于本过程。主图的变量值变化不会影响子过程变量的改变,同样,子过程的变量值变化也不会影响主图变量的改变。子过程调用结束后,除返回给主图的参数变量外,子过程其他所有变量立即删除。7.2 7.2 子过程子过程7.2.1 7.
7、2.1 子过程的定子过程的定义和调用义和调用7.2.37.2.3子过程的参数子过程的参数传递传递 调用时实参与形参之间的参数传递,按照参数类型分为:常量作为实参 变量作为实参 函数作为实参 数组名作为实参7.2.2 7.2.2 子过程的参数子过程的参数传递传递常量作为实参常量作为实参当常量作为实参时,参数传递数据只能是主图的实参传递给子过程的形参,即正向传递,传递方式为输入(Input)。【例7-3】采用子过程设计方法,计算3个圆的面积和周长,这3个圆的半径分别为2,3,4。问题分析:依据题意,要求解半径分别为2,3,4的圆的面积和周长,可以定义一个子过程circle用于根据半径r计算圆的周长
8、和面积。主图用于实现调用子过程。变量作为实参变量作为实参当变量作为实参时,形参也必须定义为变量,实参变量类型与形参变量类型相同,实参变量名与形参变量名可以相同也可以不相同。调用子过程时,参数传递数据可以只是将主图实参变量的值传递给子过程形参变量,调用结束后,形参变量的值不返回给主图,即正向传递,传递方式为输入;或者是主图实参变量的值传递给子过程形参变量,调用结束后,形参变量的值返回给主图,即双向传递,传递方式为输入/输出(Input/Output)。函数作为实参函数作为实参当函数作为实参时,同变量作为实参相似,形参也必须定义为变量。数组名作为实参数组名作为实参 数组名也可以作为实参进行参数传递
9、,但要求形参也必须也是一个数组名。目录目录7.1 模块化模块化程序设计的引入程序设计的引入7.2 子过程子过程7.3 子过程实现子过程实现模块化程序设计模块化程序设计应用举例应用举例入入7.3 7.3 子过程实现模块化程序设计应用举例子过程实现模块化程序设计应用举例【例7-5】采用子过程设计方法。利用欧几里德算法(也称辗转相除法)计算两个任意正整数m、n(m0,n0)的最大公约数问题分析:欧几里德算法是计算两个正整数最大公约数的另外一种传统算法。其方法是:首先要确保被除数大于除数,如果两数相除的余数不是0,则除数作为新的被除数,余数作为新的除数,再进行下一次除法运算,直到最后两数相除的余数是0
10、,此时除数就是最大公约数。【例7-6】采用子过程设计方法,分别求解两个班级某门课程成绩的平均分。假设两个班级的人数分别为20和25人,同时为了减少输入大量数据的工作,利用随机数的方式产生0100之间的数作为两个班级的课程成绩。问题分析:依据题意,两个班级的人数不同,但实现功能相同,即都是求解某门课程成绩的平均分。因此可以采用子过程设计方法,主图main用于实现获得某门课程成绩的数据和输出课程成绩的平均分;子过程average用于实现计算课程的平均分。【例7-7】采用子过程设计方法。随机生成10个2位正整数,按从小到大排序,并统计所产生的数字中30到80之间的数字的个数(包含30和80)。同时要
11、求按如下的功能输出:(1)输出排序前的数字,数字之间用空格隔开;(2)输出排序后的数字,数字之间用空格隔开;(3)输出30到80之间的数字的个数,如果没有该范围的数字,则给出说明。问题分析:本题要实现对一组数据的排序和统计个数,因此可以采用一维数组实现。要对这组数据实现不同功能,为了程序结构清晰,采用子过程方法实现,为此该程序包括主图main、子过程sort和子过程after。【例7-8】采用子过程设计方法,输入N个数存放在一维数组中,求N个数的最大值和最小值,并输出N个数以及最大值和最小值。问题分析:依据题意,要实现N个数据的输入、求N个数的最大值和最小值以及输出最大值和最小值的功能,可以使用一维数组的方式存储这组N个数据。该程序可以采用子过程设计方法,主图main用于实现这组数据输入、调用子过程;子过程Max_Min用于实现求解N个数的最大值和最小值以及输出。本章小结本章小结程序设计过程中把一个大的问题按照功能划分为若干个小的功能模块,每个模块完成一个确定的功能,在这些功能模块之间建立必要的联系,互相协作完成整个程序要完成的功能,这种方法称为模块化程序设计。模块化程序设计不仅使程序更容易理解,也更容易调试和维护。它是结构化程序设计的主要原则之一,也是计算思维中问题求解抽象化的具体体现。
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。