[循环执行的语句]
ENDSCAN
【例】统计教师表中性别为男的记录的条数。
ncount=0 use js
scan for xb=\男\ncount=ncount+1
&& skip 如果有此语句,则程序功能为统计顺序号为奇数的男教师人数 endscan
3.掌握创建用户自定义函数和过程的方法 (1)用户自定义函数(UDF)。 1)格式:
FUNCTION 函数名
parameter 参数列表 [函数的执行语句部分] return 结果表达式 ENDFUNC
&&当该函数需要从外部接受值时,必须有该语句,形
式参数
&&包括赋初值、处理
&&返回结果,UDF 必须包含该语句
注意
函数名不能作为函数体中的变量名 2)调用:
?函数名(参数列表) &&必须保证参数列表中数据的一一对应,实在参数 y=函数名(参数列表) 注意
实参和形参的一一对应包括:个数、次序、类型三个方面的对应 (2)过程 1)格式:
PROCEDURE 过程名
parameter 参数列表 &&当该过程需要从外部接受值时,必须有该语句 [过程的执行语句部分] &&包括赋初值、处理 ?结果 &&显示结果,此处不能用 RETURN 返回值 ENDPROC
2)调用:DO 过程名 WITH 参数列表。 (3)过程和函数存储的 4 种形式。
1)放于主程序单元之后,与主程序位于同一个 PRG 文件。 2)每个函数或过程单独以一个 PRG 文件存放,一个函数或过程存放一个文件。 3)所有的函数和过程存放于同一个 PRG 文件中,这个 PRG 文件称为过程文件。 如果是第三种存放形式,则在调用该函数或过程之前,必须执行命令:
第二部分 《Visual FoxPro 程序设计(第二版)》复习提要与学习指导、习题及参考解答 119
120 Visual FoxPro 程序设计实训与考试指导(第二版)
SET PROCEDURE TO 过程文件名 &&指定过程所在的位置信息
4)函数和过程也可存放于数据库文件的存储过程中。 如果函数和过程位于数据库的存储过程,则调用之前,必须先打开该数据库。
(4)参数传递的两种形式。 值传递:在函数或过程中改变参数的值,在程序运行结束后,该参数的值仍旧为原来的值。 引用传递:将参数的地址传递到函数和过程中,程序运行结束后,对该参数的改变将保留。 默认:函数采用值传递来传递参数;过程采用引用传递来传递参数。 设置默认的参数传递方式:SET UDFPARMS TO REFERENCE|VALUE 强行指定参数传递方式:值传递——变量名前加@
引用传递——变量名加括号 (5)变量的作用范围。 LOCAL(局部变量)只能在定义它的程序单位中使用,在它的上级或下级程序单位中无效 PRIVATE(私有变量)子程序中的同名变量在运行结束后消失,不影响主调程序的同名 变量
PUBLIC(全局变量)在整个程序运行过程中,在每个程序单位中都有效
2.5.2 习题 5 及参考解答
一、选择题
1.Visul FoxPro 的程序文件可以由( )命令建立或修改。 A.MODIFY COMMAND B.EDIT COMMAND C.CHANGE COMMAND D.DO COMMAND 2.在项目管理器中,程序存放在( )页中。
A.数据 B.文档 C.类 D.代码 3.Visual FoxPro 程序的三种基本结构是( )。 A.顺序结构、选择结构和循环结构 B.顺序结构、选择结构和逻辑结构 C.模块结构、转移结构和循环结构 D.网状结构、选择结构和逻辑结构 4.能放在可执行命令末尾的注释命令是( )。 A.REM B.&& C.* D.// 5.下列不正确的赋值语句是( )。 A.x=12 B.store 12 to x C.\D.input \ 6.假定 X=2,执行命令 ? X=X+1 后,结果是( )。 A.3 B.2 C..T.
。 7.下列语句中,不是输入命令的是( )
A.? B.INPUT C.ACCEPT
D..F.
D.WAIT
8.在当前位置处输出结果不回车换行的命令是( )。
A.? B.?? C.OUTPUT D.PRINT 9.下列语句中,( )是分支语句。 A.IF…ENDIF B.FOR…ENDFOR C.DO WHILE…ENDDO D.SCAN…ENDSCAN 10.对 DO CASE…ENDCASE 语句,下列说法中正确的是( )。 A.执行第
一个语句组 B.执行满足条件的第一个语句组 C.执行满足条件的所有语句组 D.执行 OTHERWISE 后面的语句组 11.对于 FOR I=1 TO 8 STEP 2 循环,正常退出循环后的 I 值为( )。
A.7 B.8 C.9 D.10
12.在 DO WHILE…ENDDO 循环中,若循环条件设置为.T.,则下列说法中正确的是
( )。
A.程序无法跳出循环 B.程序不会出现死循环 C.用 EXIT 可跳出循环 D.用 LOOP 可跳出循环 13.针对表的循环语句是( )。
A.FOR…ENDFOR B.DO WHILE…ENDDO
C.SCAN…ENDSCAN D.DO CASE…ENDCASE 14.不能将 LOOP 作为有效命令使用的程序结构是( )。
A.IF…ENDIF B.SCAN…ENDSCAN C.FOR…ENDFOR D.DO WHILE…ENDDO 15.执行一列程序后,屏幕显示的结果为( )。
X=20 Y=10 N=0
DO WHILE Y RETURN C.4 D.5 16.将数组的内容传送到表的命令是( )。 A.DIMENSION B.APPEND FROM ARRAY C.COPY TO ARRAY D.RELEASE 17.清除所有内存变量的命令是( )。 A.CLEAR C.DIMENSION 18.过程的引导语句是( )。 A.PROCEDURE A.10 B.20 B.PUBLIC D.RELEASE ALL B.PROGRAM 第二部分 《Visual FoxPro 程序设计(第二版)》复习提要与学习指导、习题及参考解答 121 122 Visual FoxPro 程序设计实训与考试指导(第二版) C.PARAMETERS D.FUNCTION 19.函数的返回值跟在( )之后 。 A.RETURN B.LPARAMETERS C.PARAMETERS D.FUNCTION 20.下列关于参数传递不正确的说法是( )。 A.传值的方式是“单向”的,即只 能由实参传递给虚参,而虚参不能返回给实参 B.传址的方式是“双向”的,即实参变量和虚参变量被分配为同一存储单元 C.将实参变量用括号括起来为传值方式,在实参变量前加“@”符号则为传址方式 D.在默认的情况下,Visul FoxPro 在调用子程序时采用传址方式 21.定义全局变量的命令为( )。 A.PUBLIC B.LOCAL C.DIMENSION D.PRIVATE 22.关于变量不正确的说法是( )。 A.全局变量在所有程序中都有效,都可以使 用 B.局部变量只能在创建它们的过程内部使用和修改 C.私有变量在定义它的程序以及它所调用的子程序范围内有效,即本层及下层有效 D.系统默认定义的变量都属于全局变量 23.在 Visual FoxPro 中,关于过程调用的叙述正确的是( )。 A.当实参的个数少于形参的个数时,多余的形参取逻辑假 B.当实参的个数多于形参的个数时,多余的实形参被忽略 C.实参必须与形参的个数相等 D.实参必须与形参的个数相等且类型一一对应 24.只能关闭过程文件的命令是( )。 A.CLOSE PROCEDURE C.CLOSE DATABASES C.SET INDEX TO D.USE 25.调用子程序传递实参时,通过( )语句。 A.PARAMETERS B.WITH C.TO D.LINK 二、阅读下列程序,根据要求写出结果 【程序 1】 SET TALK OFF X=5 DO CASE CASE X>10 Y=X+5 CASE X>0 Y=X*3 OTHERWISE Y=X**2+10