第五章顺序结构程序设计课件.ppt

上传人(卖家):晟晟文业 文档编号:4142823 上传时间:2022-11-14 格式:PPT 页数:36 大小:114.40KB
下载 相关 举报
第五章顺序结构程序设计课件.ppt_第1页
第1页 / 共36页
第五章顺序结构程序设计课件.ppt_第2页
第2页 / 共36页
第五章顺序结构程序设计课件.ppt_第3页
第3页 / 共36页
第五章顺序结构程序设计课件.ppt_第4页
第4页 / 共36页
第五章顺序结构程序设计课件.ppt_第5页
第5页 / 共36页
点击查看更多>>
资源描述

1、8.1.1 过程的概念及过程说明 过程的概念 例:已知m和n,计算 C n prog8_1.prg第八章 过程与自定义函数m 按照一定的语法规则编写而成的具有特定功能的程序段称为过程。在Foxpro中,使用过程不仅可以避免相同功能程序段的重复编写,而且还有助于实现结构化程序设计。重点掌握:过程的结构;过程的调用方法;过程与调用程序之间的参数传递。过程的说明 在Foxpro中,可以用PROCEDURE命令来说明一个过程。【格式】PROCEDURE PARAMETERS RETURN 其中,PROCEDURE为过程说明命令,是过程的开始标志。由字母、数字或下划线“_”组成,其长度不超过10个字符,

2、主要用于识别和调用。PARAMETERS为参数说明命令,用来定义带参数的过程,中列出的参数可以为内存变量名或数组名,使用多个参数时,参数之间应以逗号“,”分隔。为过程的核心部分,由一条或多条命令构成,也可以是顺序结构、分支结构或循环结构。RETURN为过程返回命令,返回到调用过程命令的下一条命令处继续执行。【功能】说明一个名为的过程。【例8.2】编写一个计算N!的过程。*计算N!,结果保存在FACT中 PROCEDURE SOVEFACT PARAMETERS N,FACT FOR I=1 TO N FACT=FACT*I ENDFOR RETURN 形式参数一般可以分为输入参数和输出参输入参

3、数和输出参数数。输入参数输入参数只是接收实参传来的值,在过程体内不再重新被赋值(如过程中的形参N)。输出参数输出参数通常用来保存过程的执行结果,在过程体内进行赋值,并且获得的值通过参数传递可传给调用程序中的实参变量。当然,也允许某个形参同时具有输入参数和输出参数的功能,即不仅可以接收实参变量传来的值,而且可以在过程体内重新赋值(如过程中的形参FACT)。8.1.2 过程调用 在Foxpro中,过程既可以放在调用它的程序中,也可以放在一个过程文件中。调用过程时,不仅可以调用同处在一个程序中的过程,也可以调用过程文件中的过程,还可以调用其它程序中的过程。调用主程序中的过程【格式】DO WITH 其

4、中,WITH选项仅用于有参过程的调用,中可以使用常量、赋过值的变量或表达式,调用过程时,该将传送给调用程序。【功能】调用指定的过程。如果在定义过程时使用了参数说明命令PARAMETERS,则在调用过程时,应使用WITH。例 prog8_3.prg 调用过程文件中的过程 在Foxpro中,为了避免打开文件个数太多,减少访盘次数,除了将过程放在主程序中之外,也可以按照一定的语法规则将若干个过程存入一个过程文件中。过程文件中的每个过程都以“PROCEDURE”开始,以“RETURN”结束。过程文件的一般结构如下:PROCEDURE PARAMETERS RETURN PROCEDURE PARAME

5、TERS RETURN PROCEDURE PARAMETERS RETURN 调用过程文件中的过程应分以下三步进行:打开过程文件 【格式】SET PROCEDURE TO 【功能】打开一个指定的过程文件。【说明】一旦打开过程文件后,其所有过程都可以调用。若打开过程文件时没有指定扩展名,则默认扩展名为“.PRG”。Foxpro规定一次只能打开一个过程文件,如果同时打开多个过程文件,则只有最后一次打开的过程文件起作用,前面打开的过程文件自动被关闭。调用过程 DO WITH 关闭过程文件 调用完过程文件中的过程后,通常应当关闭打开的过程文件,以释放其占据的内存空间。关闭过程文件的命令如下:SET

