版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1Visual Foxpro Visual Foxpro 程序设计教程程序设计教程第第9章章 结构化程序设计结构化程序设计2程序的模块化程序的模块化一、子程序一、子程序二、过程二、过程三、自定义函数三、自定义函数四、公有变量、私有变量和本地变量四、公有变量、私有变量和本地变量五、过程与自定义函数的递归调用五、过程与自定义函数的递归调用3一、子程序一、子程序(一)子程序的概念(一)子程序的概念在模块化程序设计方法中,我们将一段具有相对在模块化程序设计方法中,我们将一段具有相对独立和通用性的完整的程序段称为子程序。独立和通用性的完整的程序段称为子程序。(二)子程序的建立与调用(二)子程序的建立与调
2、用子程序建立与一般程序的方法相同,只是要在子子程序建立与一般程序的方法相同,只是要在子程序的适当位置加上返回语句。程序的适当位置加上返回语句。返回语句:返回语句:RETURN调用子程序语句:调用子程序语句:DO 4功能:程序运行到功能:程序运行到 DO 语句时,将指定的子程序语句时,将指定的子程序调入内存并执行;当执行到调入内存并执行;当执行到 RETURN 语句语句时,返回到调用该子程序的主程序,并执行时,返回到调用该子程序的主程序,并执行调用语句的下一条可执行语句。调用语句的下一条可执行语句。do subdo subRETURNmain.prgsub.prg5例例1:子程序的简单调用:子程
3、序的简单调用*main.prgclearfor i=1 to 4 ?调用子程序调用子程序subdo subnextreturn*sub.prgfor j=1 to 4 ?space(4-j) ?replicate(*,2*j-1)nextreturn6(三)子程序的嵌套(三)子程序的嵌套程序的嵌套就是主程序调用子程序,子程序又调程序的嵌套就是主程序调用子程序,子程序又调用子程序的过程。用子程序的过程。子程序子程序1DO 子程序子程序2RETURN主程序主程序DO 子程序子程序1RETURN子程序子程序2RETURN7返回语句的其他用法:返回语句的其他用法:RETURN TO 程序名程序名| T
4、O MASTER (1)若选择)若选择TO 程序名程序名,则直接返回指定的程,则直接返回指定的程序文件。序文件。(2)若选择)若选择TO MASTER,则不论有多少级则不论有多少级调用都直接返回第一级主程序。调用都直接返回第一级主程序。do sub1return tosub2do sub2returndo sub3return to masterdo sub4returnmain.prgsub1.prgsub2.prgsub3.prgsub4.prg8二、过程二、过程(一)过程(一)过程过程与子程序基本相同,但过程可以存在于调用过程与子程序基本相同,但过程可以存在于调用它的它的主程序中主程序中
5、,作为主程序的一部分,还可,作为主程序的一部分,还可以放在以放在过程文件中过程文件中。1. 过程定义过程定义格式:格式:PROCEDURE RETURNENDPROC功能:定义一个过程,该过程可以在程序中调用。功能:定义一个过程,该过程可以在程序中调用。92. 过程的调用过程的调用格式:格式:DO 功能:调用并执行指定的过程。功能:调用并执行指定的过程。(二)过程在主文件中(二)过程在主文件中过程可以直接在主文件中书写过程可以直接在主文件中书写,此时,每个过程,此时,每个过程只要以只要以PROCEDURE 进行声明即进行声明即可;可;过程必须写在主程序后面!过程必须写在主程序后面!10例例2:
6、求求1-100之间的奇数和与偶数和之间的奇数和与偶数和*ex2.prgcleardo ado breturnproc asd=0for m=2 to 100 step 2sd=sd+mendfor?偶数和为偶数和为,sdreturn主程序主程序子程序子程序1子程序子程序2proc bsp=0i=1do while i=100sp=sp+ii=i+2enddo?奇数和为奇数和为,spreturn11(三)过程文件(三)过程文件1.将多个过程放置在一个程序文件中,此文件为将多个过程放置在一个程序文件中,此文件为过程文件。过程文件。2.过程文件过程文件(.prg)的建立方法与一般程序文件的的建立方法
7、与一般程序文件的建立方法相同。建立方法相同。modi comm 与子程序相比,使用过程文件后,可以减少程序与子程序相比,使用过程文件后,可以减少程序中打开文件数目和访问磁盘次数,中打开文件数目和访问磁盘次数,提高程序提高程序运行效率运行效率。12过程文件的基本格式:过程文件的基本格式:procedure Returnprocedure Returnprocedure return在同一个过程文件中的过程不能同名在同一个过程文件中的过程不能同名133. 要使用过程文件中的过程,必须先将过程文要使用过程文件中的过程,必须先将过程文件打开,语句为:件打开,语句为:SET PROCEDURE TO 使
8、用完毕后要关闭过程文件,语句为:使用完毕后要关闭过程文件,语句为:set procedure to | close procedure 也可以不打开过程文件,直接调用过程:也可以不打开过程文件,直接调用过程:DO IN 14例例3:求:求1-100之间的奇数和与偶数和之间的奇数和与偶数和*ex3.prgclearset proc to ex3pdo ado bclose procreturn*ex3p.prgproc asd=0for m=2 to 100 step 2sd=sd+mendfor?偶数和为偶数和为,sdreturnproc bsp=0i=1do while i=100sp=sp
9、+ii=i+2enddo?奇数和为奇数和为,spreturn主程序主程序子程序子程序1子程序子程序2过程文件15过程的查找顺序:过程的查找顺序:调用过程的主文件调用过程的主文件 已打开的过程文件已打开的过程文件 独立独立的子程序文件的子程序文件16(四)过程调用中的参数传递(四)过程调用中的参数传递在调用子程序或过程时,可以给子程序传递参数,在调用子程序或过程时,可以给子程序传递参数,使子程序根据参数进行运算。使子程序根据参数进行运算。1. 发送数据的调用语句格式:发送数据的调用语句格式:格式:格式:DO WITH 功能:在调用子程序的同时将功能:在调用子程序的同时将中的参中的参数值传送给子程
10、序中对应的变量。数值传送给子程序中对应的变量。注意:带参数调用子程序时,注意:带参数调用子程序时,子程序必须要有一子程序必须要有一个专用语句接收此参数个专用语句接收此参数,且此语句必须是过,且此语句必须是过程的第一个语句。程的第一个语句。172. 子程序(过程)中接收参数语句子程序(过程)中接收参数语句格式:格式:parameters 功能:接收功能:接收DO . WITH.语句中语句中中中提供的参数,并把它传送给提供的参数,并把它传送给中对应中对应变量,供本子程序或过程使用。变量,供本子程序或过程使用。注意:注意:1)DO语句中语句中的参数可以是各种类型的参数可以是各种类型的常量、变量或表达
11、式,但的常量、变量或表达式,但必须与必须与 parameters 语句中语句中的变量个数、的变量个数、类型相同。类型相同。18例例4:clear?调用子程序调用子程序subdo sub with 10returnproc subpara nfor j=1 to n ?space(n-j) ?replicate(*,2*j-1)nextreturninput 请输入行数:请输入行数: to x?调用子程序调用子程序subdo sub with x192)如果在实参表中用内存变量单独作为参数时,)如果在实参表中用内存变量单独作为参数时,FoxPro规定以规定以“传地址传地址”的方式进行参数传的方式
12、进行参数传递。即:递。即:在过程中对形参变量进行修改,返在过程中对形参变量进行修改,返回后新的值将传递给对应的实参变量回后新的值将传递给对应的实参变量。3)如果将实参表中内存变量)如果将实参表中内存变量用用()括起来括起来,则,则FoxPro 规定以规定以“传值传值”的方式进行参数传的方式进行参数传递。即:递。即:在过程中对形参变量进行修改,返在过程中对形参变量进行修改,返回后新的值将不传递给对应的实参变量回后新的值将不传递给对应的实参变量。20. .m=0n=0do p with m , n?m,n. .proc pparameters x , y. .x=1y=2. . .m=0n=0do
13、 p with m , (n)?m,n. .proc pparameters x , y. .x=1y=2. .21例例5:计算矩形面积:计算矩形面积clearl=2w=3s=0do area with l,w,s?矩形面积为:矩形面积为:,sreturnprocedure areaparameters c,k,mm=c*kreturnclearl=2w=3s=0do area with l,w,(s)?矩形面积为:矩形面积为:,sreturnprocedure areaparameters c,k,mm=c*kreturn矩形面积为:矩形面积为:6矩形面积为:矩形面积为:022例例6:写出程
14、序的执行结果:写出程序的执行结果x=1y=3do sub with (x),y,5?x, yreturnprocedure subparameters a,b,ca=a+b+cb=a+b-creturn1 723三、自定义函数三、自定义函数(一)自定义函数格式(一)自定义函数格式(1)自定义函数以一个独立的文件存在)自定义函数以一个独立的文件存在格式:格式:PARAMETERS RETURN 此时自定义函数的文件名就是函数名。此时自定义函数的文件名就是函数名。24(2)自定义函数在过程文件或主文件中)自定义函数在过程文件或主文件中定义:定义:格式:格式:FUNCTION PARAMETERS
15、RETURN ENDFUNCTION25注意:注意:1)函数命名原则与文件命名相同,不能与内存)函数命名原则与文件命名相同,不能与内存变量、系统函数等同名。变量、系统函数等同名。2)自定义函数与子程序(过程)的不同之处是自定义函数与子程序(过程)的不同之处是运行后必须返回一个函数值运行后必须返回一个函数值。3)自定义函数在过程文件或主文件中定义时,)自定义函数在过程文件或主文件中定义时,FUNCTION 为函数的首部,不能为函数的首部,不能省略。省略。4)parameters 用来接收传递的参用来接收传递的参数,如果不传递参数,可以省略。数,如果不传递参数,可以省略。26(二)自定义函数的调用
16、(二)自定义函数的调用自定义函数的调用与系统函数的调用相同:自定义函数的调用与系统函数的调用相同:调用格式:调用格式:(实参表实参表)例例7:编一个函数,能用来计算球的体积。:编一个函数,能用来计算球的体积。格式一:以独立文件形式存在格式一:以独立文件形式存在*vol.prgparameter rv=4/3*pi()*r3return v*ex7.prgclear? vol(4)-vol(3)return27格式二:位于主文件中格式二:位于主文件中*ex7-2.prgclear? vol(4)-vol(3)returnfunction volparameter rv=4/3*pi()*r3re
17、turn v28格式三:位于过程文件中格式三:位于过程文件中*modi comm vpfunction volparameter rv=4/3*3.14159*r*3return v*ex7-3.prgclearset proc to vp? vol(4)+vol(3)close procreturn29其实,过程与自定义函数是一致的:其实,过程与自定义函数是一致的:(1)定义)定义过程与自定义函数都可以用过程与自定义函数都可以用procedure和和function进行定义。如:进行定义。如:procedure f 等价于等价于function f(2)过程与自定义函数都可以用)过程与自定义
18、函数都可以用do和和()进行调进行调用。区别在于:用。区别在于:是否能返回结果是否能返回结果。do fwith x不能返回结果不能返回结果f(x)可以返回结果可以返回结果30n参数默认的传递方式:参数默认的传递方式:子程序与主程序之间子程序与主程序之间传递的参数默认按地址传递,传递的参数默认按地址传递,要想改变,则应该将传递的参数加上括号。要想改变,则应该将传递的参数加上括号。自定义函数与程序之间自定义函数与程序之间传递的参数默认按数值传传递的参数默认按数值传递,要想改变为按递,要想改变为按地址传递地址传递,执行命令,执行命令SET UDFPARMS TO REFERENCE恢复为按恢复为按数
19、值传递数值传递,执行命令,执行命令SET UDFPARMS TO VALUE31例例8:求:求S=1!+2!+10!用自定义函数求:用自定义函数求:clears=0for i=1 to 10s=s+prime(i)next?1!+2!+10!=,sreturnfunction primepara xp=1for k=2 to xp=p*knextreturn p32 用过程求:用过程求:clears=0for i=1 to 10t=1do prime with i,ts=s+tnext?1!+2!+10!=,sreturnprocedure primepara x,pfor k=2 to xp
20、=p*knextreturn33四、公有变量、私有变量和本地变量四、公有变量、私有变量和本地变量1、公有变量、公有变量(全局内存变量全局内存变量)在上下各级程序中都可以使用的变量。程序结束在上下各级程序中都可以使用的变量。程序结束时,公有变量不会自动释放,必须使用时,公有变量不会自动释放,必须使用release 或或 clear memory定义:定义:1)在命令窗口中定义的变量是公有变量。)在命令窗口中定义的变量是公有变量。2)在程序中可以用)在程序中可以用public命令定义公有变量。命令定义公有变量。格式:格式:public /array 34注意:注意:n在程序中公有变量必须先用在程序
21、中公有变量必须先用public定义,然定义,然后再赋值。后再赋值。n在高层中的公有变量,可以在下层程序中使在高层中的公有变量,可以在下层程序中使用用 private 或或 parameter 命令说明成私有命令说明成私有变量,实现变量隐藏变量,实现变量隐藏。n内存变量名表中的变量可以是简单变量,也内存变量名表中的变量可以是简单变量,也可以是数组变量。可以是数组变量。352、私有变量(隐藏内存变量)、私有变量(隐藏内存变量)FoxPro将未经特殊说明而直接使用的内存变量将未经特殊说明而直接使用的内存变量自动默认为私有变量。自动默认为私有变量。特点:特点:(1)私有变量可以)私有变量可以由首次使用
22、它的程序和该程由首次使用它的程序和该程序的下级子程序使用序的下级子程序使用。(2)下级子程序可以修改上级程序中的私有变)下级子程序可以修改上级程序中的私有变量,返回后私有变量仍保留修改后的值。量,返回后私有变量仍保留修改后的值。(3)当首次使用它的子程序结束,私有变量被)当首次使用它的子程序结束,私有变量被释放。释放。36当私有变量与上层模块中的变量同名时,可以使当私有变量与上层模块中的变量同名时,可以使用用private声明私有变量。声明私有变量。格式:格式:private private all like/except 该命令会在当前过程中隐藏上级过程中定义的指该命令会在当前过程中隐藏上级
23、过程中定义的指定内存变量或数组。定内存变量或数组。37注意:注意:1)隐藏内存变量的意义是:某个变量在一过程)隐藏内存变量的意义是:某个变量在一过程中可以保存一个值,其同名变量在下级过程中可以保存一个值,其同名变量在下级过程中可以保存另外一个值,而当返回上级过程中可以保存另外一个值,而当返回上级过程时此变量又会获得原来的值。时此变量又会获得原来的值。2)在高层中用)在高层中用public说明的变量,在低层中可说明的变量,在低层中可用用private隐藏,反之不能。隐藏,反之不能。3)like 表示与通配符相同的内存表示与通配符相同的内存变量被隐藏。变量被隐藏。4)except 表示与通配符不同
24、的内表示与通配符不同的内存变量被隐藏。存变量被隐藏。383、本地变量(局部内存变量)、本地变量(局部内存变量)本地变量只能在建立它的过程中使用,不能在上本地变量只能在建立它的过程中使用,不能在上级或下级过程中使用,当建立它的过程结束,级或下级过程中使用,当建立它的过程结束,本地变量被释放。本地变量被释放。格式:格式:local 39例例9:*主程序主程序clearpublic xprivate y,kx=1y=2do sub6?x=,x,y=,yk=3do sub7?y=,y,k=,k*过程过程sub6procedure sub6local yy=3x=x*yy=x+yreturn*过程过程s
25、ub7procedure sub7k=k+yy=k*yreturnx=3 y=2y=10 k=540例例10:用变量作用域和过程求:用变量作用域和过程求1!+2!+10!clears=0t=1for i=1 to 10do prime with is=s+tnext?1!+2!+10!=,sreturnprocedure primepara xt=1for k=2 to xt=t*knextreturn41五、过程与自定义函数的递归调用五、过程与自定义函数的递归调用一个过程(自定义函数)直接或间接地调用该过一个过程(自定义函数)直接或间接地调用该过程(自定义函数)本身,便构成了过程(自程(自定义函数)本身,便构成了过程(自定义函数)的递归调用。定义函数)的递归调用。递归调用中,必须要有能使递归结束的条件。递归调用中,必须要有能使递归结束的条件。do subreturndo subreturndo subreturn do subreturnmain.prgsub.prgsub.prgsub.prgsub.prg42 1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 通信线路施工方案
- 市政热力工程施工方案
- 具身智能+城市巡检机器人环境感知优化方案可行性报告
- 拉森钢板桩支护施工方案实施步骤
- 具身智能+智能客服机器人情感交互与满意度提升方案可行性报告
- 消防设施作业部署方案入门版
- 钢结构疲劳试验方案
- 具身智能在工业制造中的质量控制方案可行性报告
- 电梯井道模板施工方案
- 具身智能+体育训练智能教练机器人应用分析方案可行性报告
- 2025年高级茶艺技师题库及答案(可下载)
- 皮肤结构与功能基础知识讲义
- 2025版小学《语文课程标准》测试题及答案
- 数独九宫格(中级)游戏题目100题
- 2025-2026学年上学期初中语文统编版七年级期中必刷常考题之默写
- 2025年事业单位招聘考试职业能力倾向测验试卷(注册土木工程师(港口航道)类)
- 2025年及未来5年中国档案管理软件行业市场调研分析及投资前景预测报告
- 锂电池包安全培训课件
- 2025年及未来5年中国艾灸养生仪行业发展监测及市场发展潜力预测报告
- 2025-2026学年泰山版(2024)小学信息科技五年级上册(全册)教学设计(附目录P143)
- 3.1数据编码 教学设计 2023-2024学年教科版(2019)高中信息技术必修1
评论
0/150
提交评论