《第五章结构化程序设计与网络编程.ppt》由会员分享,可在线阅读,更多相关《第五章结构化程序设计与网络编程.ppt(71页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第五章第五章 结构化程序设计结构化程序设计 与网络编程与网络编程v5.1 5.1 样本程序分析样本程序分析 v5.2 5.2 程序的编辑与执程序的编辑与执行行 v5.3 5.3 输入输出语句输入输出语句 v5.4 5.4 分支程序设计分支程序设计 v5.5 5.5 循环程序设计循环程序设计 v5.5.6 6 子程序及其调用子程序及其调用 v5.5.7 7 子程序存放形式子程序存放形式 v5.8 5.8 变量作用域及程序变量作用域及程序 间数据传递间数据传递 v5.9 5.9 程序出错处理程序出错处理 5.1 5.1 样本程序分析样本程序分析 v【例例 1 1】求数N的阶乘,程序文件Exampl
2、e_1.prg:vMODIFY COMMAND Example_1&建立程序,输入;下列语句时不要输入行号。*求数N的阶乘,即 S=123N INPUT”请输入数N:”TO N&从键盘上输入的数存于N中 IF N 1?输入的数:,N,太小!CANCEL ENDIF STORE 1 TO I,S DO WHILE I=N S=S*I I=I+1 ENDDO?N,”的阶乘是:”,S CANCEL分支循环5.2 5.2 程序的编辑与执行程序的编辑与执行 v程序文件的建立与修改程序文件的建立与修改命令法:命令法:MODIFY COMMAND 说明:说明:可以建立新程序文件,又可修改已有的程可以建立新程
3、序文件,又可修改已有的程序文件。序文件。文件的扩展名可缺省,系统默认为文件的扩展名可缺省,系统默认为.PRG。命令注释:命令注释:“*”、“&”“*”:放于行首,整行成为注释内:放于行首,整行成为注释内容容“&”:放于命令行尾,对当前的命:放于命令行尾,对当前的命令注释令注释常用的程序结束命令常用的程序结束命令RETURN:结束本程序,并返回调用结束本程序,并返回调用程序,无上级程序,则返回命令窗口。程序,无上级程序,则返回命令窗口。CANCEL:终止程序的执行,清除程终止程序的执行,清除程序的私有变量,并返回命令窗口序的私有变量,并返回命令窗口菜单法菜单法“文件文件”菜单菜单“新建新建”选择
4、选择“程序程序”“”“新建文件新建文件”注:注:此方法只能建立新程序文件。此方法只能建立新程序文件。v关闭编辑窗口方法关闭编辑窗口方法:+:存盘退出编辑存盘退出编辑 关闭按钮关闭按钮:放弃本次修改退出编辑放弃本次修改退出编辑v程序文件的保存程序文件的保存 “保存保存 ”“文件文件 ”“另存为另存为 ”v程序的运行程序的运行 DO 工具栏上的工具栏上的“运行运行 ”工具工具vVFP程序文件的基本类型程序文件的基本类型源程序文件源程序文件 (.PRG):边执行边检查;边执行边检查;执行速度较慢;执行速度较慢;生成编译程序文件生成编译程序文件(.FXP)。编译程序文件编译程序文件 (.FXP):运行
5、过程中去掉了多余信息,并加密;运行过程中去掉了多余信息,并加密;此文件与对应的源程序文件的主文件名相同;此文件与对应的源程序文件的主文件名相同;执行速度较快。执行速度较快。应用程序文件应用程序文件 (.APP):将多个文件连接成一个程序文件,便于程序的运行将多个文件连接成一个程序文件,便于程序的运行和管理。和管理。可执行程序文件可执行程序文件 (.EXE):将多个文件连接成可执行程序文件。将多个文件连接成可执行程序文件。5.3 5.3 输入输出语句输入输出语句v 输入命令输入命令 ACCEPT命令格式:命令格式:ACCEPT TO 说明:说明:必须是字符型数据,做为:必须是字符型数据,做为 屏
6、幕提示信息。屏幕提示信息。:所接收的数据均作为字符型数:所接收的数据均作为字符型数 据使用。据使用。例例2:请建立程序文件,输入下列语句。请建立程序文件,输入下列语句。*Ex1.prg ACCEPT 请输入请输入X的值:的值:TO X ACCEPT 请输入请输入Y的值:的值:TO Y?X+Y 思考:思考:在程序运行过程中,分别输入在程序运行过程中,分别输入12、13 后,屏幕上的显示结果是什么?后,屏幕上的显示结果是什么?例例1:P85_【例例3 3】*Example_3.prg ACCEPT ”请输入姓名请输入姓名:”TO name?您的姓名是您的姓名是:+name WAIT 命令格式:命令
7、格式:WAIT TO ;WINDOW AT,NOWAIT ;CLEAR|NOCLEARTIMEOUT 说明:说明:必须是字符型数据,做为屏必须是字符型数据,做为屏 幕提示信息幕提示信息 内存变量:接收字符型数据,且仅接收单个字符内存变量:接收字符型数据,且仅接收单个字符 WINDOWSAT:屏幕上出现提示窗口,位置屏幕上出现提示窗口,位置 可由可由AT指定指定 例例3:P86_【例例4 4】*Example_4.prg WAIT”按任意键将显示系统日期按任意键将显示系统日期 ”TIMEOUT 5?DATE()NOWAIT:不再等待用户按键,程序继续向下执行。不再等待用户按键,程序继续向下执行。
8、CLEAR|NOCLEAR:关闭关闭|不关闭窗口不关闭窗口TIMEOUT:设置等待时间设置等待时间INPUT命令格式:命令格式:INPUT TO 说明:说明:必须是字符型数据,做为屏幕:必须是字符型数据,做为屏幕 提示信息。提示信息。:所接收的数据可为字符型、数值型、:所接收的数据可为字符型、数值型、日期型、逻辑型数据日期型、逻辑型数据:输入字符型数据时需加定界符输入字符型数据时需加定界符 日期型数据需按日期格式输入日期型数据需按日期格式输入 逻辑型数据以逻辑型数据以.T.、.F.的方式输入的方式输入例例4:P86_【例例5】*Example_5.prg name=“程序设计语言程序设计语言”
9、price=23 INPUT “请输入数据请输入数据:”TO X?“X=”,X v 简单定位输入输出语句简单定位输入输出语句 输入命令格式:输入命令格式:SAY 输出命令格式:输出命令格式:SAY GET;DEFAULT READ 说明:说明:表示数据在窗口中显示的位置,均为数值型表示数据在窗口中显示的位置,均为数值型SAY子句用来输出数据,子句用来输出数据,GET子句用于输入及编辑子句用于输入及编辑数据数据GET后的变量若是内存变量,后的变量若是内存变量,则该则该变量必须具有初值,变量必须具有初值,或用或用DEFAULT子句指定初值;子句指定初值;若是字段变量,则显若是字段变量,则显示当前记
10、录该字段值,字段变量不能是备注型或通用示当前记录该字段值,字段变量不能是备注型或通用型。型。若想修改若想修改GET子句中变量的值,则必须用子句中变量的值,则必须用READ命命令来激活令来激活例5:P87_【例例 6 6】*Example_6.prg CLEAR X=SPACE(20)Y=0 10,20 SAY ”请输入书名:请输入书名:”GET X 12,20 SAY ”请输入数量:请输入数量:”GET Y READ?STR(Y,5)+”本本”+ALLTRIM(X)+”的金额为:的金额为:”;+STR(12.4*Y,8,2)5.45.45.5 5.5 程序的基本结构程序的基本结构 v顺序结构顺
11、序结构流程图流程图开始开始语句语句1 1语句语句2 2语句语句n n结束结束 结构化程序设计可分为顺序结构、分支结构化程序设计可分为顺序结构、分支结构和循环结构。结构和循环结构。举例举例 前面所举的例子均为前面所举的例子均为 顺序结构顺序结构v分支结构分支结构单分支单分支IF 语句语句(简单分支结构简单分支结构)流程图流程图开始开始语句语句序列序列结束结束条件条件?YN 语句格式:语句格式:IF ENDIF分支结构分支结构后面语句后面语句 注:注:IF-ENDIF必须配必须配 对出现。对出现。缩进格式书写,使缩进格式书写,使 程序清晰,易阅读,程序清晰,易阅读,不影响程序的执行。不影响程序的执
12、行。例例1:P88_【例例7 7】求两个数中较大值求两个数中较大值 *Example_7.prg INPUT “请输入一个数请输入一个数:”TO X INPUT “请输入另一个数请输入另一个数:”TO Y max=X IF maxY max=Y ENDIF?“X和和Y中较大值是中较大值是:”,max 双分支双分支IF语句语句 (带带ELSE的分支结构的分支结构)流程图流程图开始开始语句序列语句序列1结束结束条件条件?YN语句序列语句序列2 语句格式:语句格式:IF ELSE ENDIF分支结构分支结构后面语句后面语句例例2:P88_【例例8 8】求两个数中较大值求两个数中较大值 *Exampl
13、e_8.prg INPUT “请输入一个数请输入一个数:”TO X INPUT “请输入另一个数请输入另一个数:”TO X IF XY max=X ELSE max=Y ENDIF?“X和和Y中较大值是中较大值是:”,max IF语句的嵌套语句的嵌套基本流程图基本流程图开始开始语句组语句组1结束结束条件条件1?YN语句组语句组2条件条件2?YN 语句格式:语句格式:IF IF ENDIF ELSE ENDIF 注:注:不能出现交叉嵌套不能出现交叉嵌套内层内层ENDIF后面语句后面语句外层外层ENDIF后面语句后面语句例例3:P89_【例例 9】分段函数程序分段函数程序 X2-1 (X0)0 (
14、X=0)X3+1 (010)Y=*Example_9.prgINPUT “请输入一个数:请输入一个数:”TO X IF X0 Y=X2-1 ELSE IF X=0 Y=0 ELSE IF X=10 Y=X3+1 ELSE Y=2*X3 ENDIF ENDIFENDIF?X,Y RETURN多分支结构流程图开始语句语句序列序列 1结束条件1?YN语句语句序列序列 2条件2?YN语句语句序列序列 n条件n?YNOTHERWISE语句语句序列序列 n+1 语句格式:DO CASE CASE CASE CASE OTHERWISE ENDCASE例例4:P90_【例例 10 10】用用DO CASED
15、O CASE语句实现例语句实现例9 9中的分段函数中的分段函数 *Example_10.prg INPUT “请输入一个数:请输入一个数:”TO X IF TYPE(X)=N DO CASE CASE X0 Y=X2-1 CASE X=0 Y=0 CASE X=10 Y=X3+1 OTHERWISE Y=2*X3 ENDCASE?X,YELSE WAIT“输入的数据类型错误输入的数据类型错误!”ENDIF RETURN 条件函数条件函数 函数格式:函数格式:IIF(,)函数说明:函数说明:条件成立,函数返回表达式条件成立,函数返回表达式1 1的值的值;否则,否则,函数返回函数返回的值的值 和和
16、值的数据类型可值的数据类型可 以不同。以不同。例例5:P91_【例例11】求一个数的绝对值。求一个数的绝对值。*Example_11.prg INPUT “请输入一个数:请输入一个数:”TO X?IIF(X=0,X,-X)v循环结构循环结构基本流程图基本流程图开始语句序列 结束条件?YN循环前的语句循环体后的语句语句序列语句序列 Y 当型循环语句格式当型循环语句格式 DO WHILE ENDDO例例5:P91_【例例1212】求求10!*Example_12.prg n=2 s=1 DO WHILE n=10 s=s*n n=n+1 ENDDO?“10!等于:等于:”,s 例6:P92_【例例
17、1313】输出输出zymcb.dbf中不带删除标记的中不带删除标记的 专业信息和专业个数。专业信息和专业个数。*Example_13.prg USE zymcb M=0 DO WHILE !EOF()IF !DELETED()?F_bm,F_mc M=M+1 ENDIF SKIP ENDDO?“共有共有”+STR(M,4)+“个专业个专业”USE RETURN 说明:说明:对数据表操作时,可利用对数据表操作时,可利用 EOF()、BOF()、FOUND()、RECNO()等控制循环。等控制循环。说明:说明:如果对数据表操作,则循环体内如果对数据表操作,则循环体内 通常需设移动记录指针的操作。通
18、常需设移动记录指针的操作。说明:说明:DELETED()检测当前检测当前记录是否有逻辑删除标记。记录是否有逻辑删除标记。开始开始循环体前语句循环体前语句循环体条件循环体条件Y分支条件分支条件YLOOPN分支结构下面的语句分支结构下面的语句ENDDOENDDON循环体下面的语句循环体下面的语句结束结束 无条件转向循环无条件转向循环 语句格式语句格式(以当型循环为例以当型循环为例)DO WHILE IF LOOP ENDIF ENDDO 例例7:计算计算1100的奇数和。的奇数和。*Ex2.prgstore 0 to i,tdo while i100 i=i+1 if int(i/2)=i/2 l
19、oop endif t=t+ienddo?1100奇数和为:,t说明:说明:int(N):取整函数取整函数 此处用于判断此处用于判断i的奇偶性的奇偶性思考:利用思考:利用mod(N1,N2)如何如何 判断奇偶性?判断奇偶性?开始开始循环体前语句循环体前语句循环体条件循环体条件Y分支条件分支条件NEXITY分支结构下面的语句分支结构下面的语句ENDDON循环体下面的语句循环体下面的语句结束结束 无条件跳出循环无条件跳出循环 语句格式语句格式(以当型循环为例以当型循环为例)DO WHILE IF EXIT ENDIF ENDDO例例8:P92_ _【例例1414】对键盘输入的每一个正数,输出对键盘
20、输入的每一个正数,输出 其算术平方根;当输入的数小于其算术平方根;当输入的数小于0 0时,结束程序。时,结束程序。*Example_14.prg DO WHILE .T.CLEAR INPUT “请输入一个数:请输入一个数:”TO X IF TYPE(X)N WAIT 非数值型数据非数值型数据 LOOP ENDIF IF X 0 EXIT ENDIF?X,的算术平方根为:的算术平方根为:,SQRT(X)WAIT ENDDO 例9:计算1100的和*EX3.PRG S=0 for i=1 to 100 s=s+i next?s=,s 步长循环语句格式步长循环语句格式 FOR =TO STEP E
21、NDFOR|NEXT 说明:说明:初值、终值和初值、终值和 步长应为数值步长应为数值 型表达式型表达式 若步长缺省,若步长缺省,默认值为默认值为1。例例10:【例例1515】求求10!和和1+32+92 *Example_15.prg S=0 T=1 FOR N=1 TO 10 T=T*N IF MOD(N,2)=1 S=S+N2 ENDIF ENDFOR?“N的值为:的值为:”,N?“10!等于:等于:”,T?“1至至10的奇数平方和为的奇数平方和为:”,S 此循环语句与下列循环语句功能完全等效:此循环语句与下列循环语句功能完全等效:LOCATE FOR WHILE DO WHILE FOU
22、ND()CONTINUE ENDDO 注:注:在循环体内,不应该使用改变记录指针的语句,否则可能产在循环体内,不应该使用改变记录指针的语句,否则可能产 生死循环。生死循环。扫描循环语句格式扫描循环语句格式 SCAN FOR WHILE ENDSCAN例例11:【例例1616】输出输出zymcb.dbf中不带删除标记的中不带删除标记的 专业信息和专业个数专业信息和专业个数 *Example_16.prg USE ZYMCB M=0 SCAN IF !DELETED()?F_bm,F_mc M=M+1 ENDIF ENDSCAN?“共有共有”+STR(M,4)+“个专业个专业”USE RETURN
23、 例例12:【例【例1717】输出乘法口诀表】输出乘法口诀表*Example_17.prg i=1 DO WHILE i0 do case case 英语=90 x=优秀 case 英语=75 x=良好 case 英语=60 x=及格 otherwise x=不及格 endcase?f_xh,英语成绩等级为:,x endscan use return例例14:数组例子:数组例子*Ex4.prgclearinput 请输入数据个数:to ndimension X(n)For k=1 to n input 请输入第+alltrim(str(k)+个数:to X(k)nextfor i=1 to n
24、-1 for j=i+1 to n if X(i)X(j)W=X(i)X(i)=X(j)X(j)=W endif endfor?X(i)endfor?X(n)return假设输入数据为:假设输入数据为:n=4X(1)X(2)X(3)X(4)12 23 5 21为为X数组的每数组的每个元素赋值个元素赋值i=1j=212 23 5 21j=3 5 23 12 21j=4 5 23 12 21i=2j=3j=4 5 12 23 21 5 12 23 21i=3 j=4 5 12 21 2351221235.65.7 多模块程序多模块程序v 程序间简单调用程序间简单调用 调用方法:调用方法:*主程序主
25、程序.prgDO DO *子程序子程序1.prgRETURN*子程序子程序2.prgRETURN 说明:说明:子程序、过子程序、过 程(文件)程(文件)及自定义函及自定义函 数的建立与数的建立与 程序的建立程序的建立 相同。相同。*子程序子程序2.prgRETURN TO MASTER*子程序子程序1.prgRETURNDO *主程序主程序.prgDO v嵌套调用:嵌套调用:说明:说明:RETURN:结束本程序,并返回调用程序,无上级程结束本程序,并返回调用程序,无上级程 序,则返回命令窗口,该命令序,则返回命令窗口,该命令可以缺省可以缺省。RETURN TO MASTER:直接返回主程序。直
26、接返回主程序。子程序内部结构子程序内部结构子程序与普通程序没有太大区别,子程序更具有通用性或返回值的能力,往往要在子程序中加参数语句(如PARAMETERS X,Y)和带值返回语句(如RETURN S)。一般子程序的内部结构为:PARAMETERS|LPARAMETERS 子程序体子程序体RETRY|RETURN 表达式表达式|TO MASTERPARAMETERS|LPARAMETERS :参数语句,是可选择语句,形式参数表由多个用逗号分隔的变量组成,用于接收调用程序传来的数据。参数语句必须放在子程序中第一行,从接收数据的角度来看,PARAMETERS与LPARAMETERS作用相同。两者区
27、别主要在于:使用PARAMETERS说明的变量,除了在本程序中使用外,还可以在该程序的子程序中使用和改变其值;而LPARAMETERS说明的变量仅能在本程序中使用。子程序体:是完成子程序功能的程序段,编写程序时可以引用形式参数,编写方法与普通程序的编写方法基本相同。在子程序体内可以多处使用RETURN|TO MASTER或RETRY语句,以便返回到调用程序或主控程序。RETURN:返回到调用程序中调用语句的下一条语句继续执行。子程序中的最后一条RETURN语句可省略不写。RETURN TO MASTER:返回到主控程序中调用语句的下一条语句继续执行。主控程序就是最顶层主程序,它可能直接或间接调
28、用本子程序。RETURN:如果要以函数形式调用子程序,则在编写此类子程序的返回语句时,应该使用带值返回语句RETURN,其中表达式的值是函数返回值。RETRY:执行到此语句时,返回到调用程序中,重新执行调用语句。5.6.2 子程序调用子程序调用在VFP中,从子程序调用方式来看,可分为函数子程序(也称用户自定义函数)和过程子程序(简称过程),这两种子程序的主要区别在于:*主程序主程序.prgDO WITH X,Y,Z*子程序子程序1.prgRETURNPARAMETERS|LPARAMETERS M,N,Pv带参数的调用带参数的调用实际参数实际参数形式参数形式参数说明:说明:参数个数相同参数个数
29、相同 对应参数的类型相同对应参数的类型相同 实际参数为变量时可以实际参数为变量时可以 由子程序将结果传回由子程序将结果传回 PARAMETERS:可在本级程序及该程可在本级程序及该程 序的子程序中使用序的子程序中使用 LPARAMETERS:仅能在本级程序中使用仅能在本级程序中使用 PARAMETERS (PARAMETERS)需放在子程序中第需放在子程序中第 一行一行 过程调用所谓调用过程就是转去执行过程子程序,完成其功能后,再返回到调用程序或主控程序继续执行。在程序中,通过DO语句调用过程子程序。调用格式:DO WITH 语句说明:此语句中,实际参数表与调用自定义函数中实际参数表的要求和意
30、义完全相同,对于没有参数语句(PARAMETERS或LPARAMETERS)的过程子程序,调用时不要写WITH子句。主程序通过实际参数和形式参数的对应关系向子程序传递数据,也可以通过参数由子程序向主程序传递数据。如果在子程序中改变某个形式参数值,而用DO语句调用该子程序时,对应的实际参数为简单内存变量,则返回到主程序后,该实际参数变量被改成对应形式参数的值。例例1:设计一个计算圆面积的子程序,并要求在主程序中设计一个计算圆面积的子程序,并要求在主程序中 带参数调用它。带参数调用它。*主程序:主程序:Ex5.prgymj=05,10 SAY“请输入半径:请输入半径:”GET bj DEFAULT
31、 0READDO js WITH bj,ymj?“ymj=”,ymj RETURN*子程序:子程序:js.prgPAREMETERS r,ss=PI()*r*r RETURN调用子程序并传递参数调用子程序并传递参数显示圆面积显示圆面积接收由主程序传来的数据接收由主程序传来的数据VFP的的PI函数返回函数返回 值值返回主程序返回主程序结束程序,返回命令窗口结束程序,返回命令窗口v自定义函数自定义函数语句格式:语句格式:FUNCTION PARAMETERS RETURN 调用格式:调用格式:()见下面的图示说明见下面的图示说明 自定义函数的调用自定义函数与系统函数的调用方法相同,都是作为表达式的
32、一部分。调用自定义函数就是转去执行自定义函数中的程序,执行完该程序后,再返回到调用语句并带回一个值。调用格式:()自定义函数名就是子程序名。实际参数表是用逗号分隔的若干个表达式,表达式与被调用函数中形式参数一一对应,用于向被调用子程序中传递数据。自定义函数图示说明自定义函数图示说明调用方法一:调用方法一:*主程序主程序.prgS=WJM(X,Y,Z )*WJM.prgPARAMETERS M,N,P RETURN 调用方法二:调用方法二:详见后面的过程文件的调用,注意这两种方详见后面的过程文件的调用,注意这两种方 法的区别。法的区别。*Ex6.prg CLEAR S=0 FOR i=1 TO
33、10 S=S+F(i)ENDFOR?S=,S*F.prg PARAMETERS N M=1 FOR j=1 TO N M=M*j ENDFOR RETURN M例例2:计算阶乘的自定义函数计算阶乘的自定义函数1在编写子程序时,函数子程序通常用RETURN 语句返回到主程序;而过程子程序通常用RETURN TO MASTER或RETRY语句返回到主程序。2在调用子程序时,用函数形式调用函数子程序,使之成为表达式的一部分;用DO语句(如DO INUM)调用过程子程序,使之成为程序中一条语句。函数子程序和过程子程序 可以互换调用方式,函数子程序用DO语句调用时,系统将忽略函数的返回值;过程子程序作为
34、函数调用时,函数的返回值为真(.T.)。*过程文件过程文件1.prgRETURNPROCEDURE 过程过程1RETURN FUNCTION FPARAMETERS M,N,P*主程序主程序.prgDO S=F(X,Y,Z)SET PROCEDURE TO SET PROCEDURE TOv过程文件过程文件 调用方法一:调用方法一:说明:说明:SET PROCEDURE TO ADDITIVE 打开(关闭)过程文件命令。打开(关闭)过程文件命令。ADDITIVE:保留已打开的过程文件;若缺省此项保留已打开的过程文件;若缺省此项,则先则先 关闭已打开的过程文件,再打开其他过程文件。关闭已打开的过
35、程文件,再打开其他过程文件。主程序文件example_22.prgvstore 0 to m,nvz=请输入vset procedure to pr22vdo inumvif m=nv?pcal(0,m)v elsev x=pcal(0,m)v y=pcal(1,m)/(pcal(1,n)*pcal(1,m-n)v?x*yv endifvset procedure tov过程文件pr22.prg:vfunction pcalvparameter x,yvif x0vreturn 0vendifvs=xv?xv?yvfor i=1 to yv s=iif(x=0,s+i,s*i)vendforv
36、return svendfuncvprocedure inumv input z+m:to mv input z+n:to nv returnvendproc*过程文件过程文件1.prgRETURNPROCEDURE 过程过程1PROCEDURE 过程过程2RETURN 调用方法二:调用方法二:*主程序主程序.prgDO IN 过程文件过程文件1 DO IN 过程文件过程文件15.8 5.8 变量的作用域变量的作用域v公共变量公共变量命令格式:命令格式:PUBLIC 说明:说明:命令窗口中定义的变量均为公共变量命令窗口中定义的变量均为公共变量 程序中,公共变量在使用前需用程序中,公共变量在使用
37、前需用PUBLIC定义,定义,一经定义,可在任一级程序中使用一经定义,可在任一级程序中使用 已定义但未赋的公共变量初值为已定义但未赋的公共变量初值为.F.程序终止时公共变量不会被自动清除,需用程序终止时公共变量不会被自动清除,需用 RELEASE 或或 CLEAR ALL命令清除。命令清除。v 私有变量私有变量 命令格式:命令格式:PRIVATE ALL LIKE|EXCEPT 说明:说明:程序中不用程序中不用PUBLIC定义的变量均是私有变量定义的变量均是私有变量 私有变量的作用范围:仅在本级及其下任意级程私有变量的作用范围:仅在本级及其下任意级程 序中有效,即可在本级程序及下级程序间传送数
38、序中有效,即可在本级程序及下级程序间传送数 据,但无法将数据传到上级程序。据,但无法将数据传到上级程序。用用PRIVATE声明的变量中,若有与上级程序中声明的变量中,若有与上级程序中 的变量同名时,上级程序中同名的变量将被的变量同名时,上级程序中同名的变量将被“隐藏隐藏”v本地变量本地变量 命令格式命令格式 LOCAL 说明:说明:本地变量只能在建立它的本级程序中使用,在本地变量只能在建立它的本级程序中使用,在 其上级或下级程序中无效。其上级或下级程序中无效。本地变量初值被自动赋为本地变量初值被自动赋为.F.用用 LPARAMETERS 说明的形式参数是该程说明的形式参数是该程 序的局部变量。
39、序的局部变量。在本级程序结束时,本地变量被自动释放。在本级程序结束时,本地变量被自动释放。LOCAL 与与 LOCATE 前前4个字母相同,故不个字母相同,故不 可缩写。可缩写。公共变量、私用变量及本地变量的作用范围示意图公共变量、私用变量及本地变量的作用范围示意图*主程序主程序.prgprgPUBLIC X*子程序子程序1.1.prgprgPRIVATE Y*子程序子程序2.2.prgprgLOCAL Z子程序子程序3.3.prgprg公共变量公共变量 X私有变量私有变量 Y本地变量本地变量 Z例1:*Ex6.prgPUBLIC A,BA=0B=1C=2DO SUB1 IN SUB?A,B,
40、C*SUB.prgPROCEDURE SUB1 PRIVATE B,C B=3 C=4 DO SUB2?A,B,CRETURNPROCEDURE SUB2 B=B+1 A=A+1?A,B,CRETURN主程序中的主程序中的B,C被隐藏被隐藏B的值是由的值是由sub1传来的传来的A是公共变量是公共变量且未被隐藏,且未被隐藏,其值是由主程其值是由主程序传来的序传来的返回主程序同返回主程序同时清除本级私时清除本级私有变量,恢复有变量,恢复被隐藏的变量被隐藏的变量*Ex7.prg:主程序主程序A=1B=2DO SUBPX=A+B+C?X*subp.prg:过程文件过程文件PUBLIC CPRIVATE
41、 A,B,XA=10B=20C=30X=A+B+C?XRETURN例2:注:注:这两个这两个X不是同一个不是同一个X变量,因为当由变量,因为当由subp返回时,在返回时,在 subp所定义的局部变量均被释放,返回到主程序后,所定义的局部变量均被释放,返回到主程序后,X 又被重新定义。又被重新定义。1.用PUBLIC或命令窗口中定义的全局变全局变量量,可在其后各个子程序中引用和改变其值。2.仅在本子程序中定义、PRIVATE或PARAMETER说明的私有变量私有变量,可在本程序和其子程序中引用和改变其值。程序间数据传递总结程序间数据传递总结3.LOCAL或LPARAMETER说明的局部局部变量变
42、量,仅在本子程序中引用和改变其值。4.LPARAMETER或LPARAMETER说明的形式参数,如在子程序中改变了形式参数的值,且DO调用时实际参数是内存变量,则修改实际参数值。5.9.1 设置程序出错陷阱 语句语句:ON ERROR 执行到此语句后,在运行程序期间,一旦某条语句发生错误,系统将自动转去执行此语句中的“命令”。仅用ON ERROR语句,则恢复到系统默认出错处理程序。PROGRAM():C,出错程序名 LINENO():N,错误语句在程序中行号 MESSAGE(1):C,错误所在语句 ERROR():N,系统出错类型编号 MESSAGE():C,出错信息的文字描述 在ON ERROR 语句中用函数: