《第6章VFP结构化程序设计.ppt》由会员分享,可在线阅读,更多相关《第6章VFP结构化程序设计.ppt(103页珍藏版)》请在课桌文档上搜索。
1、1,Visual FoxPro6.0程序设计教程,2,计算机水平等级考试(二级VFP语种),笔试:100分,考试时间2个小时。上机考试:100分,考试时间1个小时。总评:各占50%,3,一、笔试:100分,考试时间2个小时 1.选择题(40小题,共40分)计算机基础:10小题;VFP:30小题 2.填空题(10个空,共20分)3.程序运行结果(5小题,共20分)4.编程(3题,共20分),二、上机考试:100分,考试时间1个小时 1.数据表和数据库操作(3小题,共30分)2.表单设计(共30分)3.综合编程(共40分),考试题型,4,上机实验规范步骤,一、查看个人文件夹下内容(如D:08010
2、1)XSDA.DBF XSCJ.DBF 注意:(1)若文件夹没有建立,立即建立;(2)若文件夹下数据表文件被删除,立即重建;,二、打开VFP程序,立即设置当前路径。SET DEFAULT TO D:080101,三、开始做实验,5,复习重点,第二章 VFP基础(语法)1.常量 数值型、字符型、逻辑型、日期型2.变量 字段变量、内存变量、数组3.函数 数值、字符、日期、类型转换、测试4.表达式 数值型、字符型、日期型、关系型、逻辑型,6,复习重点,第三章 VFP数据表基本操作1.数据表的基本概念:表结构与表记录;2.数据表记录基本操作;3.排序与索引;4.查询与统计。,7,复习重点,第四章 VF
3、P数据库基本操作1.数据库基本概念,数据库设计,数据库建立与维护。2.多表操作(工作区;别名;永久关系;关联);3.数据词典(字段规则、记录规则、参照完整性),8,复习重点,第五章 SQL、查询与视图1.SQL概述;2.SQL的查询功能;3.SQL的数据定义和数据修改;4.查询与视图。,9,第六章 结构化程序设计,VFP提供了三种工作方式。1.命令方式:命令窗口中输入命令 2.界面操作方式:窗口和菜单操作。3.程序方式:执行程序。,10,6.1 VFP程序文件,6.1.1 程序的基本概念 程序:能够完成一定任务的一组命令的有序集合,例6-1设计一个程序,显示XSDA.DBF中入学分高于平均分的
4、学生记录。,分析:根据题目需解决下列问题:(1)打开XSDA;(2)计算表中入学分的平均分(3)根据条件-入学分平均分,输出学生记录;(4)关闭表。,11,6.1.1 程序的基本概念,算法:在分析问题的基础上,提出解决某问题的规则和步骤。决定命令执行的先后顺序。,程序设计:通过对实际问题的分析,确定解题方法(即确定算法),并使用程序设计语言提供的命令或语句将解题算法描述为计算机处理的语句序列.程序设计方法:传统的结构化程序设计和面向对象的程序设计.,12,6.1.1 程序的基本概念,SET TALK OFF&关闭对话 CLEA&清除屏幕 USE D:VFPXSDA AVER 入学分 TO X
5、LIST FOR 入学分X USE SET TALK ON&打开对话 RETURN&返回,13,6.1.1 程序的基本概念,复习:给XSDA.DBF添加一个字段,字段信息为:入学分(N,3);然后,要求用REPLACE命令,给出所有学生的入学分,且其值范围在400-600之间。,14,6.1.2 程序文件的编辑与执行,将程序中命令存在扩展名为.PRG的文件中,该文件称为程序文件或命令文件,简称程序。一、程序文件的创建(扩展名为.PRG),2.菜单方式(1)单击系统菜单中FILE项(2)单击NEW命令(3)选择NEW中的Program项,1.命令方式Modify Command,15,二、程序文
6、件的保存 CTRL+W,三、程序设计的修改,四、程序设计的执行1.菜单方式:选择系统菜单Program中的DO选项2.命令方式:DO SUSPEND(挂起):暂停程序运行,返回命令窗口。在命令窗口中输入RESUME继续执行。CANCEL(取消):终止程序执行,清除私有变量,返回命令窗口。,6.1.2 程序文件的编辑与执行,16,【例6-2】根据例6-1,建立并运行程序文件PROG6-1.PRG。操作步骤如下:(1)将D盘VFP子目录设置为当前目录,在命令窗口输入:SET DEFA TO D:VFP(2)打开程序编辑窗口,在命令窗口输入:MODI COMM PROG6-1(3)在程序编辑窗口输入
7、例6-1提供的程序代码(如图6-1如示),每输入一行按一次回车键。(4)输入完毕按快捷键Ctrl+W存盘退出,可程序保存到PROG6-1.PRG文件中。(5)运行程序,在命令窗口输入:DO PROG6-1,6.1.2 程序文件的编辑与执行,17,程序调试是指在发现程序有错误的情况下,确定出错的位置并纠正错误。其中,关键是要确定出错的位置。有些错误(如语法错误)系统是能够发现的,当系统编译、执行到这类错误代码时,不仅能给出出错信息,还能指出出错的位置;而有些错误(如计算或处理逻辑上的错误)系统是无法确定的,只能由用户自己来查错。Visual FoxPro提供了一个功能强大的调试工具即调试器,可以
8、帮助我们完成程序调试工作。,6.1.3 程序调试,18,6.1.4 程序中常用的输入输出语句,程序设计中最基本的操作是输入输出。输入可使程序获取数据,输出则将程序的执行结果显示出来。,一、输入语句 给变量赋值,它可以接收表达式的值,也可以接收用户从键盘输入的数据。可以使用“=”或“Store”,1.输入单字符语句:WAIT TO WINDOWTIMEOUT,功能:显示一条信息(字符表达式值)并暂停程序执行,直到用户按下键盘任意键或单击鼠标后,系统将该字符赋值给内存变量.,19,6.1.4 程序中常用的输入输出语句,2.输入字符串语句 ACCEPT TO,功能:显示一条信息(字符表达式值)并暂停
9、程序执行,接受用户从键盘上输入的字符串,当用户按回车键结束输入后,系统将该字符串赋值给内存变量.,20,6.1.4 程序中常用的输入输出语句,3.输入任意类型数据语句 INPUT TO,功能:显示一条信息(字符表达式值)并暂停程序执行,接受用户从键盘上输入的任意数据,当用户按回车键结束输入后,系统将该数据赋值给内存变量.输入的数据可以是字符型、数值型、日期型和逻辑型的表达式;除数值型常量外,输入其他的常量一律使用定界符。,21,6.1.4 程序中常用的输入输出语句,4.格式输入语句 SAY GET.READ 功能:在指定行、列位置开始输出提示信息(字符表达式)并反相显示变量的值,对其修改,并将
10、结果存入该变量中。,22,6.1.4 程序中常用的输入输出语句,二、输出语句:1.?或?命令 格式:?/?功能:换行或不换行输出表达式的值 注意:(1)?是换行,?是不换行;(2)?命令无选择项时,输出一个空行。2.格式输出语句 格式:SAY 功能:在指定位置处显示表达式的值。例如,在命令窗口中输入命令:10,20 SAY“系统时间:”+TIME(),23,6.2 VFP程序基本结构,结构化程序的三种基本结构:顺序结构 选择结构 循环结构,顺序结构,24,选择结构,6.2 VFP程序基本结构,25,循环结构,6.2 VFP程序基本结构,26,6.2.1 顺序结构,顺序结构是一种最简单的基本结构
11、,其语句的执行完全按它们在程序中出现的先后顺序依次执行。,【例6-3】根据输入的圆半径,计算并输出圆的面积。,27,6.2.1 顺序结构,【例6-4】输入任意3个实数,输出其中的最大数。,28,6.2.1 顺序结构,例如编写一个程序,从键盘上任意输入一个数,计算其平方和立方,并显示在屏幕上。,SET TALK OFFCLEAINPUT“请输入一个数:”TO XS=X*X?”该数平方是“,S?”该数立方是“,X3SET TALK ON,29,6.2.2 选择结构,程序编写的过程中,经常需根据不同的情况选择执行不同的操作。例如:例6-3中求圆的面积,对输入的半径要进行判断,是否大于0,如果是才能参
12、加运算,否则不能运算,需要输出错误信息。再如:我们在运行QQ聊天软件的登录程序后,当输入的QQ号和密码均正确时,则允许用户进行主界面进行聊天,否则,用户不能进行,需要重新输入QQ号和密码。,30,6.2.2 选择结构,分支结构或选择结构:计算机在执行程序时根据给定的条件进行判断,再决定执行什么操作的程序结构。分支结构有三种基本格式:单分支选择、双分支选择和多分支选择。一、单选择语句(IFENDIF)二、双选择语句(IFELSEENDIF)三、多选择语句(DO CASEENDCASE),31,一、单选择语句(IFENDIF),格式:IF ENDIF,为关系表达式或逻辑表达式,32,一、单选择语句
13、(IFENDIF),【例6-5】编程:按学生的学号查询XSDA.DBF中该学生信息,若有此学生,则显示该生的姓名和入学分。,33,一、单选择语句(IFENDIF),单分支选择结构程序并不完善,即当条件不满足时,程序中不能做出进一步的处理。这就说明单分支的功能是有限的,不能完善地解决分支处理问题。双分支选择结构就可以处理好这个问题。,34,二、双选择语句(IFELSEENDIF),IF 条件 语句序列AELSE 语句序列BENDIF,说明:(1)IF必须与ENDIF配对,ELSE可以省缺;(2)IF-ENDIF 结构可以嵌套;(3)ELSE 同最近前面的IF匹配.,35,二、双选择语句(IFEL
14、SEENDIF),【例6-6】编程:按学生的学号查询XSDA.DBF中该学生信息,若有此学生,则显示该生信息,否则显示“查无此人”。,36,【例6-7】编程:通过键盘输入一个整数,该数若是偶数,则显示“偶数!”,否则显示“奇数”。,二、双选择语句(IFELSEENDIF),37,对于双分支以上的问题,双分支选择结构也不能解决,但可以使用分支语句的嵌套来实现。VFP中允许在程序任何位置进行分支语句嵌套。,多分支-分支语句嵌套,38,【例6-8】编程:根据键盘输入变量X值,计算Y值,多分支-分支语句嵌套,39,分支语句嵌套要注意层次关系,要求各个层次的IF语句之间不能交叉,每一层的IF、ELSE以
15、及ENDIF必须一一对应。分支语句嵌套结构,在编写的过程中,稍不注意就会使层次交叉。为避免使用IF分支语句嵌套不妥而使程序结构混乱,VFP提供了简单方便的多分支结构CASE语句。,多分支-分支语句嵌套,40,三、多分支语句(DO CASEENDCASE),DO CASE CASE CASE CASE OTHERWISE ENDCASE,41,功能:按顺序检测条件表达式,如果某个条件为真,则执行其后语句块,然后执行ENDCASE后语句。若有OTHERWISE子句,则在前面条件均不成立的情况下,执行其后的语句。,三、多分支语句(DO CASEENDCASE),42,三、多分支语句(DO CASEE
16、NDCASE),【例6-9】编程:用CASE语句实现例6-8编程。,43,三、多分支语句(DO CASEENDCASE),【例6-10】编程:根据键盘输入一元二次方程的A、B、C值(设A0),计算方程的根。,44,6.2.3 循环结构,循环结构是指程序在执行的过程中,其中的某段代码被重复执行若干次。被重复执行的代码段,通常称之为循环体。VFP支持三种循环结构语句:(1)DO WHILEENDDO(2)FORENDFOR(3)SCANENDSCAN 在循环结构语句中,有两个命令可以改变语句的执行顺序,即EXIT(强行退出循环体命令)和LOOP(强行重新开始循环命令)。,45,一、当型循环语句(D
17、O WHILEENDDO),格式:DO WHILE LOOP EXIT ENDDO,循环起始语句,循环体,循环结束语句,46,DO WHILE LOOP EXIT ENDDO,一、当型循环语句(DO WHILEENDDO),47,DO WHILE LOOP EXIT ENDDO,强行返回命令 功能:跳过LOOP与ENDDO之间的语句,返回到循环起始语句测试。,一、当型循环语句(DO WHILEENDDO),48,DO WHILE LOOP EXIT ENDDO,强行退出循环命令 功能:是直接跳出循环,去执行ENDDO后面的语句。,一、当型循环语句(DO WHILEENDDO),49,【例6-1
18、1】阅读下列程序,写出程序运行结果。,一、当型循环语句(DO WHILEENDDO),50,【例6-12】阅读下列程序,写出程序运行结果。,一、当型循环语句(DO WHILEENDDO),51,DO WHILEENDDO循环结构程序中,循环条件的设置是构成循环结构的重要因素。循环条件一般有以下几种形式。(1)计数形式:判断循环变量是否满足一定的数值要求。(2)文件头或文件尾的测试:判断数据表记录指针是否到文件头或文件尾。(3)键盘输入数据:判断键盘输入的数据是否满足要求。(4)永真循环:直接用.T.作为条件,用EXIT退出循环。,一、当型循环语句(DO WHILEENDDO),52,【例6-1
19、3】编程:计算1+2+3+100。,(1)计数形式:判断循环变量是否满足一定的数值要求,53,【例6-14】编程:从键盘输入两个正整数X和Y,计算X和Y的最大公约数。采用辗转相除法,求解步骤:步骤1:计算两个数X和Y的余数R,即R=X%Y;步骤2:若R=0,则Y为所求的最大公约数,结束;否则,将Y的值赋给变量X,将R的值赋给Y,转到步骤(1)。,(1)计数形式:判断循环变量是否满足一定的数值要求,54,例如:求27与15的最大公约数.,27/15(X=27,Y=15)商为1,余数为12,15/12(X=15,Y=12)商为1,余数为3,12/3(X=12,Y=3)商为4,余数为0,余数为0,最
20、大公约数为3,(1)计数形式:判断循环变量是否满足一定的数值要求,55,【例6-14】编程:从键盘输入两个正整数X和Y,计算X和Y的最大公约数。,(1)计数形式:判断循环变量是否满足一定的数值要求,56,【例6-15】阅读下列程序,上机观察程序运行结果。,(2)文件头或文件尾的测试:判断数据表记录指针是否到文件头或文件尾。,该程序依次显示数据表XSDA.DBF记录号为奇数的记录信息。,57,【例6-16】编程:完善例6-6,要求程序实现可以多次查询学生的信息,当输入非Y或y时查询结束。,(3)键盘输入数据:判断键盘输入的数据是否满足要求。,58,【例6-17】编程:根据键盘输入的记录号来显示X
21、SDA中记录,若输入负数或0,则循环结束;若输入记录号超过了最大记录号,则要求重新输。,(4)永真循环:用.T.作为条件,用EXIT退出循环。,59,格式:FOR=TO STEP LOOP EXIT ENDFOR/NEXT,循环起始语句,循环体,循环结束语句,二、指定循环次数的循环语句(FORENDFOR),60,FOR循环示例,SET TALK OFFCLEARFOR N=1 TO 5?NENDFORSET TALK ONRETURN,程序运行结果:1 2 3 4 5,二、指定循环次数的循环语句(FORENDFOR),61,二、指定循环次数的循环语句(FORENDFOR),【例6-18】编程
22、:计算10!,62,二、指定循环次数的循环语句(FORENDFOR),【例6-19】计算并输出Fibonacci数列(1,1,2,3,5,8)前20项,其规律:前两项为1,1,其余各项为前两项之和。,分析:设一数组A(20)A(1)=1A(2)=1当N2时,A(n)=A(n-1)+A(n-2),63,二、指定循环次数的循环语句(FORENDFOR),【例6-19】计算并输出Fibonacci数列(1,1,2,3,5,8)前20项,其规律:前两项为1,1,其余各项为前两项之和。,64,二、指定循环次数的循环语句(FORENDFOR),【例6-20】编程:计算三位数中所有的所有水仙花数(所谓水仙花
23、数是指该数等于它每一位数字的立方之和)。,65,二、指定循环次数的循环语句(FORENDFOR),【例6-21】计算10以内2的倍数和,不是2的倍数但是3的倍数和,不是2的倍数也不是3的倍数之和。,66,二、指定循环次数的循环语句(FORENDFOR),【例6-22】从键盘输入一个大于1的整数N,判断N是否为素数。,67,二、指定循环次数的循环语句(FORENDFOR),【例6-23】从键盘输入一串字符,统计其中字母个数。,68,三、SCANENDSCAN循环结构,格式:SCAN FOR ENDSCAN 功能:对当前数据表进行扫描,记录指针自动在指定范围内满足条件的记录上移动,且依次对每条记录
24、执行(循环体)中命令,直到表文件记录结束为止。该结构实际上是专用于数据表的循环结构。,69,三、SCANENDSCAN循环结构,格式:SCAN FOR ENDSCAN 说明:(1)用来决定SCAN循环扫描的范围,可为All、Next N、Record N、Rest中某一项。若缺省,则默认的范围是All,当扫描完指定范围的记录时,退出循环。(2)EXIT和LOOP命令同样可以出现在该循环结构语句的循环体内。,70,三、SCANENDSCAN循环结构,【例6-24】阅读下列程序,上机观察程序运行结果。,71,四、循环结构语句的嵌套,在一个循环结构的循环体内又包含另一个循环,称为循环的嵌套,也称为多
25、重循环。一般将外层的循环称为外循环,内层的循环称为内循环。例如:,72,四、循环结构语句的嵌套,说明:(1)在循环嵌套中,各循环结构不得交叉。如下列结构是错误的。,(2)不要从循环体外转入循环体内。(3)循环体可能一次都不执行。,73,四、循环结构语句的嵌套,【例6-25-6-28】编程:显示图6-31中所示的图案。,74,四、循环结构语句的嵌套,【例6-29-6-30】编程:显示图6-36中所示的图案。,75,四、循环结构语句的嵌套,【例6-31】已知数据表XYZ.DBF的表结构:XYZ(X(N,5),Y(N,5),LCM(N,10),表中记录如下:RECORD#X Y LCM 1 360
26、128 2 780 1620 3 36 72 4 150 500 5 56 36 6 12 28 试编程计算所有记录中字段变量X和Y的最小公倍数,然后写入LCM字段中。,76,四、循环结构语句的嵌套,【例6-31】试编程计算所有记录中字段变量X和Y的最小公倍数,然后写入LCM字段中。,77,四、循环结构语句的嵌套,【例6-31】试编程计算所有记录中字段变量X和Y的最小公倍数,然后写入LCM字段中。,78,6.3 VFP模块化程序设计,程序设计的三大基本结构能设计一些简单程序,但在实际应用中,问题往往比较复杂,如果把所有的处理功能放在一个程序中,则程序结构代码冗长,阅读和修改不方便。,79,6.
27、3 VFP模块化程序设计,当要解决的问题很复杂时,可采用模块化程序设计方法,将复杂问题分解很多子任务,对每个子任务编写一个模块程序。另外,程序设计时常常有些运算和处理程序是相同的,只是每次可能以不同的参数参与程序运行。如果在一个程序中重复写入这些相同的程序段,不仅会使程序变得很长,而且是一种时间和空间的浪费。因此,将上述重复出现的或能单独使用的程序写成一个模块程序。,80,6.3 VFP模块化程序设计,程序的模块化使得程序易读、易改及易扩充。在VFP中,模块间存在着调用关系,调用模块的程序称为调用程序或主程序,被调用的模块可以是一个子程序(命令文件)、过程或自定义函数。,81,6.3.1 模块
28、的定义与调用,一、子程序的定义与调用 1.子程序的定义 子程序的建立和程序文件的建立方法一样,可使用命令MODIFY COMMAND,扩展名也为.PRG。子程序是以一个单独程序文件存放子程序代码的。2.子程序的调用格式:DO WITH功能:调用所指定的子程序。,82,6.3.1 模块的定义与调用,【例6-32】采用子程序调用,计算S=1!+2!+10!,83,6.3.1 模块的定义与调用,二、过程的定义与调用1.过程的定义 格式:PROCEDURE PARAMETERS LPARAMETERS RETURN RETURN TO MASTER ENDPROC,84,6.3.1 模块的定义与调用,
29、2.过程文件 过程文件可以包含多个过程和自定义函数。(1)过程文件的建立。扩展名也为.PRG。MODIFY COMMAND(2)过程文件的打开。主程序调用过程文件中的过程前,必须打开过程文件。SET PROC TO,(3)过程文件的关闭。在全部过程调用结束后,需要关闭过程文件。SET PROCEDURE TO,85,6.3.1 模块的定义与调用,3.过程的调用 格式:DO WITH 功能:调用所指定的过程。过程定义时放在主程序代码的后面,则可直接调用。若过程放在过程文件中,则调用前需用SET PROCEDURE TO命令打开过程文件。,86,6.3.1 模块的定义与调用,【例6-33】采用过程
30、调用,计算S=1!+2!+3!+10!,87,6.3.1 模块的定义与调用,三、自定义函数的定义与调用 在VFP中,函数分为标准函数和自定义函数两类。标准函数是系统已经定义好的模块,用户可直接调用,如前面介绍的LEN()、LEFT()、DATE()等各种函数。自定义函数则根据需要来编写。1.自定义函数的定义 FUNCTION PARAMETERS LPARAMETERS RETURN ENDFUNCTION,88,6.3.1 模块的定义与调用,2.自定义函数的调用 自定义函数同标准函数一样,可以作为运算对象出现在表达式中。格式:函数名()自定义函数可放在主程序代码的后面,则可直接调用。若自定义
31、函数放在过程文件中,则调用前需用SET PROCEDURE TO命令打开。,89,6.3.1 模块的定义与调用,【例6-34】采用自定义函数调用计算S=1!+2!+10!,90,6.3.2 模块间的参数传递,在调用模块时,一般调用程序(即主程序)与模块(被调程序)之间有数据的传递问题,即主程序中的数据要以实参形式传递给模块中对应的形参,经过模块处理后,又将所得结果返回给主程序。模块中参数语句的形参只能是内存变量,而调用模块语句中提供的实参可以是常量、变量或函数,也可以是一般表达式。调用模块时,系统会自动把实参传递给定义模块中参数语句所对应的形参。形参的数目不能少于实参的数目,否则系统会产生运行
32、时错误。如果形参的数目多于实参的数目,那么多余的形参取初值逻辑假。,91,6.3.2 模块间的参数传递,在VFP中,实参传递给形参包括按值传递和按引用传递两种形式。调用模块程序时,如果实参是常量、函数或一般表达式,系统按值传递。如果实参是变量,系统按引用传递。如果实参是变量,但又要求采用单向的“传值”方式,可将实参变量用括号括起来。,92,6.3.2 模块间的参数传递,一、按值传递 按值传递是指当调用一个模块时,系统将实参值传递给对应的形参,实参与形参断开了联系。传值传递方式是“单向”的,即只能由实参值传递给形参,而形参值不能返回给实参。二、按引用传递 按引用传递是指当调用一个模块时,系统将实
33、参的地址传递给对应的形参,即实参变量和形参变量被分配为同一存储单元。按引用传递在调用时将实参变量的值传递给形参,经过模块处理后,又将其结果通过形参返回给实参,这种传递是“双向”的。,93,6.3.2 模块间的参数传递,DO SUB WITH 3,RECNO(),M,(N)(主程序调用模块SUB语句如上),参数传递示意图,如:模块SUB中参数语句如下:PARA A,B,C,D,94,6.3.2 模块间的参数传递,*主程序SET TALK OFFCLEAA=8B=10?”A=“,A,”B=“,BDO P WITH A,(B)?”A=“,A,”B=“,BRETURN,PROCEDURE P PARA
34、 M,N M=M+N N=M+N RETURNENDP,运行结果:A=8 B=10 A=18 B=10,95,6.3.3 模块中变量的作用域,在模块化程序设计中,一个变量除了类型和取值之外,还有一个重要的属性就是它的作用域。变量的作用域是指变量在什么范围内是有效或能够被访问的。在VFP中,若以变量的作用域来分,内存变量可分为公共变量、私有变量和局部变量三类。,96,6.3.3 模块中变量的作用域,一、公共变量 在命令窗口中直接定义、使用的内存变量是公共变量。公共变量还可以用PUBLlC命令定义。格式:PUBLlC 功能:定义公共内存变量,并赋初值为.F.。说明:(1)公共变量一旦建立就一直有效
35、,其作用范围是所有模块。(2)程序运行结束返回到命令窗口后,公共变量不会自动释放。(3)只有当执行CLEAR MEMORY、RELEASE、QUIT等命令后,公共变量才被释放,97,6.3.3 模块中变量的作用域,*主程序PUBLIC NUMNUM=1DO ARETURN,PROC A NUM=NUM+5 DO B RETURN,运行结果:12,PROC B NUM=NUM+6?NUM RETURN,98,6.3.3 模块中变量的作用域,二、局部变量 格式:LOCAL 功能:定义局部内存变量,并赋初值为.F.。由于LOCAL与LOCATE前四个字母相同,所以这条命令的命令动词不能缩写。说明:(
36、1)局部变量只能在定义它的模块中使用,不能在上层或下层模块中使用。(2)当定义局部变量的模块程序运行结束时,该局部变量会自动释放。(3)模块中用参数语句LPARAMETERS 定义的形参为局部内存变量。,99,6.3.3 模块中变量的作用域,*主程序DO ARETURN,PROC A LOCAL NUM NUM=2 DO B RETURN,运行结果:变量NUM 未定义,PROC B NUM=NUM+5?NUM RETURN,100,6.3.3 模块中变量的作用域,三、私有变量 在程序中直接定义或使用的非全局变量、非局部变量都是私有变量。还可用PRIVATE命令定义。格式:PRIVATE 功能:
37、定义私有内存变量,并赋初值为.F.。说明:(1)私有变量的作用域是定义它的模块及其下属的各层模块。(2)当定义私有变量的模块程序运行结束时,该私有变量会自动释放。(3)参数语句PARAMETERS 定义的形参为私有内存变量,其用法等价于用PRIVATE命令定义的私有内存变量。,101,6.3.3 模块中变量的作用域,*主程序DO ARETURN,PROC A PRIV NUM NUM=2 DO B RETURN,运行结果:7,PROC B NUM=NUM+5?NUM RETURN,102,6.3.3 模块中变量的作用域,四、变量的隐藏 若同一模块中出现同名的各种变量,则其优先次序为:本地变量PRIVATE定义私有变量全局变量。优先级别高的变量可以屏蔽优先级别低的同名变量,103,6.3.3 模块中变量的作用域,*主程序SET TALK OFF V1=100V2=150DO P?V1,V2RETURN,PROC P PRIVATE V1 V1=50 V2=1000?V1,V2 RETURN,运行结果:50 1000 100 1000,