vf子程序、函数与过程

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
子程序: z2.prg x3=x3+1 return to master
例建立函数,计算N!
function jc
&&自定义jc函数
parameters jcn &&将n的值传给参数jcn
f=1
&&阶乘初值
for k=1 to jcn
f=f*k &&计算阶乘,结果存入f
endfor
return f &&将f的值返回调用函数
行使用PARAMETERS <形参>命令,否则可省略。
一、子程序定义形式:
[PROCEDURE|FUNCTION<子程序名>] [PARAMETERS <形参>] <命令序列> [RETURN[<表达式>]]
[ENDPROC|ENDFUNC]
说明: 4、子程序执行到RETURN命令,控制权转回到上级调 用程序。需要返回一个值,则选用RETURN <表达式> 命令;使用 RETURN TO MASTER 转回到最上级主 程序;缺省RETURN命令,子程序结束处自动执行一 条隐含的RETURN命令;若RETURN命令不带表达式, 则返回逻辑真.T. 。
值传递和地址传递
(实参与形参之间的数据传递)
值传递方式:则子程序中参数变化后的值不 回传给上级调用程序。
地址传递方式:则子程序中参数变化后的值 要回传给上级调用程序 如果不允许子程序改变传递参数变量的值, 应该使用值传递方式。如果允许子程序改变 传递参数变量的值,则要使用地址传递方式。
值传递和地址传递
私有变量
在程序中直接使用(没有预先声明),而 由系统自动隐含建立的变量都是私有变 量。 私有变量的作用域是建立它的模块及其 下属的各层模块。
*主程序 main.prg r=100 DO sub ?p RETURN
*子程序sub.prg p=2*3.14*r RETURN
*主程序 main.prg r=100 DO sub ?p RETURN
m
例求组合:Cn
modify command cmn set talk off input “输入m” to m input “输入n” to n c=jc(m)/(jc(n)*jc(n-m)) ?c set talk on return
function jc parameters jcn f=1 for k=1 to jcn f=f*k endfor return f

area=sub( x,y,z )

? "Area="+STR(area,6,2)

RETURN


FUNCTION sub
PARAMETER a,b,c
p=(a+b+c)/2
s=SQRT(p*(p-a)*(p-b)*(p-c))
RETURN s
SET TALK OFF area=0 CLEAR INPUT "请输入第一边大小:" TO x INPUT "请输入第二边大小:" TO y INPUT "请输入第三边大小:" TO z DO sub WITH x,y,z ? "Area="+STR(area,6,2) RETURN
(实参与形参之间的数据传递)
常量和表达式只能使用值传递方式
内存变量既可以使用值传递方式,又可以使 用地址传递方式。使用值传递方式的变量要 用括号括起来,使用地址传递方式的变量不 加括号。
采用 子程序名(实参) 方式调用时,默
认按值传递方式传递参数。
例 写出下列程序的输出
set talk off x=1 y=3 do sub with x,(y),5 ? x,y return procedure sub parameter a,b,c a=a+b+c b=a+b-c return
PROCEDURE sub PARAMETER a,b,c p=(a+b+c)/2 area=SQRT(p*(p-a)*(p-b)*(p-c)) RETURN
7.5.2 内存变量的作用域
变量的作用域指的是变量在什么范 围内是有效或能够被访问的。 Visual FoxPro中,分为公共变 量、私有变量和局部变量3类。
7.5 程序的模块化
模块化程序设计思想 子程序、函数、过程 内存变量的作用域 调用子程序时的数据传递
7.5.1 子程序、过程和函数
应用程序一般都是多模块程序,包 含多个程序模块。模块是相对独立的一 个程序段,他可以被其它模块调用,也
可以去调用其他的模块。被其它程序调 用的模块称为子程序。调用其它模块而
function fun1 parameters a,b c=a*a-b*b return c
endfunc
形参为子程序中的局部
变量,这些局部变量可以
接收上级程序中实参传
递来的参数,也可以回送 子程序运行的结果。
实参可以是常量、变量或 一般表达式,调用模块程 序时,形参的数目不能少 于实参的数目,当形参数 目多于实参数目时,多余 的形参取初值逻辑假.F.。
endproc
modify command main
*main.prg set talk off input “输入圆半径" to r do area with r return
modify command area
*area.prg para cr s=pi()*cr*cr ?cr,s return
例创建过程文件,计算 1+2+3+….+n
procedure sum
parameters sn &&将n的值传递给参数sn
for k=1 to sn
s=s+k
&&计算连加和,结果存入s
endfor
return
&&返回调用程序
Leabharlann Baidu
*main.prg set talk off input "输入n:" to n s=0 do sum with n ?s set talk on return
没被其它模块调用的模块称为主程序。 子程序、过程、函数。
一、子程序定义形式:
[PROCEDURE|FUNCTION<子程序名>] [PARAMETERS <形参>] <命令序列> [RETURN[<表达式>]]
[ENDPROC|ENDFUNC]
说明: 1、 PROCEDURE或FUNCTION 命令表示一个子程 序的开始,并命名子程序名。通常称PROCEDURE为 过程,FUNCTION为自定义函数。 如果缺省该命令表明子程序是一个独立的程序文件;若 写上该命令,表明子程序通常要放在某程序文件代码后 面。独立的子程序文件同样用MODIFY COMMAND命 令来建立、修改和保存,扩展名默认为 .PRG。
主程序
… DO A …
子程序A
… DO B