6、PROCEDURE TO CLOSE PROCEDURE【例8.4】假设已经编写好一个计算N!的过程(见例8.2)保存在文件名PROG8_2.PRG的过程文件中,调用计算N!的过程,计算1!+2!+3!+4!+5!+6!+7!+8!+9!+10!的和。(prog8_4.prg)调用其它程序中的过程 在Foxpro中,允许直接在一个程序中调用其它程序中说明的过程。调用方法如下:DO WITH IN 其中,IN 选项表示要执行指定程序中的一个过程。【例8.5】调用例8.3程序中计算N!的过程SOVEFACT,计算1!+2!+10!的和。prog8_48.1.3 过程的嵌套调用 在执行一个过程时,还

7、可以调用另外一个过程,在执行第二个过程时,又可以调用第三个过程,这样可以一个一个地调用下去。这种在一个过程中又出现调用另外一个过程的现象称为过程的嵌套调用。在Foxpro2.5中,最多允许使用32层嵌套调用。使用过程嵌套调用时,应注意调用的返回“位置”。如果在过程中使用的返回命令不同,则返回的位置也将不同。在Foxpro中,过程调用结束后,既可以返回到调用程序(使用RETURN命令),也可以返回到指定的程序或过程(使用RETURN TO),还可以返回到最高层的调用程序(使用RETURN TO MASTER命令)。Do proc1.return主程序主程序Proc prco1.Do proc2.

8、returnProc proc2.Do proc3.return过程过程 proc1过程过程 proc2【例8.6】编写一个在计算机上为小学生出50以内整数加法练习的程序。每次练习的题目数量由键盘输入,参加运算的整数由计算机随机产生,并由计算机根据回答的正确与否进行评分,最后输出所得的分数。.Do Exercise.return主程序主程序过程过程 ExerciseDo MakenumDo MakenumDo Addreturnreturn过程过程 Makenum过程过程 Addreturn8.2 自定义函数 Foxpro中使用的函数可以分为两大类:一类是系统内部函数,另一类是自定义函数。前者

9、是系统提供的标准函数,可以直接使用。后者是用户根据实际需要定义的函数,可以实现比较复杂的操作,完成那些用Foxpro内部函数所无法解决的特殊任务。自定义函数是Foxpro中非常灵活的一种结构,可在许多标准命令中加入自定义函数而使其用途更加广泛。8.2.1 自定义函数的说明及调用 自定义函数的说明 在Foxpro中,使用自定义函数之前必须进行说明。自定义函数的一般结构如下:FUNCTION PARAMETERS RETURN 。【例8.7】编写一个对字符串加密的自定义函数。(prog8_7.prg)自定义函数的调用 自定义函数的调用方法同Foxpro内部函数的调用相同,也必须出现在表达式中。调用

10、格式如下:自定义函数名(实际参数)同过程调用一样,在调用自定义函数时,也要进行参数传递,即实参与形参按顺序对应,一一传递数据。如果在说明自定义函数时没有使用参数说明命令PARAMETERS(即为无参函数),则执行调用时实际参数可以没有,但自定义函数名后面的括号不能省略。可见,自定义函数的调用方法与前面介绍过的过程的调用也不同。【例8.8】利用自定义函数计算的值。其中,M、N和P的值可通过键盘输入。例:prog8_8.prg (1+2+3+M)+(1+2+3+N)(1+2+3+P)8.2.2 函数参数的传递方式 Foxpro中实现函数参数的传递有两种方式,即按值传送和按地址传送按值传送和按地址传

