《第7章结构化程序设计.ppt》由会员分享,可在线阅读,更多相关《第7章结构化程序设计.ppt(80页珍藏版)》请在课桌文档上搜索。
1、第 7 章结构化程序设计,理解程序的概念、掌握程序的建立与运行方法掌握程序设计中常用的输入、输出语句理解并掌握程序的基本控制结构:顺序结构、分支(选择)结构、循环结构理解并掌握过程与用户自定义函数,教 学 目 标,程序的概念、程序的建立与运行方法程序设计中常用的输入输出语句程序的控制结构:顺序结构、分支(选择)结构、循环结构过程的概念、用户自定义函数的目的与方法,难点是:程序设计算法、分支程序设计、循环程序设计,重 点、难 点,7.1程序的概念(1)定义:程序是能够完成一定任务的命令的集合。这组命令被存放在称为程序文件或命令文件的文本文件中,VFP默认的程序文件的扩展名为PRG。程序方式与单命
2、令处理方式有以下优势:可以利用编辑器,方便地输入、修改和修改程序。可以用多种方式、多次运行程序。可以在一个程序中调用另一个程序。,7.1 程序的概念,SET TALK OFFCLEAROPEN DATABASE student&打开数据库 USE jbqkb&打开表LISTCLOSE DATABASE&打开数据库、表SET TALK ONRETURN,示例程序:,程序的书写规则和说明:,程序一般以SET TALK OFF开头,以SET TALK ON、RETURN语句结束。SET TALK ON|OFF的意义是打开或关闭人机会话方式,控制VFP信息在主窗口、状态栏或用户自定义的窗口里是否显示。
3、&是在程序中插入的命令注释,注释为非执行代码,不影响程序的功能。以NOTE或*开头的代码行也是注释行。注释行能增强程序文件的易读性。VFP中的注释行显示为绿色。程序中每条命令以回车键结尾,一行只能写一条命令。若命令太长时需要分行书写,在一行末尾键入续行符“;”,再按回车键。,程序中常出现CANCEL、RETURN、QUIT、DO 等命令,其意义如下:CANCEL:终止程序运行,清楚所有私有变量,返回命令窗口。RETURN:结束当前程序的运行,返回调用它的上级程序,若无上级则返回到命令窗口。QUIT:退出VFP系统。DO:转去执行另一个程序。,程序的书写规则和说明:,(1)建立源程序有多种方法,
4、常用的有:执行“文件新建”命令,在对话框中选取择“程序”文件。在“项目管理器”中选定“代码”选取项卡中的“程序”项,选择“新建”按钮。在“命令”窗口执行命令:MODIFY COMMAND.|?在编辑过程中注意保存程序。修改程序的方法与建立程序的方法类似。,7.1.2.程序的建立与运行,(2)程序的运行方法:执行“程序运行”命令,在“运行”对话框中选择要运行的程序名在“项目管理器”中选定“代码”选取项卡中“程序”项下的程序,选择“运行”按钮在“命令”窗口中,输入:DO 选择多条命令,然后单击鼠标右键,在弹出的快捷菜单菜单中选择“运行所选区域”,可运行程序的一部分。,7.1.2.程序的建立与运行,
5、VFP程序文件通过编译、连编,可产生不同的目标代码文件,以不同的扩展名标识。用DO命令执行程序文件时,如果没有指定扩展名,系统将按以下顺序执行某种目标代码文件:EXE(VFP的可执行文件)、APP(VFP的应用程序文件)、FXP(VFP的编译文件)、PRG(VFP的源程序文件)。,7.1.3.常用的输入输出语句,(1)ACCEPT命令【格式】ACCEPT TO【功能】在程序执行过程中,将用户交互式输入的内容作为字符串赋值给指定内存变量。【说明】若选用提示信息,系统将先显示提示信息的值作为提示信息,并将输入的字符串赋值给。该命令只能接收字符串,而不需加定界符,否则系统将把定界符作为字符串的一部分
6、。若不输入任何字符而直接按回车键,系统将把空串赋值给指定的内存变量。,SET TALK OFFCLEARACCEPT“请输入数据库名:”TO AAAOPEN DATABASE&AAA ACCEPT 请输入表名 TO BBBUSE&BBBLISTUSESET TALK ONRETURN,【例7-1】编程从键盘输入某数据库的文件名,要求打开该数据库、表并显示其内容。,(2)INPUT命令【格式】INPUT TO【功能】在程序执行过程中,将用户输入的内容赋值给指定内存变量【说明】若选用提示信息,系统将先显示提示信息的值作为提示信息,并将输入的数据赋值给。可以输入各种类型数据,也可以是常量、变量、函数
7、或表达式等形式,按回车键结束输入。输入非数值型数据要加定界符。如输入逻辑型常量时要用圆点定界(.T.)、输入日期型常量要用大括号2007-05-10等。,【例7-2】从键盘输入两个任意正数,编程求以两数为边长的长方形面积。程序文件名为PROG2.PRGSET TALK OFFCLEARINPUT 长方形一边的长为:TO AINPUT 长方形另一边的长为:TO BS=A*B?长方形的面积为:,SSET TALK ONRETURN,(3)WAIT命令【格式】WAIT 提示信息 TO WINDOW AT,NOWAITCLEAR|NOCLEARTIMEOUT【功能】显示信息并暂停程序执行,当按下任意键
8、或单击鼠标后继续执行。【说明】若选用提示信息,系统将先显示提示信息的值作为提示信息,并将输入的单字符赋值给。若不选用提示信息,则显示默认的提示信息“按任意键继续”。用来保存用户键入的单字符,其类型只能是字符型。若不选TO 短语,键入的单字符不保留。,如果指定WINDOW子句,则会出现一个WAIT提示窗口,在窗口中显示提示信息。提示窗口一般定位于WINDOW子句,也可用AT短语指定其在主窗口中的位置。若同时选用NOWAIT短语和WINDOW子句,系统不等待用户按键,直接向下执行。若选用NOCLEAR短语,则不关闭提示窗口,直到用户执行下一条WAIT WINDOW命令或WAIT CLEAR命令为止
9、。TIMEOUT 选项指在中断WAIT 命令之前,等待键盘或鼠标输入的秒数,一旦超时就不再等待用户按键,自动向下执行。,【例7-3】用WAIT 命令在信息提示窗口显示:谢谢使用Visual FoxPro!WAIT“谢谢使用Visual FoxPro!”WINDOWS TIMEOUT 10,三条输入命令的异同ACCEPT命令只能接受字符型数据,不需定界符,输入完毕按回车键结束;WAIT命令只能输入单个字符,且不需定界符,输入完毕不需按回车键;INPUT命令可接受数值型、字符型、逻辑型、日期型和日期时间型数据,数据形式可以是常量、变量、函数和表达式,如果是字符串,需用定界符,输入完毕按回车键结束。
10、,4)?|?输出命令【格式】?|?表达式1,表达式2【功能】计算表达式的值,输出计算结果。【说明】?计算表达式的值,输出一个回车换行符,再将计算结果输出到主窗口;若省略表达式,则显示或打印一空行。?功能同上,但不输出回车换行符,即同行输出。,4.格式化输入输出命令【格式】SAY GET【功能】在指定的行和列的位置上输出表达式的值,同时可以对GET后面的变量值进行修改或重新输入。【说明】行号、列号指信息在屏幕上显示的位置,第1行、第1列均为0。表达式通常为字符串。若选用GET,变量必须先赋初值,并反向显示。若要编辑GET变量,必须用READ激活。,【例7-3】设有如下自由表sb.dbf,记录内容
11、如下,编程:能根据记录号修改某设备的价格与部门编号。编号 名称 部门 价格 016-1 车床 21 1121100 016-2 钻床 21 2111000 016-3 磨床 22 1121300 016-4 微机 23 11000,Set talk offClear&清屏幕use sbjlh=1&设定get 变量的初值2,10 say“请输入记录号:”get jlhread&激活get 子句变量 jlh 用于编辑go jlh&指向第 jlh 条记录4,10 say“请修改第”+str(jlh,1)+“台设备的数据”&输出字串6,10 say“价格”get 价格&价格:字段变量8,10 say“
12、部门”get 部门read&激活get子句变量,用于编辑set talk on,7.2 程序的基本结构,Visual FoxPro系统的程序有两个特点:一是程序控制流模式,由顺序、分支、循环三种基本结构构成。二是面向对象可视化的结构程序模块,在每个模块的内部也是由程序控制流组成。常见的控制结构如下:1顺序结构 顺序结构是在程序执行时,根据程序中语句的书写顺序依次执行的命令序列。Visual FoxPro系统中的大多数命令都可以作为顺序结构中的语句。2分支结构 分支结构是在程序执行时,根据不同的条件,选择执行不同的程序语句,用来解决有选择、有转移的诸多问题。,3循环结构 循环结构则能够使某些语句
13、或程序段重复执行若干次。如果某些语句或程序段需要在一个固定的位置上重复操作,使用循环是最好的选择。在许多应用程序中,有一些程序段需要反复执行多次,这些程序段不在一个固定的位置上,而是分散在程序的许多位置上重复执行,可将其与嵌入它的程序分开,形成独立的程序序列,待使用时再调入程序中,以实现不同位置上的重复操作。这样做增强了程序的可读性和模块化。我们称这种具有独立功能而且可以被其它程序调用的程序序列为过程。,7.2.1 分支结构,分支结构形式有如下三种:(1)单向分支单向分支语句,即根据用户设置的条件表达式的值,决定某一操作是否执行。【格式】IF条件表达式 命令行序列 ENDIF【功能】该语句首先
14、计算条件表达式的值,当条件表达式的值为真时,执行命令行序列;否则,执行ENDIF后面的第一条命令。,【例7-4】求解一般一元二次方程AX2BXC0的实根。程序如下:SET TALK OFFCLEARINPUT TO AINPUT TO BINPUT TO CDB2-4*A*CIF D=0X1=(-B+SQRT(D)/(2*A)X2=(-B-SQRT(D)/(2*A)?X1,X2ENDIFSET TALK ON,双向分支语句,即根据用户设置的条件表达式的值,选择两个操作中的一个来执行。【格式】IF条件表达式 命令行序列1 ELSE 命令行序列2 ENDIF【功能】该语句首先计算条件表达式的值,当
15、条件表达式的值为真时,执行命令行序列1中的命令;否则,执行命令行序列2中的命令;执行完命令行序列1或命令行序列2后都将执行ENDIF后面的第一条命令。,【例7-5】编写一密码校验程序(假设密码为ABC)。SET TALK OFFCLEARACCEPT“请输入您的密码:”TO AAAIF AAA=”ABC”CLEAR?”欢迎使用本系统!”ELSE?”密码错误!”WAITQUITENDIFSET TALK ON,解一元二次方程的流程图,流程图,(3)多向分支 多向分支语句,即根据多个条件表达式的值,选择执行多个操作中的一个对应执行。(1)【格式】DO CASE CASE条件表达式1 命令行序列1
16、CASE条件表达式2 命令行序列2 CASE条件表达式N命令行序列N OTHERWISE 命令行序列N+1 ENDCASE,【功能】该语句根据给出的N个条件表达式的值,选择N+1个命令行序列中的一个执行。当所有CASE中条件表达式的值都是假时,如果有OTHERWISE项,则执行命令行序列N+1,再执行ENDCASE后面的第一条命令;否则,直接执行ENDCASE后面的第一条命令。,使用分支语句应注意以下几点:(1)IF ENDIF和DOCASE ENDCASE 必须配对使用,DO CASE与第一个CASE条件表达式之间不应有任何命令。(2)条件表达式可以是各种表达式或函数的组合,其值必须是逻辑值
17、。(3)命令行序列可以由一个或多个命令组成,可以是条件控制语句组成的嵌套结构。(4)DO CASE ENDCASE 命令,每次最多只能执行一个命令行序列。在多个CASE项的条件表达式值为真时,只执行第一个条件表达式值为真的命令行序列,然后执行ENDCASE的后面的第一条命令。,4使用分支语句应注意的几点(1)IF ENDIF和DO CASE ENDCASE 必须配对使用,DO CASE与第一个CASE条件表达式之间不应有任何命令。(2)条件表达式可以是各种表达式或函数的组合,其值必须是逻辑值。(3)命令行序列可以由一个或多个命令组成,可以是条件控制语句组成的嵌套结构。(4)DO CASE EN
18、DCASE 命令,每次最多只能执行一个命令行序列。在多个CASE项的条件表达式值为真时,只执行第一个条件表达式值为真的命令行序列,然后执行ENDCASE的后面的第一条命令。,要 点,SET TALK OFFCLEARINPUT“请输入收入:”TO PDO CASECASE P800 R=0CASE P2000 R=0.05,【例7-6】假设收入(P)与税率(R)的关系如下表,编程求税金。0 P800R=0.05 800 P2000 0.08 2000P5000 0.1 P5000,程序如下:SET TALK OFFCLEARINPUT“请输入收入:”TO PDO CASECASE P800 R
19、=0CASE P2000 R=0.05CASE P5000 R=0.08OTHERWISE R=0.1ENDCASETAX=P*R?”税金为:”,TAXSET TALK ON,7.2.2 循环结构,循环结构用于实现有规律性的重复操作,控制程序段的反复操作,直到满足某种条件为止,具有这种功能的程序构成循环结构。被重复执行的程序段称为循环体。VFP支持三种循环结构:当型 DO WHILEENDDO,步长型 FORENDFOR,指针型 SCANENDSCAN。,7.2.2 循环结构,循环结构,1.DO WHILE ENDDO循环语句(当型)【格式】DO WHILE LOOP EXIT ENDDO,【
20、功能】执行该语句时,先判断条件是否成立,如果当条件为真,则执行循环体,当执行到ENDDO时,返回到DO WHILE,再次判断条件是否为真,以确定是否再次执行循环体。如果条件为假,则结束该循环语句。,7.2.2 循环结构,【说明】循环次数。循环体中LOOP命令强行返回到循环开始语句;EXIT语句强行跳出循环,执行ENDDO后的语句。循环允许嵌套(多重循环)。只能从循环中跳出,不能从外部插入到循环内部。循环结构中包含循环的条件、循环头、循环尾、循环体。,【例7-8】编程求123100之和。,循环次数 循环变量K 和S,第1次 1 1,第2次 2 3,第3次 3 6,第4次 4 10,第100次 1
21、00 5050,第101次 101=100退出循环,说明:1.循环变量K、和变量S,并赋初值 2.循环条件 K=1003.计数器 K=K+1 累加器 S=S+I4.K=100的情况 5.输出结果S,SET TALK OFFCLEARS=0K=1DO WHILE K=100 S=S+K&累加器 K=K+1&计数器ENDDO?”123100”,SSET TALK ONRETURN,【例7-8】程序如下:,【例7-8-1】计算1 到100 间奇数的和。(使用IF和LOOP 语句)。,【例7-9】编程:在DBFJBQK.DBF表中按姓名反复查找某人的信息,若找到显示姓名(cxingm)、籍贯(cjig
22、)、住址(czhuz),若找不到显示“查无此人”。直到不再需要查找止。,分析:1.如何判断奇数?2.如何修改【例7-8】程序?,2.FORENDFOR循环语句(步长型)【格式】FOR=TO STEP EXIT LOOP ENDFOR|NEXT,【功能】执行该语句时首先将初值赋给循环变量,然后判断条件是否成立,如果当条件成立,则执行循环体,然后循环变量自动增加一个步长值,并再次再次判断条件是否为真,以确定是否再次执行循环体。如果条件为不成立,则结束该循环语句。,【说明】省略STEP,则步长值默认值1。初值、终值和步长都可以是数值表达式,但这些表达式仅在循环语句开始执行时计算一次,初值、终值和步长
23、是不会改变的,并由此确定循环的次数。可以在循环体内改变循环变量的值,但会改变循环执行次数。EXIT和LOOP意义同前。,例 题,【例7-10】计算1 到100 间奇数的和。,分析:1.循环变量K、和变量S,S要赋初值。2.初值K1,终止100,步长2,3.SS+K4.输出奇数和S。,【例7-11】编程输出九九乘法表的下三角形式。,分析:1.循环变量K、J,分别表示行、列数。2.行初值K1,终值9,步长1;列初值J1,终值K,步长1。3.显示形式如:IJZ4.注意换行。,输出样式:111212 224313 326 339,FOR循环与DO WHILE循环有和区别呢?FOR循环变量不用赋初值,循
24、环体中不用改变循环变量的值,处理有规律的数据问题简单,而处理数据库问题复杂些;DO WHILE循环具有通用性,两类数据和数据库问题都可以,要注意循环变量或表指针的改变。,【例7-12】从键盘输入10个数,编程找出其中的最大值和最小值。程序如下:SET TALK OFFCLEARINPUT“请从键盘输入一个数:”TO ASTORE A TO MAX,MINFOR I=2 TO 10INPUT“请从键盘输入一个数:”TO AIF MAXA MIN=AENDIFENDFOR?“最大值为:”,MAX?“最小值为:”,MINSET TALK ONRETURN,(3)“指针”型循环控制语句“指针”型循环控
25、制语句,即根据用户设置的表中的当前记录指针,决定循环体内语句的执行次数据。(1)【格式】SCAN范围FOR条件表达式1 WHILE 条件表达式2 命令行序列 ENDSCAN(2)【功能】该语句在指定的范围内,用数据记录指针来控制循环次数。执行语句时,首先判断函数EOF()的值,若其值为“真”,则结束循环,否则,结合条件表达式1或条件表达式2,执行命令行序列,记录指针移到指定的范围和条件内的下一条记录,重新判断函数EOF()的值,直到函数EOF()的值为真时结束循环。,【例7-13】输出STUDENT数据库的STUD表中所有团员的姓名和地址。程序如下:SET TALK OFFCLEAROPEN
26、DATABASE STUDENTUSE STUDSCAN FOR 是否团员?姓名,地址ENDSCANCLOSE DATABASESET TALK ONRETURN,使用循环语句时应注意的几点(1)DO WHILE和ENDDO、FOR和ENDFOR、SCAN和ENDSCAN必须配对使用。(2)命令行序列可以是任何FoxPro命令或语句,也可以是循环语句,即可以为多重循环。(3)循环变量应是数值型的内存变量或数组元素。(4)EXIT和LOOP命令嵌入在循环体内,可以改变循环次数,但是不能单独使用。EXIT的功能是跳出循环,转去执行ENDDO、ENDFOR、ENDSCAN后面的第一条命令;LOOP的
27、功能是转回到循环的开始处,重新对“条件”进行判断,相当于执行了一次ENDDO、ENDFOR、ENDSCAN命令,它可以改变命令行序列中部分命令的执行次数。EXIT、LOOP可以出现在命令行序列的任意位置。,【例7-14】编程:统计“学生信息.DBF”中入学成绩超过550 分的所有女生人数。CLEARUSE 学生信息RS=0SCAN FOR 入学成绩550.AND.性别=“女”RS=RS+1ENDSCAN2,10 SAY“入学成绩在550 以上的女生有:”2,38 SAY RSUSERETURN,关于多重循环 多重循环即循环的嵌套,是在一个循环结构的循环体中又包含另一个循环。我们称外层循环为外循
28、环,被包含的循环为内循环。嵌套层数一般没有限制,但内循环的循环体必须完全包含在外循环的循环体中,不能相互交叉。正确的嵌套关系如:DO WHILE DO WHILE DO WHILE ENDDO ENDDO ENDDO,7.3.1 基本概念,1.模块:模块是由一个或多个命令、语句构成的相对独立的程序段。(如:程序 文件、过程)2.过程:以特定的命令开始又以特定的命令结束的模块,被放置在程序文件或过程文件中。3.过程文件:只包含一个或多个过程的程序文件。,4.定义过程或过程文件(1)定义过程 PROCDURE|FUNCTION RETURNENDPROC|ENDFUNC格式说明:PROCDURE|
29、FUNCTION 命令表示一个过程的开始,并命名过程名;,过程名必须以字母或下划线开头,可以包含字母、数字和下划线;RETURN命令是过程返回命令,当过程执行到RETURN命令时,控制将转回到调用程序(或命令窗口),并返回表达式的值,若省略表达式,则返回逻辑值.T.;缺省RETURN命令,则在过程结束处自动执行一条隐含的RETURN命令;ENDPROC|ENDFUNC命令表示一个过程的结束,缺省时,过程结束于下一条PROCDURE|FUNCTION命令命令或文件结束处。,(2)定义过程文件PROCEDURE RETURNENDPROC|ENDFUNCPROCEDURE RETURNENDPRO
30、C|ENDFUNCPROCEDURE RETURNENDPROC|ENDFUNC26,(3)调用过程 1.调用存放在命令文件里的过程(分两种情况)被所存放的命令文件调用:Do 或()被其它命令文件调用的步骤:先打开此命令文件:SET PROCEDURE TO 然后就可以调用其中的过程:Do 或()2.调用过程文件中的过程的步骤:先打开过程文件:SET PROCEDURE TO,.ADDITIVE然后就可以调用其中的过程:Do 或()【说明】选用ADDITIVE,并不关闭已打开的过程文件,否则正好相反,(4)关闭过程文件语句关闭所有已打开的过程文件语句:SET PROCEDURE TO关闭个别过
31、程文件语句:RELEASE PROCEDURE,.【例7-17】建立如下程序文件,MAIN.PRG SET TALK OFF?”正在执行主程序”DO SUB1SET TALK ONProcedure SUB1?”正在执行SUB1”RETURN,7.3.2参数传递,主程序向过程传递参数的命令:1.DO WITH,2.WITH,说明:(1)DO WITH语句中的参数也叫实在参数。(2)实在参数可以是任何类型的常量、变量和表达式,有多个参数时,各参数之间用逗号分隔。(3)若参数表中的内存变量与库文件的字段名相同时,则内存变量前应冠以m-,以区别同名字段变量,否则字段变量优先于内存变量。,(4)参数表
32、中的内存变量必须先定义或赋值才能使用。(5)采用命令1,如果实参是常量,称为按值传递,即把实参的值传给形参;如果实参是变量,称为按引用传递,即把实参的地址传给形参;(6)采用命令2,默认情况下都以按值方式传递参数,如果实参是变量,可以通过命令SET UDFPARMS重新设置参数传递的方式。该命令格式:SET UDFPARMS TO VALUE|REFERENCE在过程中接收参数的命令:1.PARAMETERS,2.LPARAMETERS,说明:(1)PARAMETERS语句中的参数也叫形式参数,形式参数只能是变量。(2)PARAMETERS 语句只能在过程中使用,且必须作为过程中PROCEDU
33、RE语句后的第一条可执行语句。(3)形参的数目不能少于实参的数目,多余的形参变量初值为逻辑假.F.,形式参数与实在参数要类型对应一致(4)PARAMETERS中形式参数默认为私有变量,LPARAMETERS中形式参数默认为局部变量,过程结束后,即被清除。若与其对应的实在参数为变量,则其值可以传回主程序。,【例7-18】编程计算 M!/(N!(M-N)!)*主程序SET TALK OFFclearz=0input 请输入M的值:(MN)to Minput 请输入N的值:(MN)to NDO sub with Mc=zdo sub with Nc=c/zdo sub with M-Nc=c/z?c
34、=,cSET TALK ON,procedure subparameter kz=1i=1for i=1 to k z=z*iendforRETURN endproc,【例7-19】用参数传递编程,计算圆的面积。主程序如下SET TALK OFFCLEARS=0INPUT”请输入圆的半径:”TO RDO AREA WITH R,S?”圆的面积为:”,SSET TALK ONPROCEDURE AREA&计算面积的过程PARAMETER X,Y&形参说明Y=3.1416*X*2RETURN,7.3.3 变量的作用域,在VFP中,以变量的作用域(范围)来分,内存变量可分为公共变量(全局变量)、私有
35、变量、局部变量。(1)公共变量在任何模块(具有专用功能的程序)中均可使用的变量。公共变量的创建命令:PUBLIK 功能:将指定的的变量设置为公共变量,并将这些变量的初值设为.F.,说明:若下层模块(被调子程序、过程)中建立的内存变量要 供上层模块(主调程序)使用,或某模块中建立的内存变量要供并列模块使用,则必须将这些变量设为公共变量。VFP默认命令窗口定义的变量为公共变量。程序终止时公共变量不会自动清除,只能使用下述命令RELEASE MemVarList 或CLEAR ALL 或CLEAR MEMORY 清除,(2)私有变量VFP 默认程序中定义的变量为私有变量,它只能在其定义的模块中或在其
36、下层模块中有效(使用)。在下层模块中若要定义与上层模块同名的变量,但又表示不同的意义,此时可说明其为私有变量(以便在下层模块中屏蔽上层模块中的同名变量,以免混淆)。说明(声明)命令PRIVATE ALL LIKE|EXCEPT 功能:声明私有变量并隐藏上级模块的同名变量,直到声明它的程序、过程或自定义函数执行结束后,才恢复先前隐藏的变量。,说明:声明即对变量加以说明,不赋初值。参数接受命令:PARAMETERS 声明的变量默认为私有变量。(3)局部(本地)变量本地变量只能在定义它的模块中使用,该模块运行结束时本地变量自动释放。命令格式:LOCAL,【例7-20】观察A、B、C、D、E值的变化。
37、set talk offclearprivate ca=1b=2c=3d=4?主程序中A、B、C、D的值为:?a,b,c,dwait windowdo sub5,?调用子程序后A、B、C、D、E的值为:?a,b,c,d,eset talk onproc sub5private a,cpublic ea=4b=5c=6e=7?子程序中A、B、C、D、E的值为:?a,b,c,d,ereturn,运行结果如下:主程序中A、B、C、D的值为:1 2 3 4调用子程序后A、B、C、D、E的值为:4 5 6 4 7子程序中A、B、C、D、E的值为:1 5 4 4 7,7.4 程序调试,7.4.1调试器环境
38、当程序运行时产生了错误或得到了不正确的结果,往往需要跟踪程序的运行才能找出错误所在,为此VFP提供了丰富的调试工具,帮助我们逐步发现代码中的错误,有效地解决问题。方法一:选择“工具/调试器”菜单项中,就打开了“调试器”窗口。方法二:使用下面的命令打开调试器:DEBUGSET STEP ONSET ECHO ON,1跟踪窗口2、局部窗口:3、监视窗口:4、调用堆栈窗口5、调试输出窗口,7.4.2 设置断点,1.断点类型有以下4种:类型1:在定位处中断类型2:如果表达式为真则在定位处中断类型3:当表达式为真时中断类型4:当表达式值改变时中断,2.设置断点(1)设置类型1断点:在跟踪窗口中找到要设置
39、断点的那行代码,按F9或回车。设置断点后,该行代码左边会显示一个实心点。用同样的方法可以取消已经设置的断点。也可以在断点对话框中设置断点。,(2)设置类型2断点:在“调试器”窗口中,选择“工具”菜单上的“断点”命令,打开断点对话框。从“类型”下拉列表中选择相应的断点类型。在“定位”框中输入适当的断点位置。在“文件”框中指定模块程序所在的文件。在“表达式”框中输入相应的表达式。单击“添加”按钮,将该断点添加到“断点”列表框里。单击“确定”按钮。取消的方法与类型1断点相同,也可以在断点对话框中单击“删除按钮”取消。类型3、类型4断点设置方法相似。,7.4.3 调试菜单调试菜单中各命令的功能介绍:运行:执行在跟踪窗口中打开的程序取消:终止程序的调试执行,并关闭程序定位修改:终止程序的调试执行,然后在文本编辑窗口打开调试程序跳出:以连续方式而非单步方式继续执行被调用模块中的代码,然后在调用程序的调用语句的下一行处中断单步:一次执行一个语句,如果此语句是对一个过程的调用,下一个被显示的语句就是该过程内的第一个语句单步跟踪:单步执行下一行代码,