RETURN
子程序B
… RETURN
主程序
子程序A
… DO A …
… DO B …
RETURN
子程序B

RETURN TO MASTER
主程序
… DO A

子程序A
… DO B

RETURN
子程序B

RETURN … …
主程序: z.prg
set talk off store 2 to x1,x2,x3 x1=x1+1 do z1 ?x1+x2+x3 return
modify command main
*main.prg set talk off input "输入x:" to x input "输入y:" to y z=fun1(x,y) ?x,y,z set talk on return
function fun1 parameters a,b c=a*a-b*b return c
*子程序sub.prg PUBLIC p p=2*3.14*r RETURN
628.00
•隐藏变量
当子程序中定义的变量名与主程序中同名时, 为避免子程序中的变量值改变主程序中的变量 值,可在子程序中使用PRIVATE命令隐藏主程 序中可能存在的变量,使这些变量在子程序中 暂时无效。
PRIVATE<内存变量表>
modify command main
*main.prg set talk off input "输入n:" to n s=0 do sum with n ?s set talk on return
procedure sum parameters sn for k=1 to sn s=s+k endfor
procedure sum parameters sn for k=1 to sn s=s+k endfor
return
SET TALK OFF
area=0
例 计 算
CLEAR INPUT "请输入第一边大小:" TO x INPUT "请输入第二边大小:" TO y INPUT "请输入第三边大小:" TO z
该命令并不建立内存变量,它只是隐藏指定的 在上层模块中可能已经存在的内存变量,但是 当模块程序返回到上层模块时,被隐藏的变量 就自动恢复有效性,保持原值。
*exa.prg r=100 p=10 do sub ?p
return procedure sub p=2*3.14*r return
628.00
10
子程序: z1.prg x2=x2+1 do z2 x1=x1+1 return
子程序: z2.prg x3=x3+1 return
主程序: z.prg
set talk off store 2 to x1,x2,x3 x1=x1+1 do z1 ?x1+x2+x3 return
9
子程序: z1.prg x2=x2+1 do z2 x1=x1+1 return
二、子程序的调用
DO <子程序名> [WITH <实参表>] DO <子程序名> <子程序名> (实参表) <子程序名> ( )
说明: 1、执行子程序,子程序结束后返回到上级调用该子程
序命令的下一条命令处。子程序可嵌套调用。 2、实参表:指定传递到子程序的参数,实参可以是表达
式、内存变量、常量、字段名或用户定义函数等。各 参数之间用逗号分隔。传递给一个子程序的参数最多 为24个。实参与形参的个数、类型、顺序要匹配。
一、子程序定义形式:
[PROCEDURE|FUNCTION<子程序名>] [PARAMETERS <形参>] <命令序列> [RETURN[<表达式>]]
[ENDPROC|ENDFUNC]
说明: 2、ENDPROC或ENDFUNC 表示一个子程序的结束。 如果缺省,子程序自动结束于文件结尾或下一条 PROCEDURE 或 FUNCTION命令。 3、如果调用子程序时需引用参数,则在子程序的第一
例 写出下列程序的输出
clear store 3 to x store 5 to y
do plus with x ,y
?x,y procedure plus parameters a1,a2 a1=a1+a2 a2=a1+a2 endproc
endfunc
modify command main
*main.prg set talk off input "输入x:" to x input "输入y:" to y z=fun2(x,y) ?x,y,z set talk on return
modify command fun2
*fun2.prg parameters a,b c=a*a-b*b return c
公共变量
在任何程序模块中都可使用的变量称为公共 变量。公共变量必须先定义后使用。
PUBLIC <内存变量名表>
该命令是建立公共的内存变量,并赋以初值 逻辑假.F.。建立好的公共变量一直有效, 即使程序结束返回命令窗口也不会消失,只 有执行CLEAR MEMORY,RELEASE或 QUIT等命令后,才能被释放。
*exb.prg
r=100
p=10
10
do sub
?p
return
procedure sub private p p=2*3.14*r return
局部变量
局部变量只能在建立它的模块中使用, 不能在上层或下层模块中使用。程序结 束时,自动释放局部变量。
LOCAL<内存变量表>
该变量同样给建立的内存变量赋以初值 逻辑假.F.,也必须先定义后使用。
7.5.3 调用子程序时的数据传递
1.利用变量的作用域实现数据传递
例 计算矩形面积的程序。 * main.prg主程序 gao=8 kuan=6 c=0 DO sub ?c CANCEL * sub.prg子程序 c=gao*kuan RETURN
2.利用参数实现数据传递
*main.prg set talk off input "输入x:" to x input "输入y:" to y z=fun1(x,y) ?x,y,z set talk on return
相关文档
最新文档