11、送。所谓“按值传送按值传送”是指把实参变量的值传送给对应的形参变量,当形参变量的值在自定义函数中发生变化时,不影响对应的实参变量的值。所谓“按地址传送按地址传送”是指把实参变量的地址传送给对应的形参变量,即形参变量和实参变量使用同一个存储单元,因此当形参变量的值在自定义函数中发生变化时,将改变对应的实参变量的值。在调用过程时,形参和实参之间的参数传递是按地址传送方式进行的。在调用自定义函数时,形参和实参之间的参数传递是按值传送方式进行的(默认方式)。形参和实参之间的参数传递方式可以使用SET UDFPARMS 命令来控制,也可以将实参变量用一对小括号括起来强迫其按值传送,或在实参变量之前冠以“

12、”强迫其按地址传送。【格式】SET UDFPARMS TO VALUEREFERENCE 使用VALUE时,将按值传送,使用REFERENCE时,将按地址传送。例:prog8_9.prg 几点说明:1.如果需要自定义函数返回多个处理结果时,可以使用按地址方式传递参数。2.在执行自定义函数调用时,不管SET UDFPARMS 命令当前的设置情况如何,使用强迫按值传送和强迫按地址传送将优先执行。3.使用SET UDFPARMS 命令不能改变DOWITH命令按地址传递参数的方式,除非使用强迫按值传送方式。值得特别注意的是,使用函数参数的按地址传送,有时可能会产生副作用(例如,在函数体内对形参变量赋值

13、时,将会修改对应实参变量原来的值)。因此,除非需要自定义函数返回多个处理结果,否则一般都采用按值传送,这也是Foxpro系统中函数参数的缺省传送方式。8.3 全局变量与局部变量 在Foxpro中,当一个程序、过程或自定义函数调用另一个程序、过程或自定义函数时,除了使用前面介绍的形参与实参结合的方式来传递数据之外,还可以直接使用变量来传递数据,即在调用程序(或被调用程序)中对变量赋值,在被调用程序(或调用程序)中进行引 用。这种数据传送方式常用于无参程序调用。直接使用变量来传递数据时,不仅需要考虑变量的特性(全局变量和局部变量),而且还需要考虑变量的使用范围(作用域),以避免在使用上造成混淆,产

14、生不必要的副作用。8.3.1 全局变量与局部变量的说明 在Foxpro中,按照变量的作用范围可将内存变量划分为全局变量和局部变量。只要对内存变量进行适当的说明,就可以直接使用内存变量在调用程序和被调用程序之间相互传递数据。全局变量的说明 所谓“全局变量”是指在Foxpro中运行的任何程序都可以使用该变量(引用或赋值),其中包括说明它的程序、过程或自定义函数以及各级被调用的程序、过程或自定义函数,直到使用内存变量清除命令RELEASE或CLEAR ALL清除为止。全局变量在使用之前,必须使用PUBLIC命令进行说明。【格式】PUBLIC 其中,为待说明的内存变量名或数组名,含有多个变量时,变量名

15、之间用逗号“,”分隔。【功能】定义全局变量。【说明】使用PUBLIC命令定义的全局变量的初值均为逻辑假值.F.。全局变量必须先说明,后使用。局部变量的说明 所谓“局部变量”是指那些只能在说明它的程序、过程或自定义函数中使用的内存变量,其中包括被它调用的各级程序、过程或自定义函数。一旦退出说明它的程序、过程或自定义函数,局部变量将自动消失,其值不能再被引用。在Foxpro中,一旦对内存变量进行了赋值,该变量就算定义了,如果没有事先对其进行全局说明,则自动说明为局部变量。同样,在程序中通过DECLARE或DIMENSION命令定义的数组,如果没有事先对其进行全局说明,也视为局部变量。由于局部变量也

16、适用于各级被调用的程序、过程或自定义函数,所以当调用程序中的内存变量与被调用的程序、过程或自定义函数中的内存变量同名时,将会产生意想不到的副作用。为了避免这种情况发生,Foxpro提供了PRIVATE命令,可将调用程序中的同名内存变量暂时隐藏起来,即在执行被调用的程序、过程或自定义函数时,只有该程序、过程或自定义函数中的局部变量参加运算,不会影响调用程序中的内存变量。一旦调用结束返回调用程序时,自动恢复被隐藏的内存变量。【格式】PRIVATE ALL LIKEEXCEPT ARRAY 其中,表示要说明的局部内存变量名列表,可以是一个或多个用逗号分隔的内存变量。是指含有*和?的变量名,可以表示某

