




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Visual Foxpro程序设计程序设计第第8章程序设计基础章程序设计基础本章主要内容本章主要内容8.1 程序设计的基本概念与步骤程序设计的基本概念与步骤8.2 程序中的常用命令程序中的常用命令 8.3 程序控制结构程序控制结构8.4 多模块程序设计多模块程序设计总页第2页8.3.3 循环结构程序设计循环结构程序设计在程序设计中,经常需要对某一个程序段(即在程序设计中,经常需要对某一个程序段(即一条或多条命令)反复执行,这种程序结构称为循一条或多条命令)反复执行,这种程序结构称为循环结构。环结构。 循环结构的特点是:当给出的循环条件为真时,循环结构的特点是:当给出的循环条件为真时,反复执行一
2、组命令,这组被重复执行的命令序列称反复执行一组命令,这组被重复执行的命令序列称为循环体。当循环条件为假时,则终止循环体的执为循环体。当循环条件为假时,则终止循环体的执行。循环结构也就是由循环条件控制循环体是否重行。循环结构也就是由循环条件控制循环体是否重复执行的一种语句结构,它可以简化程序,提高程复执行的一种语句结构,它可以简化程序,提高程序效率。常用的循环语句有以下几种形式:序效率。常用的循环语句有以下几种形式:条件型循环:条件型循环:DO WHILEDO WHILEENDDOENDDO计数型循环计数型循环:FORFORTOTOENDFORENDFOR扫描型循环:扫描型循环:SCANSCAN
3、ENDSCANENDSCAN总页第3页一、条件循环一、条件循环条件循环是根据条件表达式的值,决定循环体内语句的执条件循环是根据条件表达式的值,决定循环体内语句的执行次数,也称为当型循环。一般用于未知循环次数的循行次数,也称为当型循环。一般用于未知循环次数的循环。环。【格式【格式】DO WHILE LOOP EXIT ENDDO【功能【功能】 语句执行时,先判断语句执行时,先判断 的值,若为真,的值,若为真,则执行循环体内的命令,即则执行循环体内的命令,即DO DO 与与ENDDOENDDO之间的命令;若之间的命令;若为假,则执行为假,则执行ENDDOENDDO后面的命令。后面的命令。总页第4页
4、【说明【说明】1.DO WHILE 1.DO WHILE 和和ENDDOENDDO要配对使用;要配对使用;2.DO WHILE 2.DO WHILE 是循环语句的入口,是循环语句的入口, 一般为逻辑型,一般为逻辑型, ENDDOENDDO是循环语句的出口,中间是循环语句的出口,中间 是重复执行的循环体;是重复执行的循环体;3.LOOP3.LOOP和和EXITEXIT只能在循环体中使用,是循环跳转和控制语句。其中只能在循环体中使用,是循环跳转和控制语句。其中LOOPLOOP是转到循环的入口语句,是转到循环的入口语句,EXITEXIT是强行退出循环的语句,它们一是强行退出循环的语句,它们一般都放在
5、分支结构中;般都放在分支结构中;4.4.循环结构允许嵌套。这种嵌套不仅限于循环结构自身的嵌套,而且循环结构允许嵌套。这种嵌套不仅限于循环结构自身的嵌套,而且还可以是和选择结构的相互嵌套;还可以是和选择结构的相互嵌套;5.5.循环一般要有退出机制,否则,会形成死循环。循环一般要有退出机制,否则,会形成死循环。总页第5页条件循环流程图条件循环流程图无跳转流程图无跳转流程图跳转及控制流程图跳转及控制流程图总页第6页例:例:编写程序,其功能是循环查找学编写程序,其功能是循环查找学生姓名,并根据用户选择确定是否继生姓名,并根据用户选择确定是否继续查找。续查找。CleaCleause use 学生学生Do
6、 while .t.Do while .t.cleacleatexttext根据姓名查找记录根据姓名查找记录endtextendtext? ?accepaccep 请输入查询学生姓名请输入查询学生姓名: to xm: to xmLocaLoca for for 姓名姓名=xm=xmif found()if found()row()+1,15 say row()+1,15 say 学号学号get get 学号学号row(),30 sayrow(),30 say姓名姓名get get 姓名姓名row()+1,15sayrow()+1,15say性别性别 get get 性别性别row(),30sa
7、yrow(),30say出生日期出生日期get get 出生日期出生日期elseelse?查无查无+xm+xm+姓名姓名!EndifEndifwait wait 是否继续查询是否继续查询?(Y/N) ?(Y/N) to cxto cx window at 20,10 window at 20,10 if uppe(cxif uppe(cx)=Y)=YlooploopelseelseexitexitendifendifenddoenddouseuseSet talk onSet talk onreturnreturn总页第7页二、计数型循环语句二、计数型循环语句计数型循环语句适用于循环次数已知的
8、情况下,它是根据用计数型循环语句适用于循环次数已知的情况下,它是根据用户设置的循环变量的初值、终值和步长来决定循环体的执户设置的循环变量的初值、终值和步长来决定循环体的执行次数。计数型循环语句又称行次数。计数型循环语句又称FORFOR循环语句。循环语句。【格式【格式】 FOR FOR = TO TO STEP STEP LOOP LOOP EXIT EXIT ENDFOR | NEXT ENDFOR | NEXT【功能【功能】通过比较通过比较 与与 来决定是否执行来决定是否执行 。执行。执行FORFOR语句时,首先将循环初值赋给循环变量,语句时,首先将循环初值赋给循环变量,然后将循环变量与循环
9、终值比较,当然后将循环变量与循环终值比较,当 为正数时,若为正数时,若 的值不大于的值不大于 ,执行循环体;当,执行循环体;当 为为负数时,若负数时,若 的值不小于的值不小于 ,执行循环体。,执行循环体。一旦遇到一旦遇到ENDFORENDFOR或或NEXTNEXT语句,语句, 值自动加上值自动加上 ,然后返回到,然后返回到FORFOR语句,重新与语句,重新与 进行比较。直到进行比较。直到循环变量大于或小于循环终值时,结束循环。步长的默认循环变量大于或小于循环终值时,结束循环。步长的默认值为值为1 1。总页第8页【说明【说明】1.1.步长值省略时,系统默认步长值为步长值省略时,系统默认步长值为1
10、 1。当初值小于终值时,。当初值小于终值时,步长值为正值;当初值大于终值时,步长值为负值。步步长值为正值;当初值大于终值时,步长值为负值。步长值不能为长值不能为0 0,否则造成死循环;,否则造成死循环;2.2.在循环体内不要随便改变循环变量的值,否则会引起循在循环体内不要随便改变循环变量的值,否则会引起循环次数发生改变;环次数发生改变;3.LOOP3.LOOP和和EXITEXIT命令的功能和用法与条件循环中该命令命令的功能和用法与条件循环中该命令的用法相同。的用法相同。 总页第9页计数循环流程图计数循环流程图总页第10页例:例:编写程序,其功能是用计编写程序,其功能是用计数循环统计学生表中入校
11、总分数循环统计学生表中入校总分在在570570分以上的学生人数。分以上的学生人数。CleaCleaSet talk offSet talk offuse use 学生学生coun to zrscoun to zrsrsrs=0=0list for list for 入校总分入校总分=570=570go topgo topfor i=1 to zrsfor i=1 to zrsif if 入校总分入校总分=570=570rsrs=rs+1=rs+1endifendifskipskipendforendfor?入校总分不低于入校总分不低于570570的学的学生人数是:生人数是:,rs,rsuseu
12、seset talk onset talk onreturetu总页第11页三、指针型循环语句三、指针型循环语句指针型循环语句是在数据表中建立的循环,它是根据用户在指针型循环语句是在数据表中建立的循环,它是根据用户在表中设置的当前记录指针来对一组记录进行的循环操作,表中设置的当前记录指针来对一组记录进行的循环操作,是是Visual FoxProVisual FoxPro中特有的一种循环语句。中特有的一种循环语句。【格式【格式】SCAN SCAN FOR FOR WHILE WHILE 2 LOOP LOOP EXIT EXIT ENDSCAN ENDSCAN【功能【功能】针对当前表进行循环操作
13、,用记录指针控制循环次针对当前表进行循环操作,用记录指针控制循环次数。在指定的数。在指定的 中依次寻找满足中依次寻找满足 FORFOR条件或条件或 WHILE WHILE 条件的记录,并对找到的记录执行条件的记录,并对找到的记录执行 中的命令。中的命令。总页第12页【说明【说明】1.SCANENDSCAN1.SCANENDSCAN循环语句中隐含函数循环语句中隐含函数EOF()EOF()和命令和命令SKIPSKIP的的处理;处理;2.2.执行执行SCAN语句时,首先判断函数语句时,首先判断函数EOF() 的值,若为的值,若为“真真”,则结束循环,执行,则结束循环,执行ENDSCAN后面的语句;否
14、则,后面的语句;否则,结合结合或或,记录指针移到指,记录指针移到指定的范围和条件内的第一条记录,定的范围和条件内的第一条记录,执行执行 中的中的命令;命令;3.3.执行执行ENDSCANENDSCAN时,记录指针自动移到下一条记录,转到时,记录指针自动移到下一条记录,转到SCANSCAN重新判断,直到重新判断,直到EOF()EOF()函数值为真或到指定范围末尾函数值为真或到指定范围末尾, ,退出循环退出循环, ,执行执行ENDSCAN后面的语句后面的语句;3.3.无无 选项时,则表示对所有记录进行处理;选项时,则表示对所有记录进行处理;4.LOOP4.LOOP和和EXITEXIT命令的功能和用
15、法与条件循环中该命令的命令的功能和用法与条件循环中该命令的用法相同。用法相同。总页第13页指针循环流程图指针循环流程图总页第14页例:例:编写程序,其功能是编写程序,其功能是用指针循环统计学生表中用指针循环统计学生表中入校总分在入校总分在570570分以上的学分以上的学生人数。生人数。CleaCleaSet talk offSet talk offuse use 学生学生list for list for 入校总分入校总分=570=570rsrs=0=0scan for scan for 入校总分入校总分=570=570rsrs=rs+1=rs+1endscanendscan?入校总分不低于入
16、校总分不低于570570的学的学生人数是:生人数是:,rs,rsuseuseset talk onset talk onreturetu总页第15页四、多重循环四、多重循环多重循环是指在一个循环语句内又包含另一个循环语句,多重循环是指在一个循环语句内又包含另一个循环语句,多重循环也称为循环嵌套。下面以条件循环为例,进行多重循环也称为循环嵌套。下面以条件循环为例,进行说明。说明。【格式【格式】 DO WHILE DO WHILE 1 11DO WHILE DO WHILE 2 21 ENDDO ENDDO 12ENDDOENDDO总页第16页【功能【功能】 在多重循环中,首先从外循环进入内循环,
17、执行在多重循环中,首先从外循环进入内循环,执行内循环的语句。当内循环的条件为假时,返回到外循环内循环的语句。当内循环的条件为假时,返回到外循环;当外循环的条件为真时,又进入内循环;否则,退出;当外循环的条件为真时,又进入内循环;否则,退出循环。循环。 【说明【说明】1.1.循环嵌套层次不限,但内循环的所有语句必须完全嵌套循环嵌套层次不限,但内循环的所有语句必须完全嵌套在外层循环之中。否则,就会出现循环的交叉,造成逻在外层循环之中。否则,就会出现循环的交叉,造成逻辑上的混乱;辑上的混乱;2.2.循环结构和分支结构允许混合嵌套使用,但不允许交叉。循环结构和分支结构允许混合嵌套使用,但不允许交叉。其
18、入口语句和相应的出口语句必须成对出现。其入口语句和相应的出口语句必须成对出现。总页第17页例例: : 编写程序,其功能是使用多重循环打印一个九九乘法口诀表。编写程序,其功能是使用多重循环打印一个九九乘法口诀表。SET TALK OFFSET TALK OFFCLEARCLEARFOR I=1 TO 9 &IFOR I=1 TO 9 &I循环为外层,共循环九次,控制循环为外层,共循环九次,控制“九九表九九表”的行的行 FOR j=1 TO I &JFOR j=1 TO I &J循环为内层,共循环循环为内层,共循环4545次(次(I I从从1 1到到9 9), ,控
19、制列控制列 ? SPACE(2) +STR(j,1)+? SPACE(2) +STR(j,1)+STR(I,1)+=+STR(I+STR(I,1)+=+STR(I* *J,2)+SPACE(2) &?J,2)+SPACE(2) &?输输出不换行出不换行 ENDFORENDFOR? ? & &每输出九九表一行要换行每输出九九表一行要换行 ENDFORENDFORSET TALK ONSET TALK ON RETURN RETURN思考:如果改用条件循环,程序应作如何修改?思考:如果改用条件循环,程序应作如何修改?总页第18页相关概念相关概念模块化是结构化程序的重
20、要原则,所谓模块化就是模块化是结构化程序的重要原则,所谓模块化就是把大程序按照功能分为较小的程序,具有一定功能的每把大程序按照功能分为较小的程序,具有一定功能的每个小程序即为模块。一般来讲,一个程序是由一个主控个小程序即为模块。一般来讲,一个程序是由一个主控模块和若干子模块组成的,主控模块用来完成某些公用模块和若干子模块组成的,主控模块用来完成某些公用操作及功能选择,而子模块用来完成某项特定的功能。操作及功能选择,而子模块用来完成某项特定的功能。这种设计风格便于分工合作,将一个庞大的模块这种设计风格便于分工合作,将一个庞大的模块分解为若干个子模块分别完成,然后用主控模块调用子分解为若干个子模块
21、分别完成,然后用主控模块调用子模块。这种程序的模块化结构如下图所示。模块。这种程序的模块化结构如下图所示。结构化程序的设计过程就是将问题求解由抽象逐结构化程序的设计过程就是将问题求解由抽象逐步具体化的过程。这种方法符合人们解决复杂问题遵循步具体化的过程。这种方法符合人们解决复杂问题遵循的普遍规律,可以显著提高程序设计的效率。的普遍规律,可以显著提高程序设计的效率。 8.4 多模块程序设计多模块程序设计 总页第19页程序的模块化结构程序的模块化结构 总页第20页总39页第20页 在编制程序时,经常会遇到有些运算或某段程序在在编制程序时,经常会遇到有些运算或某段程序在程序运行中被多次调用的情况,为
22、了有效解决上述重复程序运行中被多次调用的情况,为了有效解决上述重复调用,有必要设计相对独立并能完成特定功能的程序段,调用,有必要设计相对独立并能完成特定功能的程序段,这种程序段称为这种程序段称为子程序子程序( (该程序段单独保存为一个程序文该程序段单独保存为一个程序文件件) )或或过程过程( (该程序段附在调用程序末尾或放在过程文件该程序段附在调用程序末尾或放在过程文件中中) )。调用子程序的程序称为。调用子程序的程序称为调用程序调用程序。对于一个子程序。对于一个子程序来说,除了被调用以外,还可以调用其他子程序来说,除了被调用以外,还可以调用其他子程序( (子程序子程序的嵌套调用的嵌套调用)
23、)。此时,该子程序便成为其被调用程序的调。此时,该子程序便成为其被调用程序的调用程序。在一个应用系统中,处于最高层次的调用程序用程序。在一个应用系统中,处于最高层次的调用程序称为称为主程序主程序。总页第21页总39页第21页 在应用系统的开发中,一般会根据实际的需要将整个系在应用系统的开发中,一般会根据实际的需要将整个系统划分成若干个模块,然后在主控模块的控制下,调用各个统划分成若干个模块,然后在主控模块的控制下,调用各个功能模块以实现系统的各种功能操作,通常将这些可调用的功能模块以实现系统的各种功能操作,通常将这些可调用的功能模块也设计成过程或子程序。功能模块也设计成过程或子程序。特点:特点
24、:(1)(1)过程或子程序一般不单独运行,而是通过上级程序调用过程或子程序一般不单独运行,而是通过上级程序调用; ;(2)(2)过程可以附在调用程序的末尾过程可以附在调用程序的末尾, ,也可以放在单独的文件中也可以放在单独的文件中(过程文件)(过程文件); ;(3)(3)子程序可以嵌套调用。子程序可以嵌套调用。总页第22页总39页第22页8.4.1 8.4.1 子程序子程序1 1子程序的建立子程序的建立 子程序作为一个独立程序,与其他程序一样可以用子程序作为一个独立程序,与其他程序一样可以用MODIFY COMMANDMODIFY COMMAND命令、菜单或项目管理器等多种方法建立和命令、菜单
25、或项目管理器等多种方法建立和调试,也是以程序文件名调试,也是以程序文件名.PRG.PRG的形式独立存盘。的形式独立存盘。总页第23页总39页第23页2 2子程序的调用子程序的调用子程序的调用是通过调用语句实现的。子程序的调用是通过调用语句实现的。【格式【格式】DO DO 或或 ( )( )【功能【功能】执行执行DODO调用命令时,将指定的子程序调入内存并执行,调用命令时,将指定的子程序调入内存并执行,当执行到当执行到RETURNRETURN命令时,返回到该命令指定位置。命令时,返回到该命令指定位置。【说明【说明】调用程序可以调用任何子程序。子程序还可以调用下一调用程序可以调用任何子程序。子程序
26、还可以调用下一级子程序,但子程序不能调用自己上层的调用程序。子程序级子程序,但子程序不能调用自己上层的调用程序。子程序可以返回到调用它的调用程序中,也可以直接返回到主程序可以返回到调用它的调用程序中,也可以直接返回到主程序中。中。总页第24页总39页第24页子程序调用子程序调用嵌套调用嵌套调用总页第25页总39页第25页3 3子程序的返回子程序的返回 子程序执行后,可以采用下面语句返回到调用程序。子程序执行后,可以采用下面语句返回到调用程序。【格式【格式】RETURN RETURN |TO |TO |TO |TO MASTERMASTER【功能【功能】该语句终止子程序执行,返回到调用程序中调该
27、语句终止子程序执行,返回到调用程序中调用语句的下一个语句执行用语句的下一个语句执行( (或到指定位置或到指定位置) )。如无调用。如无调用程序,则返回命令窗口。程序,则返回命令窗口。总页第26页总39页第26页【说明【说明】(1 1)子程序的一个重要标志是:以)子程序的一个重要标志是:以RETURNRETURN语句作为结束语句,语句作为结束语句,而一般在主程序和无上一级调用程序的程序尾部用而一般在主程序和无上一级调用程序的程序尾部用CANCELCANCEL语语句作为结束语句;句作为结束语句;(2 2)在返回语句中,若选择可选项在返回语句中,若选择可选项 ,将表达式的值,将表达式的值返回给调用程
28、序。选择可选项返回给调用程序。选择可选项TOTO,可直接返,可直接返回指定的程序文件。选择可选项回指定的程序文件。选择可选项TO MASTERTO MASTER,则不论前面,则不论前面有多少级调用而直接返回到主程序。有多少级调用而直接返回到主程序。总页第27页总39页第27页8.4.2 8.4.2 过程及过程文件过程及过程文件把多个子程序合并成一个大的文件,在该文件中,每把多个子程序合并成一个大的文件,在该文件中,每个子程序仍然是独立的,这个大的公用程序文件被称作个子程序仍然是独立的,这个大的公用程序文件被称作过过程文件程文件。其中的每个子程序模块称为过程。在系统执行过。其中的每个子程序模块称
29、为过程。在系统执行过程中,只需打开相应的过程文件即可调用其中的多个过程,程中,只需打开相应的过程文件即可调用其中的多个过程,从而大大减少了访问磁盘的次数,可提高程序运行效率。从而大大减少了访问磁盘的次数,可提高程序运行效率。过程文件的扩展名仍然是过程文件的扩展名仍然是.PRG.PRG。【格式【格式】PROCEDURE PROCEDURE PARAMETERS PARAMETERS RETURN RETURN ENDPROC ENDPROC总页第28页总39页第28页1 1过程定义过程定义【命令【命令】 MODIFY COMMAND MODIFY COMMAND 过程文件的基本书写格式:过程文件
30、的基本书写格式:PROCEDURE PROCEDURE 1 1RETURNRETURNENDPROCENDPROCPROCEDURE PROCEDURE N NRETURNRETURNENDPROCENDPROC总页第29页总39页第29页【功能【功能】建立过程。建立过程。【说明【说明】过程名和过程文件名是两个不同的概念,过程名和过程文件名是两个不同的概念,每个过程是具有独立功能的一段程序,过程名是一每个过程是具有独立功能的一段程序,过程名是一个没有扩展名的过程名称。一个过程文件可以由一个没有扩展名的过程名称。一个过程文件可以由一个或多个过程构成,个或多个过程构成,扩展名是扩展名是.PRG.P
31、RG。在在PROCEDURE与与ENDPROC之间如果使用之间如果使用RETURN命令,可以返回到上一层程序。命令,可以返回到上一层程序。2调用(执行)过程调用(执行)过程【格式【格式】DO 【功能【功能】用于调用用于调用指定的过程。指定的过程。总页第30页总39页第30页3 3过程文件的打开和关闭过程文件的打开和关闭 调用过程时,首先打开包含被调用过程的过程文件。调用过程时,首先打开包含被调用过程的过程文件。过程文件使用后需要及时关闭。过程文件使用后需要及时关闭。(1 1)打开过程文件)打开过程文件【命令【命令】 SET PROCEDURE TO SET PROCEDURE TO 【功能【功
32、能】 打开指定的过程文件,将过程文件中所包含打开指定的过程文件,将过程文件中所包含的过程全部调入内存。的过程全部调入内存。【说明【说明】 系统在同一时刻只能打开一个过程文件,打系统在同一时刻只能打开一个过程文件,打开新过程文件的同时将关闭原来打开的过程文件。若开新过程文件的同时将关闭原来打开的过程文件。若要修改过程文件的内容,一定要先关闭该过程文件。要修改过程文件的内容,一定要先关闭该过程文件。(2 2)关闭过程文件)关闭过程文件【命令【命令】 CLOSE PROCEDURECLOSE PROCEDURE 或或 SET PROCEDURE TOSET PROCEDURE TO【功能【功能】 关
33、闭已打开的过程文件。关闭已打开的过程文件。总页第31页总39页第31页8.4.3 8.4.3 内存变量的作用域及带参数调用子程序内存变量的作用域及带参数调用子程序1 1内存变量作用域内存变量作用域 在程序设计中,特别是模块程序中,往往会用到许在程序设计中,特别是模块程序中,往往会用到许多内存变量,这些内存变量有的在整个程序运行过程中多内存变量,这些内存变量有的在整个程序运行过程中起作用,而有的仅在某些程序模块中起作用,内存变量起作用,而有的仅在某些程序模块中起作用,内存变量的这些作用范围称为内存变量的这些作用范围称为内存变量作用域作用域。内存变量的作用。内存变量的作用域根据作用范围可以分为三类
34、:域根据作用范围可以分为三类:全局变量全局变量、局部变量局部变量和和本地变量本地变量。2.2.内存变量的一般性质内存变量的一般性质在多模块程序设计中在多模块程序设计中, ,不同的程序块分为主程序、调用程不同的程序块分为主程序、调用程序、子程序,程序调用时有上下级关系,在不同的程序序、子程序,程序调用时有上下级关系,在不同的程序中的变量有其一般如下性质:中的变量有其一般如下性质:(1)(1)上级程序生成的变量,调用的下级程序可以使用,反之上级程序生成的变量,调用的下级程序可以使用,反之下级程序生成的变量,在上级程序中不可使用。下级程序生成的变量,在上级程序中不可使用。(2)(2)上级程序中已有的
35、变量,如果在下级程序中未重新定义,上级程序中已有的变量,如果在下级程序中未重新定义,则返回上级程序时,保留下级程序重新赋的值。则返回上级程序时,保留下级程序重新赋的值。总页第32页总39页第32页3 3全局变量全局变量 全局变量又称为公共变量,在程序运行中,上下各级全局变量又称为公共变量,在程序运行中,上下各级程序或任何程序模块中都可以使用该内存变量。当程序执程序或任何程序模块中都可以使用该内存变量。当程序执行完毕,回到命令窗后,其值仍然保存。行完毕,回到命令窗后,其值仍然保存。【格式【格式】PUBLIC PUBLIC 【功能【功能】将将 中指定的变量定义为全局内存变量。中指定的变量定义为全局
36、内存变量。总页第33页总39页第33页【说明【说明】(1 1)用)用PUBLICPUBLIC语句定义的内存变量系统设置初值为逻辑型语句定义的内存变量系统设置初值为逻辑型.F.F.;(2 2)一个)一个PUBLICPUBLIC语句可以定义多个内存变量,可以是简单变量,也可语句可以定义多个内存变量,可以是简单变量,也可以是下标变量,每个内存变量之间均用以是下标变量,每个内存变量之间均用“,”隔开;隔开;(3 3)全局变量必须先定义后赋值,故称为建立全局型变量;)全局变量必须先定义后赋值,故称为建立全局型变量;(4 4)在程序中已被定义成全局变量的变量也可以在下一级程序中进一)在程序中已被定义成全局
37、变量的变量也可以在下一级程序中进一步定义成局部变量;但已定义成局部变量的,却不可反过来再定义成步定义成局部变量;但已定义成局部变量的,却不可反过来再定义成全局变量;全局变量;(5 5)若下层模块中建立的内存变量要供上层模块使用,或某模块中建)若下层模块中建立的内存变量要供上层模块使用,或某模块中建立的内存变量要供并列模块使用,必须将这种变量设置成全局变量立的内存变量要供并列模块使用,必须将这种变量设置成全局变量; ;(6 6)在)在Visual FoxProVisual FoxPro的命令窗口中所定义的内存变量,系统默认为的命令窗口中所定义的内存变量,系统默认为是全局变量是全局变量, ,但不能
38、在程序方式下利用但不能在程序方式下利用 ;(7 7)由于全局变量的作用范围为整个系统,当程序执行完毕后,全局)由于全局变量的作用范围为整个系统,当程序执行完毕后,全局变量仍占用内存,不会自动被清除。因此,不再使用全局变量时,可变量仍占用内存,不会自动被清除。因此,不再使用全局变量时,可以使用下列语句清除:以使用下列语句清除:RELEASE RELEASE 、CLEAR ALLCLEAR ALL总页第34页总39页第34页4 4局部变量局部变量 局部变量又称私有变量。在局部变量又称私有变量。在Visual FoxProVisual FoxPro的程序中,的程序中,未加未加PUBLICPUBLIC
39、语句定义的内存变量,系统默认为局部变量,局语句定义的内存变量,系统默认为局部变量,局部变量的作用域限制在定义它的程序和被该程度所调用的下部变量的作用域限制在定义它的程序和被该程度所调用的下级程序过程中,一旦定义它的程序运行完毕,局部变量将从级程序过程中,一旦定义它的程序运行完毕,局部变量将从内存中自动被清除。内存中自动被清除。【格式【格式】PRIVATE PRIVATE 内存变量表内存变量表ALLLIKE|EXCEPTALLLIKE|EXCEPT【功能【功能】声明局部变量并隐藏上级程序中的同名内存变量。将声明局部变量并隐藏上级程序中的同名内存变量。将 中所列的内存变量定义为本级程序和下一级程中
40、所列的内存变量定义为本级程序和下一级程序中专用的局部变量。序中专用的局部变量。总页第35页总39页第35页【说明【说明】(1 1)在同一过程中,用隐式或显式定义的局部变量的)在同一过程中,用隐式或显式定义的局部变量的作用域完全相同。在主程序或上级过程中未经作用域完全相同。在主程序或上级过程中未经PRIVATEPRIVATE语句定义的局部变量,在下级过程中也未经显式定义,语句定义的局部变量,在下级过程中也未经显式定义,那么它的新值可以带回主程序或上级过程;若在下级那么它的新值可以带回主程序或上级过程;若在下级过程中进行了显式定义,其新值不能带回主程序或上过程中进行了显式定义,其新值不能带回主程序
41、或上级过程中使用;级过程中使用;(2 2)用)用PRIVATEPRIVATE定义的局部变量只对本级程序及下级定义的局部变量只对本级程序及下级子程序有效,当返回上级程序时,这种局部型变量便子程序有效,当返回上级程序时,这种局部型变量便自动被消除;自动被消除;(3 3)当下级程序或过程中显式定义了与上级程序中同)当下级程序或过程中显式定义了与上级程序中同名的局部变量时,上级程序中的名的局部变量时,上级程序中的 同名变量将被隐藏起同名变量将被隐藏起来,一旦含有来,一旦含有PRIVATEPRIVATE的内存变量程序运行完毕,上级的内存变量程序运行完毕,上级程序被隐藏的同变量自行恢复原来的状态;程序被隐
42、藏的同变量自行恢复原来的状态;总页第36页总39页第36页(4 4)用用PRIVATE定义的内存变量仅指明变量的类型,定义的内存变量仅指明变量的类型,没有赋初值;没有赋初值;(5 5)PRIVATE ALL:表示将所有位于本级程序中的内:表示将所有位于本级程序中的内存变量定义为局部型量;存变量定义为局部型量;(6 6)PRIVATE ALL LIKE :将位于本级程序:将位于本级程序中符合中符合的变量定义为局部型变量;的变量定义为局部型变量;(7 7)PRIVATE ALL EXCEPT :将位于本级程:将位于本级程序中不符合序中不符合的变量定义为局部型变量。的变量定义为局部型变量。总页第37
43、页总39页第37页5 5本地变量本地变量 本地变量只能在定义它的程序中使用,一旦定义它本地变量只能在定义它的程序中使用,一旦定义它的程序运行完毕,本地变量将从内存中释放。的程序运行完毕,本地变量将从内存中释放。【格式【格式】LOCAL LOCAL 【功能【功能】将将 中指定的变量定义为本地变量。中指定的变量定义为本地变量。【说明【说明】(1 1)用)用LOCALLOCAL定义的本地变量,系统自动将其初值赋以定义的本地变量,系统自动将其初值赋以逻辑型逻辑型.F.F.;(2 2)LOCALLOCAL与与LOCATELOCATE前前4 4个字母相同,故不可缩写。本地个字母相同,故不可缩写。本地型内存
44、变量只能在定义它的程序中使用,不能在上级或型内存变量只能在定义它的程序中使用,不能在上级或下级的调用程序中使用。下级的调用程序中使用。总页第38页总39页第38页例:例:建立一个程序,内容是子程序的嵌套调用及在过程调用建立一个程序,内容是子程序的嵌套调用及在过程调用中查看变量值的变化。中查看变量值的变化。程序如下:程序如下: * *主程序主程序GCCS.PRGGCCS.PRG SET TALK OFF SET TALK OFF CLEAR CLEAR PUBLIC X,Z PUBLIC X,Z X=1 X=1 Y=1 Y=1 Z=1 Z=1 DO SUB1 DO SUB1 ?“SUB1 ?“S
45、UB1结束后结束后:”:” ? MAIN-X=,X ? MAIN-X=,X ? MAIN-Y=,Y ? MAIN-Y=,Y WAIT WAIT DO SUB2 DO SUB2 ?“SUB2 ?“SUB2结束后结束后:”:” ? MAIN-Z=,Z ? MAIN-Z=,Z RETURN RETURNPROCEDURE SUB1 X=X+1 Y=Y*X RETURN &过程 SUB1结束PROCEDURE SUB2 PRIVATE Z Z=4 X=Z+2DO SUB3 ?“SUB2中中” ? SUB2-X=,XWAITRETURN &过程SUB2结束PROCEDURE SUB3LO
46、CAL X X=4Z=Z+3 ?”SUB3中中” ? SUB3-X=,X? SUB3-Z=,ZWAITRETURN&过程过程SUB3结束结束总页第39页总39页第39页6. 6. 子程序或过程的带参调用子程序或过程的带参调用 在调用过程时,有时需要将数据传递到被调用过程,在调用过程时,有时需要将数据传递到被调用过程,有时又需要从被调用过程将数据返回,实现数据相互传有时又需要从被调用过程将数据返回,实现数据相互传递。递。Visual FoxProVisual FoxPro为此提供了过程的带参调用方法。为此提供了过程的带参调用方法。 在调用过程的命令和被调用过程的相关语句中,分在调用过程的
47、命令和被调用过程的相关语句中,分别设置数量相同、数据类型一致且排列顺序相互对应的别设置数量相同、数据类型一致且排列顺序相互对应的参数表。调用过程的命令将一系列参数的值传递给被调参数表。调用过程的命令将一系列参数的值传递给被调用过程中的对应参数,被调用过程运行结束时,再将参用过程中的对应参数,被调用过程运行结束时,再将参数的值返回到调用它的上一级过程或主程序中。数的值返回到调用它的上一级过程或主程序中。总页第40页总39页第40页(1)(1)带参调用带参调用【命令【命令】 DO DO WITH WITH 【功能【功能】 调用指定过程,并为被调用过程提供参数。调用指定过程,并为被调用过程提供参数。
48、【说明【说明】 该命令只用在调用过程的程序中。此处该命令只用在调用过程的程序中。此处 又称为实参表,其中的参数可以是常量、已赋值的变量又称为实参表,其中的参数可以是常量、已赋值的变量或数值表达式,参数之间用逗号分开。或数值表达式,参数之间用逗号分开。总页第41页总39页第41页(2)(2)接受参数接受参数【命令【命令】 PARAMETERS PARAMETERS 【功能【功能】 接受调用过程的命令传递过来的参数。接受调用过程的命令传递过来的参数。【说明【说明】 该命令必须位于被调用过程的第一条可执行语句该命令必须位于被调用过程的第一条可执行语句处。此处处。此处 又称为形参表,其中的参数一般为内
49、又称为形参表,其中的参数一般为内存变量。形参与实参的个数应相等、数据类型和个数要存变量。形参与实参的个数应相等、数据类型和个数要对应相同。对应相同。总页第42页总39页第42页(3) (3) 参数的传递形式参数的传递形式 在在VF VF 的过程及自定义函数中都涉及参数传递。参数的的过程及自定义函数中都涉及参数传递。参数的传递形式分为传递形式分为值参数传递值参数传递和和引用参数传递引用参数传递( (传地址传地址) )。值参数传递值参数传递: : 在调用过程或自定义函数时在调用过程或自定义函数时, , 先计算出实先计算出实参的值参的值, , 并将其按位置对应关系传递给形式参数变量并将其按位置对应关
50、系传递给形式参数变量, , 形式形式参数变量值的改变不影响实际参数;参数变量值的改变不影响实际参数;引用参数传递引用参数传递: : 在调用过程或自定义函数时在调用过程或自定义函数时, , 将实际参将实际参数的地址传递给形式参数数的地址传递给形式参数, , 形式参数值的改变会影响实际参形式参数值的改变会影响实际参数。数。总页第43页总39页第43页在过程调用中的参数传递方式在过程调用中的参数传递方式: : VF VF 中的过程在调用时中的过程在调用时: : 当实参是常数、当实参是常数、( (变量变量) )或表达式时或表达式时, , 实参传递给形参属于值传实参传递给形参属于值传递递; ;当实参是变
51、量时当实参是变量时, , 实参传递给形参属于引用实参传递给形参属于引用传递。传递。总页第44页总39页第44页例例: :cleacleacleaclea all allset talk offset talk offx=5x=5y=10y=10?主程序未调用过程时变量的值主程序未调用过程时变量的值:?X=+str(X,2),Y=+str(Y,2)?X=+str(X,2),Y=+str(Y,2)do sub with x,(ydo sub with x,(y) )?主程序调用过程后变量的值主程序调用过程后变量的值:?X=+str(X,2),Y=+str(Y,2)?X=+str(X,2),Y=+s
52、tr(Y,2)set talk onset talk onreturnreturnprocedure subprocedure subparameters a,bparameters a,ba=a+5a=a+5b=b+10b=b+10?过程中变量的值过程中变量的值:?A=+str(a,2),B=+str(b,2)?A=+str(a,2),B=+str(b,2)returnreturn总页第45页总39页第45页8.4.4 8.4.4 自定义函数自定义函数Visual FoxProVisual FoxPro除了提供许多系统函数外,也允许用户自定除了提供许多系统函数外,也允许用户自定义函数(义函数(User Defined FuntionUser Defined Funtion),简称),简称UDFUDF。自定义。自定义函数既可以放在主程序中,只对主程序有效,也可以作函数既可以放在主程序中,只对主程序有效,也可以作为独立文件保存,其扩展名为为独立文件保存,其扩展名为. . PRG。在。在Visual FoxProVisual FoxPro中中UDFUDF可以分为:独立可以分为:独立UDFUDF和依附和依附UDFUDF。1 1独立独立UDFUDF独立自定义函数和子程序的区别在于自定义函数必须有返独立自定义函数和子程序的区别在于自定义函
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 抖音平台团购活动资源整合与推广代运营服务合同
- 企业员工招聘与选拔流程优化合同
- 绿色建筑节能改造示范项目合同
- 房产增值收益调整与分配变更租赁管理服务合同
- 机床维修保养与智能化升级服务合同
- 影视作品音乐版权授权与版权保护及合作开发及收益分成及广告合作及维权合同
- 国际投行驻华分析师岗位聘用合同
- 人力资源信息系统建设与维护咨询合同
- 纺织供销合作协议合同
- 美容院合伙协议书合同
- 药事管理与法规智慧树知到答案2024年石河子卫生学校
- 人工智能训练师理论知识考核要素细目表五级
- 2024年贵州省中考理科综合试卷(含答案)
- 110kV变电站专项电气试验及调试方案
- DL-T901-2017火力发电厂烟囱(烟道)防腐蚀材料
- 篮球智慧树知到期末考试答案章节答案2024年浙江大学
- GB/T 3428-2024架空导线用镀锌钢线
- ISO 15609-1 金属材料焊接工艺规程及评定-焊接工艺规范中文版
- MOOC 英语语法与写作-暨南大学 中国大学慕课答案
- 2024年山东省济南市历下区中考二模地理试题
- 电子书 -《商业的底层逻辑》
评论
0/150
提交评论