Download presentation
Presentation is loading. Please wait.
1
第9章 结构化程序设计
2
9.1 程序设计基础 9.1.1 程序设计的概念 VFP提供一种程序执行方式,这种方式就是预先把 需要执行的多条命令按一定的结构组成一个有机序列以 文件的形式存储在磁盘上,这个文件就称为程序文件, 这个序列的设计、编码和调试的过程就是程序设计。
3
任何复杂的程序都由3种基本控制结构组成。它们是顺序结构、选择结构和循环结构。
9.1.2 程序的控制结构 任何复杂的程序都由3种基本控制结构组成。它们是顺序结构、选择结构和循环结构。 图9.1程序的控制结构
4
9.1.3 结构化程序设计方法 结构化程序设计采用自顶向下、逐步求精和模块化的分析方法。 自顶向下是指对设计的系统要有一个全面的理解,从问题的全局入手,把一个复杂问题分解成若干个相互独立的子问题 。逐步求精是指程序设计的过程是一个渐进的过程,先把一个子问题用一个程序模块来描述,再把每个模块的功能逐步分解细化为一系列的具体步骤 。模块化是结构化程序的重要原则。所谓模块化就是把大程序按照功能分为较小的程序。
5
9.1.4 程序文件的建立与执行 1.命令方式建立或修改程序文件 命令格式: MODIFY COMMAND [<程序文件名> |? ] MODIFY.FILE.[〈文件名〉|?] 功能:启动VFP提供的文本编辑器来建立或编辑程序文件。 2.菜单方式建立编辑程序文件
6
3.程序文件的执行 命令格式: DO <程序文件名> 功 能 : 将程序文件从磁盘调入内存, 编译成.FXP目 标文件后并执行。 菜单方式:①.CANCEL:终止程序运行,清除所有的私有变量,返回命令窗口。 ②.RETURN:结束程序执行,返回调用它的上级程序,若无上级程序则返回命令窗口。 ③.QUIT:结束程序执行并退出Visual.FoxPro系统,返回操作系统。
7
9.2 顺序结构程序 顺序结构是最简单、最基本的一种程序结构。在顺序结构程序中,各命令按照各自出现的先后顺序,依次执行。
8
9.2.1 程序文件中的辅助命令 一.输入类语句 ㈠. 赋值语句 格 式1: STORE <表达式> TO <内存变量名表> 格 式2: <内存变量> = <表达式> 功 能:给内存变量赋值。
9
㈡. 交互式语句/键盘输入命令 键盘输入命令主要用于程序执行过程中原始数据的输入。 1. 字符串数据输入命令 格式: ACCEPT [<提示信息>] TO <内存变量> 功能:在屏幕上显示提示信息,等待用户从键盘输入,再把输入内容赋值给指定的内存变量。 注:ACCEPT命令只能接受字符型常量,输入时不需加定界符。
10
例9-1:要求用户从键盘上输入用户名,然后把输入的用户名显示出来。
ACCEPT “请输入用户名:” TO NAME ?NAME
11
2. 数据输入命令 格式:INPUT [<提示信息>] TO <内存变量> 功能:在屏幕上显示提示信息,等待用户从键盘输入,再把输入内容赋值给指定的内存变量。 注:INPUT命令能接受任何类型的表达式: ① 输入C 型数据时,要使用 ‘ ’ 或 “ ” 作为定界符; ② 输入L 型数据时,.T. 和 .F. ,两边的 不能省; ③ 输入D 型数据时,要用{ } 或CTOD( ) 将字符串转成日期型变量。
12
例9-2:求任意两数之和。 INPUT “请输入一个数x:” TO X INPUT “请输入另一个数y:” TO Y ?X+Y
13
例9-3: 给出下列A、B的结果 J=2800 INPUT “输入 J+200 :” TO A ACCEPT “输入 J+200 :” TO B ?“A=”,A ? “B=”,B 注:执行时,先后两次输入同样的内容:J+200
14
[TIMEOUT <数值表达式>]
3. 只能输入一个字符的命令 格式:WAIT [<提示信息>] TO <内存变量> [TIMEOUT <数值表达式>] 功能:当程序执行某一处需要暂停时使用此命令。 注:WAIT命令响应速度快,它只接受一个字符,不需用户键入回车键。
15
**** 数据表操作命令菜单 **** 例9-4: 打开工作数据表 增加数据表记录 删除数据表记录 修改数据表记录 打印数据表记录
关闭工作数据表 WAIT “请选择相应代码:” TO CHOICE ? “您选择的是第” + CHOICE + “个选项”
16
[RANGE <数值表达式1>, <数值表达式2>] READ
4. 格式输入语句 <行,列> SAY <提示信息> GET <变量> [RANGE <数值表达式1>, <数值表达式2>] READ 功能:在屏幕指定的坐标位置上显示提示或输入数据。 注:① <变量> :该变量应在其前面定义过 ( 赋初值 ) 。 ② READ 一般与GET 联合起来用: 当有READ时, GET <变量> 的内容可以从键盘上修改; 没有READ时,GET 后的变量只能显示内容,不能修改; 一个READ可以修改它前面的多个GET项的内容,但它可以由CLEARGETS命令隔断。
17
例9-5: @ 8, 18 SAY “**** 数据表操作命令菜单 ****” @ 9, 18 SAY “ 打开工作数据表 ” @ 10, 18 SAY “ 增加数据表记录 ” @ 11, 18 SAY “ 删除数据表记录 ” @ 12, 18 SAY “ 修改数据表记录 ” @ 13, 18 SAY “ 打印数据表记录 ” @ 14, 18 SAY “ 关闭工作数据表 ” @ 16, 28 SAY “ 请选择相应代码:” GET CHOICE READ @ 18, 28 SAY “您选择的是:” + LTRIM(STR(CHOICE))
18
二.输出类语句 1. 非格式输出语句 格式1: ? <内存变量名表> 格式2: ?? <内存变量名表>
1. 非格式输出语句 格式1: ? <内存变量名表> 格式2: ?? <内存变量名表> 功 能:显示内存变量、常量或表达式的值。 注:语句1 是在光标所在行的下一行开始显示, 语句2 则是在当前光标位置开始显示。
19
[FUNCTION <功能符>][PICTURE <格式符>]
2. 格式输出语句 <行,列> SAY <表达式> [FUNCTION <功能符>][PICTURE <格式符>] 功能:按指定的坐标位置在屏幕上输出表达式的值。 注: 若选用PICTURE、 FUNCTION子句,则按一定的格式输出 ,分别见教材P131的表6.1、6.2。
20
ENDTEXT 3. 文本输出语句 格式: TEXT <输出显示内容>
功能:在屏幕上原样显示TEXT和ENDTEXT之间的内容。 注: TEXT、ENDTEXT是一条子句,不能省略其中任一条子句。
21
**** 数据表操作命令菜单 **** 例6-6 TEXT 打开工作数据表 增加数据表记录 删除数据表记录 修改数据表记录 打印数据表记录
关闭工作数据表 ENDTEXT WAIT “请选择相应代码:” TO CHOICE ? “您选择的是第” + CHOICE + “个选项”
22
三. 设置会话状态语句 语句格式1: SET TALK ON 语句格式2: SET TALK OFF 功能 语句1:设置会话状态开通。 语句2:设置会话状态关闭。
23
四. 清屏与注释语句 1. 清屏语句 语句格式: CLEAR 功 能 :清除屏幕上所有显示内容,光标回到屏幕左上角。
24
2. 注释语句 语句格式1: NOTE <注释内容> 语句格式2: * <注释内容> 语句格式3: && <注释内容> 功 能 : 在程序中加入说明性语句。 注:语句1、2、3 在程序中,系统不执行。
25
五. RETURN命令 格式: RETURN [<表达式>/TO MASTER/TO <程序名>] 功能 : 结束一个程序的执行。 注:一般RETURN出现于程序末尾。
26
六. 终止程序执行语句 语句格式1: CANCEL 语句格式2: QUIT 功能:终止程序执行,关闭所有打开的命令文件。 注: 语句1:在终止程序执行后,返回到VFP命令状态; 语句2:返回到操作系统状态。
27
顺序结构程序设计 顺序结构程序:按语句的先后顺序组织的程序,即把处理过程的各个步骤按执行的先后顺序列出。 其流程图如右图所示。
A B C 图中箭头表示程序执行的方向,方框代表不同的可执行语句。 N
28
例 变量的初始化和变量的赋值。 SET TALK OFF STORE 0 TO X,Y,Z A=3 B=A+1 C=A*B ? X, Y, Z ? A, B, C SET TALK ON
29
例 执行以下命令序列,问答问题: USE zgb SUM 基本工资 FOR 基本工资>1000 TO SGZ COPY FOR 基本工资>1000 TO GZK2 USE GZK2 num=reccount( ) ave=sgz/num ? ave 最后显示的值是: 所有职工的平均工资; 所有工资在1000元以上的职工的平均工资; 所有工资在1000元以上的职工人数; 所有职工人数 。
30
9.3 选择结构程序设计 在计算机应用的许多场合,要求程序根据不同的条件采用不同的处理方法。如果条件满足,则执行某一些语句;如果条件不满足,则执行另一些语句。这些需要根据判断条件来控制程序走向的程序设计称为选择结构程序设计,又称分支结构程序设计。 Visual FoxPro提供双分支选择语句、多分支选择语句两种选择结构。
31
9.3.1 双分支选择语句(选择判断语句) .T. 语句格式: IF <条件> <语句序列1> ENDIF .F. [ELSE
双分支选择语句(选择判断语句) .T. 语句序列1 语句格式: IF <条件> <语句序列1> ENDIF .F. ENDIF后的语句 [ELSE <语句序列2>] 条件 .Y. .N. ENDIF后的语句 语句序列1 语句序列2
32
执行过程: 如果<条件>成立,就执行语句序列1; 如果<条件>不成立,执行语句序列2。 注: (1) IF和ENDIF必须配对使用,而ELSE可选。 (2) IF、ELSE、ENDIF必须各占一行。 (3) <条件>可以为关系表达式、逻辑表达式。 (4)在<语句序列1>和<语句序列2>中可以嵌套IF语句。
33
例 请改用分支结构语句编程计算电费: 不超过50度, 每度0.52元; 超过50度时, 超出部分每度0.75元。
SET TALK OFF INPUT “请输入所用电量:" TO DL DF=IIF(DL<=50,0.52*DL,0.52* *(DL-50)) ? “应缴电费为:” + LTRIM(STR(DF,10,2)) + "元" SET TALK ON RETURN
34
例 火车托运行李: 每人不超过40公斤,每公斤0.22元;超过40公斤时, 超出部分每公斤0.40元。填空完成以下程序。
SET TALK OFF INPUT "请输入行李重量:" TO W IF YF=0.22*W ELSE YF= 0.22* ENDIF ? "应交托运费为:"+LTRIM(STR(YF,10,2))+"元" SET TALK ON RETURN W < 40 (W-40) * 0.4
35
例 编程:在ZGB.DBF中查找某人。 SET TALK OFF Set defa to f:\jfvfp\prg USE zgb
ACCEPT “请输入要查找人的姓名: ” TO N LOCATE ALL FOR XM=N IF FOUND( ) DISP ELSE ? [查无此人] ENDIF USE SET TALK ON RETURN
36
9.3.2 多分支选择语句(选择语句|情况语句) 语句格式: 说明: ①DO CASE和第一个CASE子句之间不能插入任何语句。
<语句序列1> CASE <条件表达式2> <语句序列2> ┇ CASE <条件表达式n> <语句序列n> [ OTHERWISE <语句序列n+1> ] ENDCASE 说明: ①DO CASE和第一个CASE子句之间不能插入任何语句。 ②DO CASE和ENDCASE必须配对使用,且DO CASE,CASE,OTHERWISE和ENDCASE各子句必须各占一行。 ③在<语句序列>中可嵌套情况语句。
37
功能:系统依次测试语句中各个条件表达式的值: 若为真,即执行相应<条件表达式>后的<语句序列>, 然后脱离情况语句,执行ENDCASE的下一语句。若所有的条件表达式的值均为假,则执行OTHERWISE后面的语句序列, 然后脱离情况语句,执行ENDCASE下一语句 。 开始判断 条件1 条件2 条件n 其它 语句序列1 序列2 序列n 序列n+1 …… ENDCASE后面的语句
38
例 已知cjb.dbf中包含xingming,avcj等字段。试用avcj来判断该生成绩属于优(≥90)、良(≥80)、及格(≥60)或不及格(<60)。
USE cjb ACCEPT ′请输入姓名:′ TO xm LOCATE FOR ALLTRIM(xingming)=ALLTRIM(xm) n=avcj DO CASE CASE n>=90 dj=″优″ CASE n>=80 dj=″良″ CASE n>=60 dj=″及格″ OTHERWISE dj=″不及格″ ENDCASE @5,10 SAY xingming+[同学的成绩等级为:]+ dj
39
例 阅读下列程序段,写出运行结果: A=3000 DO CASE CASE A<1000 B=A/2 CASE A>=1000 B=A CASE A>=2000 B=2*A CASE A>=3000 B=3*A ENDCASE ? B
40
例 利用CASE语句实现简单的菜单功能 Set talk off Set defa to f:\yyfox clear cho=0
@ 8, 18 SAY “**** 数据表操作命令菜单 ****” @ 9, 18 SAY “ 打开工作数据表 ” @ 10, 18 SAY “ 增加数据表记录 ” @ 11, 18 SAY “ 删除数据表记录 ” @ 12, 18 SAY “ 修改数据表记录 ” @ 14, 18 SAY “ 关闭工作数据表 ” @ 15, 28 SAY “ 请选择相应代码:” GET cho Read Do case case cho=1 accept “请输入表文件名:” to bm use &bm
41
case cho=2 append case cho=3 input “请输入要删除的记录号:” to jlh go jlh dele case cho=4 browse case cho=5 use otherwise @15, 28 SAY “ 选择代码错!” endcase Set talk on return
42
9.4 循环结构程序设计 循环,就是按给定的条件连续地重复执行一段特定功能的程序。循环结构也称为重复结构。
9.4 循环结构程序设计 循环,就是按给定的条件连续地重复执行一段特定功能的程序。循环结构也称为重复结构。 Visual FoxPro给出了三种循环结构: 条件循环(DO WHILE……ENDDO) 计算循环(FOR……ENDFOR) 扫描循环(SCAN……ENDSCAN)
43
一、条件循环 语句格式: DO WHILE <条件> .F. <语句序列1> [LOOP] .T.
<语句序列2> [EXIT] <语句序列3> ENDDO .F. 条件 条件 .T. 循环体 循环体 ENDDO后的语句 功能:有条件连续地重复执行DO WHILE与ENDDO之间的语句序列,直到<条件>为假或因执行EXIT语句而结束。 条件循环结构流程图
44
功能说明: (1)系统执行该语句时,先判断循环开始DO WHILE的条件是否成立, 如果条件为真,则执行循环体中的语句序列。当执行到ENDDO时,返回到DO WHILE,再次判断条件是否为真,以确定是否再次执行循环体。若条件为假,则结束循环 ,执行ENDDO后面的语句。 如果第一次判断条件时,条件即为假,则循环体一次都不执行,这就是称为“先判断后执行”的语句。 (2)循环体中的LOOP是可选项。遇到LOOP时,不再执行后面的语句,转回DO WHILE处重新判断。其作用相当于一个特殊的“短路”返回控制。 (3)循环体中的EXIT也是可选项。遇到它时便无条件地退出循环,转到ENDDO后面的语句。其作用相当于一个紧急出口。 (4)通常LOOP或EXIT出现在循环体内嵌套的分支语句中,根据条件来决定是LOOP回去,还是EXIT出去。
45
例 在屏幕上换行显示字符串“OK”20次 SET TALK OFF CLEAR ?[OK] … SET TALK ON RETURN
46
例 在屏幕上换行显示字符串[OK]20次 SET TALK OFF CLEAR i=1 1 1 2 DO WHILE i<=20 2
循环次数 循环前i值 循环后i值 i=1 &&设置循环变量初值 1 1 2 DO WHILE i<=20 2 2 3 ? [OK] ? [OK] … i=i+1 &&修改循环变量 ENDDO 20 20 21 SET TALK ON RETURN
47
在以循环变量作为循环控制参数的条件循环中
注意 ① DO WHILE 语句之前一定要有设置循环变量初 值的语句。 ② 循环体内一定要有修改循环变量的语句,否则 就会出现死循环。
48
例 求自然数1至4的和。 分析算法: 1. i=1 , s=0 ; 2. 累加第 i 个数 s= s+i ; 3. 累加次数加1 i= i+1 ; 4. 当 i<= 4 重复做2 ; 5. ? s 。
49
例 求自然数1至4的和。 SET TALK OFF S=0 &&定义一个变量表示和,并初始化 i=1 DO WHILE i<=4 i=i+1 ENDDO &&设置循环变量的初值 &&指定以循环次数作判断条件 S=S+i &&把S的值加上i后再赋给S,即求和 &&修改循环变量 &&输出求和的结果 ? S SET TALK ON RETURN
50
× 程序流程图 S=0 i=1 .F. 4<=4 5<=4 3<=4 2<=4 1<=4 .T. S=0+1
SET TALK OFF S=0 i=1 DO WHILE i<=4 S=S+i i=i+1 ENDDO ? S SET TALK ON RETURN i=1 .F. × 4<=4 5<=4 3<=4 2<=4 1<=4 .T. S=0+1 S=6+4 S=3+3 S=1+2 i=2+1 i=1+1 i= 4+1 i=3+1 ? 10
51
推广1 [程序:求自然数1至4的和] i<=N 若求自然数1至N的和呢? SET TALK OFF
INPUT 〞请输入N的值:〞 TO N S=0 i=1 DO WHILE i<=4 i<=N S=S+i i=i+1 ENDDO ?S SET TALK ON RETURN
52
推广2 [程序:求自然数1至N的和] 若求自然数1至N的积呢? SET TALK OFF INPUT 〞请输入N的值:〞 TO N S=1
DO WHILE i<=N S =S + i S=S*i i =i + 1 ENDDO ?S SET TALK ON RETURN
53
例 阅读程序,并说出程序的运行结果 RETURN SET TALK ON SET TALK OFF i=1 DO WHILE i<=5 i=i+1 ENDDO ? i ? “E” 程序结果 程序结果 2 2 IF i=3 LOOP ENDIF 3 4 4 5 5 6 6 E E
54
以循环变量作为控制参数控制循环。 例 求1~100以内所有奇数的和。 SET TALK OFF S=0 I=0
例 求1~100以内所有奇数的和。 SET TALK OFF S=0 I=0 Do while I<100 I = I + 1 If int(I/2) = I/2 Loop endif S = S + I Enddo ? “1到100的奇数和 S= ”, S SET TALK ON Return 程序改进: S=0 I=1 Do while I<100 S = S + I I = I + 2 Enddo ? s
55
利用数据表的操作函数的返回值控制循环 例 编程:在zgb.dbf中查找某人。 —————— SET TALK OFF CLEAR
USE zgb ACCEPT “请输入要查找人的姓名: ” TO N LOCATE ALL FOR XM=N DO WHILE .NOT. EOF( ) DISP CONTINU WAIT “按任意键继续,按ESC键退出” ENDDO USE ?“查找结束” SET TALK ON RETURN ——————
56
例 求连乘数1*2*3*4*……,当积大于720时退出程序。
循环控制条件恒为真,要使用EXIT语句结束循环 Set talk off Clear S=1 I=1 Do while .T. S = S * I I = I + 1 Enddo ? “ S= ”, S Set talk on Return —— IF S > 720 EXIT ENDIF ———
57
例 求[1,100]内所有能被3或被5整除的数的个数。 SET TALK OFF N= 0 &&定义一个变量表示个数,并初始化 i=1 DO WHILE i<=100 i=i+1 ENDDO IF MOD(i,3)=0 .OR. MOD(i,5)=0 &&显示满足条件的这个数 ? i N=N+1 &&总个数增加1 ENDIF ? 〞满足条件的数的个数为〞,N SET TALK ON RETURN
58
二、计数循环 语句格式: FOR X=A TO B [STEP C ] <语句序列1> [LOOP]
循环初值 循环终值 语句格式: FOR X=A TO B [STEP C ] <语句序列1> [LOOP] <语句序列2> [EXIT] <语句序列3> ENDFOR | NEXT 步长值 循环变量 循环体 功能:将FOR……ENDFOR循环中的<语句序列>执行指定的次数。
59
思考1 若求100的阶乘呢? 例 求1~100之和。 SET TALK OFF Clear S=0 for I=1 to 100
例 求1~100之和。 SET TALK OFF Clear S=0 for I=1 to S = S + I Endfor ? “S = ”, S SET TALK ON Return
60
思考2 若求1~100的偶数和呢? 例 求1~100之奇数和。 SET TALK OFF Clear S=0
例 求1~100之奇数和。 SET TALK OFF Clear S=0 for I=1 to 100 step 2 S = S + I Next ? “S = ”, S SET TALK ON Return
61
例 阅读程序,写出程序运行结果 SET TALK ON SET TALK OFF S=0 FOR K=1 TO STEP 2 S=S+K ENDFOR ? S RETURN IF K=7 LOOP ENDIF 思考3 若改成EXIT呢?
62
SCAN [<范围>][FOR <条件>] <语句序列1> [LOOP]
三、表文件扫描循环 语句格式: SCAN [<范围>][FOR <条件>] <语句序列1> [LOOP] <语句序列2> [EXIT] <语句序列3> ENDSCAN 循环体 功能:在指定的范围内,扫描满足给定条件的记录,执行相应的语句。
63
例 用SCAN语句编程:在zgb.dbf中查找某人。
SET TALK OFF USE zgb ACCEPT “请输入要查找人的姓名: ” TO N SCAN FOR XM=N DISP WAIT “按任意键继续,按ESC键退出” ENDSCAN USE ?“查找结束” SET TALK ON RETURN
64
对数据表扫描时三种循环的等价格式 表文件扫描循环: SCAN FOR …… …… ENDSCAN 计数循环: n=RECCOUNT() FOR i=1 TO n …… GO i ENDFOR 条件循环: DO WHILE .NOT. EOF() …… SKIP ENDDO
65
循环嵌套 循环体内又设置循环的情况称为多重循环,又称为循环嵌套。 内外循环的层次必须分明,不允许有交叉现象出现。
循环结构可以与分支结构嵌套,同样不允许有交叉现象出现。 以下交叉情形不允许出现:
66
例 已知S1=1,S2=1+2,S3=1+2+3,……, Sn=1+2+3+……+N,编程求S1+S2+……+S100的和。
Do while n<=100 i=1 sub=0 Do while i<=n sub = sub + i i = i + 1 Enddo s = s + sub n =n + 1 ? “ S1+S2+……+S100= ”, s
67
练 习 (1)求[1,30]之间所有偶数的乘积。 (2)已知S=1*2*3*…*N 当S>800时退出,求此时最小的S值
练 习 (1)求[1,30]之间所有偶数的乘积。 (2)已知S=1*2*3*…*N 当S>800时退出,求此时最小的S值 (3)求 s=1!+2!+……+n! (4)求 (5)求
68
9.5 程序的模块化 9.5.1 子程序、过程和函数 1.子程序 (1).子程序的结构
子程序与其他程序文件的惟一区别是其末尾或返回处必须有返回语句。 命令格式:RETURN.[TO.MASTER|TO.〈程序文件名〉|〈表达式〉]
69
(2).子程序的调用 子程序调用命令与主程序执行命令相同,其格式都是:DO〈程序文件名〉|〈过程名〉[WITH.〈参数表〉] (3).子程序的嵌套调用 主程序可以调用子程序,子程序还可以调用另外的子程序,这就是子程序的嵌套调用。实际上,子程序和主程序都是相对的,任何一个程序可以调用其他程序,也可以被其他程序调用。每个被调用程序的末尾或返回处都要加上RETURN命令。
70
2.自定义函数 (1).自定义函数的结构 [FUNCTION.〈函数名〉] [PARAMETERS.〈参数表〉] 〈命令组〉 RETURN.[〈表达式〉] (2).自定义函数的调用 调用格式是: 〈函数名〉(〈自变量表〉)
71
3.过程与过程文件 (1).过程的结构 过程的一般格式是: PROCEDURE〈过程名〉 [PARAMETERS〈参数表〉] 〈命令组〉 RETURN (2).过程文件 一个过程可以以文件形式单独存在,也可以将多个过程合并到一个文件中,这个文件称为过程文件。在过程文件中,每个过程仍然是独立的,可以单独调用。
72
(3).过程文件的打开与关闭 打开过程文件命令格式是: SET.PROCEDURE.TO.[〈过程文件名〉] 关闭过程文件命令格式是: SET.PROCEDURE.TO或者 CLOSE.PROCEDURE
73
9.5.2 内存变量的作用域 1.全局内存变量 定义全局变量的命令格式: 命令格式1:
PUBLIC〈内存变量表〉|ALL|ALL LINK〈通配符〉|ALL EXCEPT〈通配符〉 命令格式2: PUBLIC.[ARRAY]〈数组名〉(〈下标上界1〉[,〈下标上界2〉])[,〈数组名〉(〈下标上界1〉[,〈下标上界2〉]),…] 功能:定义全局内存变量或数组。
74
2.局部内存变量 局部内存变量只能在定义它的程序及其下级程序中使用,一旦定义它的程序运行结束,它便自动被清除。也就是说,在某一级程序中定义的局部变量,不能进入其上级程序使用,但可以到其下级程序中使用,而且当在下级程序中改变了该变量的值时,在返回本级程序时被改变的值仍然保存,本级程序可以继续使用改变后的变量值。
75
3.隐藏内存变量 如果某级程序中使用的局部变量与上级程序中的局部变量或全局变量同名,就容易造成混淆。为了避免这种情况,可使用PRIVATE命令在该程序中将全局变量或上级程序定义的一些变量隐藏起来,这时就像这些内存变量不存在一样,可以再定义同名的内存变量。 命令格式 :PRIVATE.〈内存变量表〉|ALL|ALL.LIKE.〈通配符〉|ALL.EXCEPT.〈通配符〉
76
9.5.3 调用子程序时的数据传递 调用子程序时的数据传递可以通过两种方式来解决。
1.利用变量的作用域实现数据传递:合理地利用前面介绍的内存变量作用域特性,可以实现调用子程序时的数据传递。 2.利用参数实现数据传递 。 命令格式是: PARAMETERS.〈内存变量表〉 功能:该命令指定子程序中的局部变量名,并由这些局部变量接收上级程序中用DO…WITH传递来的参数。
77
9.6 程序调试 9.6.1 程序调试概述 程序调试就是确定程序出错的位置,然后加以改正,一直到满足预定的设计要求为止。程序调试往往是先分模块调试,当各模块都调试通过以后,再联合起来进行调试,通过联调后,便可试运行,试运行无误即可投入正常使用。 程序的错误有两类:语法错误和逻辑错误。
78
9.6.2调试器窗口 选择“工具”菜单中的“调试器”命令或在命令窗口输入DEBUG命令,系统打开调试器窗口。 1.跟踪窗口 2.监视窗口 3.局部窗口 4.调用堆栈窗口
79
9.6.3设置断点 在调试器窗口可以设置以下4种类型的断点: 类型1:在定位处中断。 类型2:如果表达式值为真则在定位处中断。 类型3:当表达式值为真时中断。 类型4:当表达式值改变时中断。 不同类型断点的设置方法大致相同,但也有一些区别。
80
9.6.4“调试”菜单项 在调试器窗口中的“调试”菜单项包含执行程序、选择执行方式、终止程序执行、修改程序以及调整程序执行速度等命令。 各命令的具体功能请参考教材。
Similar presentations