17、一类变量。表示要说明为局部数组的名称列表。【功能】说明局部内存变量或数组。【说明】使用PRIVATE命令只能说明局部变量,不能用来定义或建立变量,也就是说,必须通过赋值或其它途径来建立。在程序、过程或自定义函数中,使用PRIVATE命令说明的局部变量,只能在该程序、过程或自定义函数中使用。在编程时,如果希望在调用程序和被调用程序中使用相同的内存变量名,可在被调用程序中使用PRIVATE命令将其说明为局部变量,这样在被调用程序执行过程中,调用程序中的这些同名内存变量将被隐藏起来,以确保其值不被破坏。一旦调用返回,自动恢复原来那些被隐藏起来的同名变量。区域变量的说明 在Foxpro中,除了可以使用

18、全局变量和局部变量之外,还可以使用区域变量。区域变量与局部变量类似,当其它内存变量与区域变量重名时,它们之间互不干扰,因为区域变量在一个区域中被保护。在Foxpro中建立区域变量时,首先使用#REGION定义一个区域,然后利用REGIONAL命令对存放到该区域的变量进行说明。【格式】#REGION REGIONAL 其中,#REGION为Foxpro提供的预处理程序指令,它根据指定的(0-31)建立一个区域以便存放区域变量。REGIONAL命令用来说明一个或多个欲存放在该区域的内存变量或内存变量数组。当中含有多个变量时,变量之间用逗号“,”分隔。【功能】建立区域内存变量。例:prog8_918

19、.3.2 变量的作用域 所谓变量的作用域是指该变量可以使用的范围,也就是说,这个变量在哪个程序、过程或自定义函数中有效。全局变量的作用域是从该全局变量的定义开始,一直到退出Foxpro程序时所执行的任何程序、过程或自定义函数。使用PRIVATE 命令说明的局部变量(或使用REGIONAL命令说明的区域变量)的作用域就是它所在的那个程序、过程或自定义函数。自动说明(即非PRIVATE命令说明)的局部变量的作用域是从该变量的定义(如赋值)开始,到结束该程序时所执行过的所有命令、程序、过程或自定义函数。(例prog8_10.prg 例prog8_11.prg 例prog8_12.prg)8.4 递归

20、8.4.1 递归的概念 在Foxpro中,过程和自定义函数除了能够嵌套调用外,还可以自己调用自己,我们把这种调用称为递归调用(简称递归)。其中,递归又可分为直接递归和间接递归两种形式。所谓“直接递归”是指在一个过程(或自定义函数)内部又出现了调用自身的调用。所谓“间接递归”是指在过程(或自定义函数)中,调用了另外一个过程(或自定义函数),而在中,又出现了对的调用。在程序设计中,采用递归来求解问题简单而自然,并且编写出的程序代码也比较短,但并不是所有的问题都能够采用递归来求解。采用递归求解的问题必须满足以下三个条件:可以把要求解的问题转化为一个新的问题,而这个新问题的求解方法与原问题的求解方法相同,只是所处理的对象不同,而且它们只是有规律的递增或递减。可以通过转化过程使问题得到求解。必须存在一个能够终止递归的条件,使得经过有限次递归后,得到问题的解。【例8.13】采用过程递归调用,编写一个把任意位正整数逆转的程序。例如,输入整数 12345,逆转后为54321。Prog8_13.prg【例8.14】分析输入K值为5时下面程序的输出结果。Prog8_14.prg 【例8.15】编写一个利用函数递归调用,计算任意正整数的阶乘的程序。Prog8_15.prg 【例8.16】分析下面程序的运行结果。Prog8_16.prg

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(第五章顺序结构程序设计课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|