ma=a
endif
ifmi>a
mi=a
endif
endfor
?
’最大值:
’,ma
?
’最小值:
’,mi
return
判断:
(1)s=0
fori=1to100
s=s+i
endfor
?
s
(2)s=0
p=1
fori=1to100
p=p*i
s=s+p
endfor
?
s
4、scan[<范围>][for<条件1>][where<条件2>]
<循环体>
endscan
范围默认为all
例:
统计专业代码(学号的第3、4位)为03的男、女生人数。
opendata学生
use学生in0
sele学生
store0tom,w
scanforsubs(学号,3,2)=’03’
if性别=.t.
m=m+1
else
w=w+1
endif
endscan
clear
?
’男生人数:
’,m
?
’女生人数:
’,w
closedata
return
四、多模块程序
应用程序一般都是多模块程序,包含多个程序模块。
模块是一个相对独立的程序段,它可以被其他模块所调用,也可以调用其他的模块。
通常,把被调用的模块称为子模块;把调用其他模块而没有被其他模块所调用的模块称为主程序。
一般大型的程序是有多个人分工合作来完成的,每个人可以编写一个程序模块,最后合成一个总程序。
1、模块的定义和调用
在vfp中,模块可以是命令文件,也可以是过程。
过程的定义:
Procedure/function<过程名>
<命令序列>
[return[<表达式>]]
[endproc/endfunc]
过程文件的建立仍使用modifycommand命令,文件的扩展名是prg
打开过程文件的命令格式为:
setprocedureto[<过程文件1>,<过程文件2>,…][additive]
此命令若不带任何文件名,将关闭所有打开的过程文件。
关闭个别过程文件命令:
releaseprocedure<过程文件1>[<过程文件2>,…]
模块调用格式:
格式1:
do<文件名>|<过程名>
格式2:
<文件名>|<过程名>()
注意:
上面两种格式中,如果模块是程序文件代码,用<文件名>;否则用<过程名>。
例:
7.17
2、参数传递(实参、形参)
接收参数的命令有:
parameters<形参变量1>[,<形参变量2>,…]
lparameters<形参变量1>[,<形参变量2>,…]
注意:
第一条命令声明的形参变量是私有变量
第二条命令声明的形参变量是局部变量
不管是哪一条命令,都应该是模块程序中第一条可执行的命令。
调用模块程序格式:
格式1:
do<文件名>|<过程名>with<实参1>[,<实参2>…]
格式2:
<文件名>|<过程名>(<实参1>[,<实参2>…])
注意:
调用模块时,系统会自动把实参传递给对应的形参。
形参的数目不能少于实参的数目,否则系统会产生运行时错误。
如果形参的数目多于实参的数目,那么多于的形参取初值逻辑假.F.
采用格式1调用模块程序时,如果实参是常量或表达式,传递时按值传递;如果实参是变量,传递时按引用传递。
采用格式2调用模块时,默认情况下都以按值方式传递参数。
如果实参是变量,可以通过命令setudfparmstovalue/reference重新设置参数传递方式。
例:
7.18
注意:
当实参是数组元素时,总是采用按值传递。
当实参是数组名时,若传递方式是按值传递,那么就传递数组的第一个元素值给形参变量;若是按引用传递,那么传递的将是整个数组。
例:
7.19
3、变量的作用域
按作用域来分,内存变量可分为公共变量、私有变量、局部变量。
(1)公共变量:
在任何模块中都可使用,它必须通过命令先建立后使用。
命令建立:
public<内存变量表>
该命令建立公共变量后,并赋初值逻辑假.F.
公共变量一旦建立就一直有效,即使程序运行结束返回到命令窗口也不会消失。
除非执行clearmemory、release、quit等命令后才被释放。
(2)私有变量:
在程序中直接使用而有系统自动隐含建立的变量以及用户自己定义的变量都是私有变量。
例:
x=5
作用域是建立它的模块及其下属的各层模块,一旦建立它的模块程序运行结束,私有变量将自动清除。
(3)局部变量:
只能在建立它的模块中使用。
建立它的模块程序运行结束,局部变量将自动清除。
命令建立:
local<内存变量名表>
在开发程序中,子程序与主程序有可能所用的变量名同名,即子程序用到的变量在主程序中已经建立,那么子程序的运行会无意间改变主程序中变量的取值。
为了解决这个问题,可以使用private命令隐藏主程序中可能存在的变量,使它在子程序中暂时无效。
Private<内存变量表>
Privateall[like<通配符>/except<通配符>]
例:
7.21
用local定义了局部内存变量,若与上一级的变量名同名时,局部变量优先,即它具有隐藏上层模块中建立的同名变量的作用。
例;7.22
4、程序的调试(了解)
调用调试器的方法两种:
(1)‘工具’—‘调试器’
(2)在命令窗口输入debug命令。
了解它包含哪些子窗口以及子窗口的作用。
设置断点:
类型1:
在定位处断点
类型2:
如果表达式为真则在定位处中断。
类型3:
当表达式为真时中断
类型4:
当表达式值改变时中断。
例:
7.23