第8章程序设计基础2.ppt_第1页
第8章程序设计基础2.ppt_第2页
第8章程序设计基础2.ppt_第3页
第8章程序设计基础2.ppt_第4页
第8章程序设计基础2.ppt_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Visual Foxpro程序设计第8章程序设计基础,本章主要内容 8.1 程序设计的基本概念与步骤 8.2 程序中的常用命令 8.3 程序控制结构 8.4 多模块程序设计,8.3.3 循环结构程序设计,在程序设计中,经常需要对某一个程序段(即一条或多条命令)反复执行,这种程序结构称为循环结构。 循环结构的特点是:当给出的循环条件为真时,反复执行一组命令,这组被重复执行的命令序列称为循环体。当循环条件为假时,则终止循环体的执行。循环结构也就是由循环条件控制循环体是否重复执行的一种语句结构,它可以简化程序,提高程序效率。常用的循环语句有以下几种形式: 条件型循环:DO WHILEENDDO 计数

2、型循环:FORTOENDFOR 扫描型循环:SCANENDSCAN,一、条件循环 条件循环是根据条件表达式的值,决定循环体内语句的执行次数,也称为当型循环。一般用于未知循环次数的循环。 【格式】DO WHILE LOOP EXIT ENDDO 【功能】 语句执行时,先判断的值,若为真,则执行循环体内的命令,即DO 与ENDDO之间的命令;若为假,则执行ENDDO后面的命令。,【说明】 1.DO WHILE 和ENDDO要配对使用; 2.DO WHILE 是循环语句的入口, 一般为逻辑型, ENDDO是循环语句的出口,中间是重复执行的循环体; 3.LOOP和EXIT只能在循环体中使用,是循环跳转

3、和控制语句。其中LOOP是转到循环的入口语句,EXIT是强行退出循环的语句,它们一般都放在分支结构中; 4.循环结构允许嵌套。这种嵌套不仅限于循环结构自身的嵌套,而且还可以是和选择结构的相互嵌套; 5.循环一般要有退出机制,否则,会形成死循环。,条件循环流程图,无跳转流程图,跳转及控制流程图,例:编写程序,其功能是循环查找学生姓名,并根据用户选择确定是否继续查找。 Clea use 学生 Do while .t. clea text 根据姓名查找记录 endtext ? accep请输入查询学生姓名: to xm Loca for 姓名=xm if found() row()+1,15 say

4、 学号get 学号 row(),30 say姓名get 姓名 row()+1,15say性别 get 性别 row(),30say出生日期get 出生日期,else ?查无+xm+姓名! Endif wait 是否继续查询?(Y/N) to cx window at 20,10 if uppe(cx)=Y loop else exit endif enddo use Set talk on return,二、计数型循环语句 计数型循环语句适用于循环次数已知的情况下,它是根据用户设置的循环变量的初值、终值和步长来决定循环体的执行次数。计数型循环语句又称FOR循环语句。 【格式】 FOR = TO

5、 STEP LOOP EXIT ENDFOR | NEXT 【功能】通过比较与来决定是否执行。执行FOR语句时,首先将循环初值赋给循环变量,然后将循环变量与循环终值比较,当为正数时,若的值不大于,执行循环体;当为负数时,若的值不小于,执行循环体。一旦遇到ENDFOR或NEXT语句,值自动加上,然后返回到FOR语句,重新与进行比较。直到循环变量大于或小于循环终值时,结束循环。步长的默认值为1。,【说明】 1.步长值省略时,系统默认步长值为1。当初值小于终值时,步长值为正值;当初值大于终值时,步长值为负值。步长值不能为0,否则造成死循环; 2.在循环体内不要随便改变循环变量的值,否则会引起循环次数

6、发生改变; 3.LOOP和EXIT命令的功能和用法与条件循环中该命令的用法相同。,计数循环流程图,例:编写程序,其功能是用计数循环统计学生表中入校总分在570分以上的学生人数。 Clea Set talk off use 学生 coun to zrs rs=0 list for 入校总分=570 go top,for i=1 to zrs if 入校总分=570 rs=rs+1 endif skip endfor ?入校总分不低于570的学生人数是:,rs use set talk on retu,三、指针型循环语句 指针型循环语句是在数据表中建立的循环,它是根据用户在表中设置的当前记录指针来

7、对一组记录进行的循环操作,是Visual FoxPro中特有的一种循环语句。 【格式】SCAN FOR WHILE LOOP EXIT ENDSCAN 【功能】针对当前表进行循环操作,用记录指针控制循环次数。在指定的中依次寻找满足 FOR条件或 WHILE 条件的记录,并对找到的记录执行中的命令。,【说明】 1.SCANENDSCAN循环语句中隐含函数EOF()和命令SKIP的处理; 2.执行SCAN语句时,首先判断函数EOF() 的值,若为“真”,则结束循环,执行ENDSCAN后面的语句;否则,结合或,记录指针移到指定的范围和条件内的第一条记录,执行中的命令; 3.执行ENDSCAN时,记录

8、指针自动移到下一条记录,转到SCAN重新判断,直到EOF()函数值为真或到指定范围末尾,退出循环,执行ENDSCAN后面的语句; 3.无选项时,则表示对所有记录进行处理; 4.LOOP和EXIT命令的功能和用法与条件循环中该命令的用法相同。,指针循环流程图,例:编写程序,其功能是用指针循环统计学生表中入校总分在570分以上的学生人数。 Clea Set talk off use 学生 list for 入校总分=570 rs=0 scan for 入校总分=570 rs=rs+1 endscan,?入校总分不低于570的学生人数是:,rs use set talk on retu,四、多重循环

9、 多重循环是指在一个循环语句内又包含另一个循环语句,多重循环也称为循环嵌套。下面以条件循环为例,进行说明。 【格式】 DO WHILE DO WHILE ENDDO ENDDO,【功能】 在多重循环中,首先从外循环进入内循环,执行内循环的语句。当内循环的条件为假时,返回到外循环;当外循环的条件为真时,又进入内循环;否则,退出循环。 【说明】 1.循环嵌套层次不限,但内循环的所有语句必须完全嵌套在外层循环之中。否则,就会出现循环的交叉,造成逻辑上的混乱; 2.循环结构和分支结构允许混合嵌套使用,但不允许交叉。其入口语句和相应的出口语句必须成对出现。,例: 编写程序,其功能是使用多重循环打印一个九

10、九乘法口诀表。 SET TALK OFF CLEAR FOR I=1 TO 9 (2)过程可以附在调用程序的末尾,也可以放在单独的文件中(过程文件); (3)子程序可以嵌套调用。,总39页第22页,8.4.1 子程序 1子程序的建立 子程序作为一个独立程序,与其他程序一样可以用MODIFY COMMAND命令、菜单或项目管理器等多种方法建立和调试,也是以程序文件名.PRG的形式独立存盘。,总39页第23页,2子程序的调用 子程序的调用是通过调用语句实现的。 【格式】DO 或( ) 【功能】执行DO调用命令时,将指定的子程序调入内存并执行,当执行到RETURN命令时,返回到该命令指定位置。 【说

11、明】 调用程序可以调用任何子程序。子程序还可以调用下一级子程序,但子程序不能调用自己上层的调用程序。子程序可以返回到调用它的调用程序中,也可以直接返回到主程序中。,总39页第24页,子程序调用,嵌套调用,总39页第25页,3子程序的返回 子程序执行后,可以采用下面语句返回到调用程序。 【格式】RETURN |TO |TO MASTER 【功能】该语句终止子程序执行,返回到调用程序中调用语句的下一个语句执行(或到指定位置)。如无调用程序,则返回命令窗口。,总39页第26页,【说明】 (1)子程序的一个重要标志是:以RETURN语句作为结束语句,而一般在主程序和无上一级调用程序的程序尾部用CANC

12、EL语句作为结束语句; (2)在返回语句中,若选择可选项,将表达式的值返回给调用程序。选择可选项TO,可直接返回指定的程序文件。选择可选项TO MASTER,则不论前面有多少级调用而直接返回到主程序。,总39页第27页,8.4.2 过程及过程文件 把多个子程序合并成一个大的文件,在该文件中,每个子程序仍然是独立的,这个大的公用程序文件被称作过程文件。其中的每个子程序模块称为过程。在系统执行过程中,只需打开相应的过程文件即可调用其中的多个过程,从而大大减少了访问磁盘的次数,可提高程序运行效率。过程文件的扩展名仍然是.PRG。 【格式】PROCEDURE PARAMETERS RETURN END

13、PROC,总39页第28页,1过程定义 【命令】 MODIFY COMMAND 过程文件的基本书写格式: PROCEDURE RETURN ENDPROC PROCEDURE RETURN ENDPROC,总39页第29页,【功能】建立过程。 【说明】过程名和过程文件名是两个不同的概念,每个过程是具有独立功能的一段程序,过程名是一个没有扩展名的过程名称。一个过程文件可以由一个或多个过程构成,扩展名是.PRG。 在PROCEDURE与ENDPROC之间如果使用RETURN命令,可以返回到上一层程序。 2调用(执行)过程 【格式】DO 【功能】用于调用指定的过程。,总39页第30页,3过程文件的打

14、开和关闭 调用过程时,首先打开包含被调用过程的过程文件。过程文件使用后需要及时关闭。 (1)打开过程文件 【命令】 SET PROCEDURE TO 【功能】 打开指定的过程文件,将过程文件中所包含的过程全部调入内存。 【说明】 系统在同一时刻只能打开一个过程文件,打开新过程文件的同时将关闭原来打开的过程文件。若要修改过程文件的内容,一定要先关闭该过程文件。 (2)关闭过程文件 【命令】 CLOSE PROCEDURE 或 SET PROCEDURE TO 【功能】 关闭已打开的过程文件。,总39页第31页,8.4.3 内存变量的作用域及带参数调用子程序 1内存变量作用域 在程序设计中,特别是

15、模块程序中,往往会用到许多内存变量,这些内存变量有的在整个程序运行过程中起作用,而有的仅在某些程序模块中起作用,内存变量的这些作用范围称为内存变量作用域。内存变量的作用域根据作用范围可以分为三类:全局变量、局部变量和本地变量。 2.内存变量的一般性质 在多模块程序设计中,不同的程序块分为主程序、调用程序、子程序,程序调用时有上下级关系,在不同的程序中的变量有其一般如下性质: (1)上级程序生成的变量,调用的下级程序可以使用,反之下级程序生成的变量,在上级程序中不可使用。 (2)上级程序中已有的变量,如果在下级程序中未重新定义,则返回上级程序时,保留下级程序重新赋的值。,总39页第32页,3全局

16、变量 全局变量又称为公共变量,在程序运行中,上下各级程序或任何程序模块中都可以使用该内存变量。当程序执行完毕,回到命令窗后,其值仍然保存。 【格式】PUBLIC 【功能】将中指定的变量定义为全局内存变量。,总39页第33页,【说明】 (1)用PUBLIC语句定义的内存变量系统设置初值为逻辑型.F.; (2)一个PUBLIC语句可以定义多个内存变量,可以是简单变量,也可以是下标变量,每个内存变量之间均用“,”隔开; (3)全局变量必须先定义后赋值,故称为建立全局型变量; (4)在程序中已被定义成全局变量的变量也可以在下一级程序中进一步定义成局部变量;但已定义成局部变量的,却不可反过来再定义成全局

17、变量; (5)若下层模块中建立的内存变量要供上层模块使用,或某模块中建立的内存变量要供并列模块使用,必须将这种变量设置成全局变量; (6)在Visual FoxPro的命令窗口中所定义的内存变量,系统默认为是全局变量,但不能在程序方式下利用 ; (7)由于全局变量的作用范围为整个系统,当程序执行完毕后,全局变量仍占用内存,不会自动被清除。因此,不再使用全局变量时,可以使用下列语句清除:RELEASE 、CLEAR ALL,总39页第34页,4局部变量 局部变量又称私有变量。在Visual FoxPro的程序中,未加PUBLIC语句定义的内存变量,系统默认为局部变量,局部变量的作用域限制在定义它

18、的程序和被该程度所调用的下级程序过程中,一旦定义它的程序运行完毕,局部变量将从内存中自动被清除。 【格式】PRIVATE 【功能】声明局部变量并隐藏上级程序中的同名内存变量。将中所列的内存变量定义为本级程序和下一级程序中专用的局部变量。,总39页第35页,【说明】 (1)在同一过程中,用隐式或显式定义的局部变量的作用域完全相同。在主程序或上级过程中未经PRIVATE语句定义的局部变量,在下级过程中也未经显式定义,那么它的新值可以带回主程序或上级过程;若在下级过程中进行了显式定义,其新值不能带回主程序或上级过程中使用; (2)用PRIVATE定义的局部变量只对本级程序及下级子程序有效,当返回上级

19、程序时,这种局部型变量便自动被消除; (3)当下级程序或过程中显式定义了与上级程序中同名的局部变量时,上级程序中的 同名变量将被隐藏起来,一旦含有PRIVATE的内存变量程序运行完毕,上级程序被隐藏的同变量自行恢复原来的状态;,总39页第36页,(4)用PRIVATE定义的内存变量仅指明变量的类型,没有赋初值; (5)PRIVATE ALL:表示将所有位于本级程序中的内存变量定义为局部型量; (6)PRIVATE ALL LIKE :将位于本级程序中符合的变量定义为局部型变量; (7)PRIVATE ALL EXCEPT :将位于本级程序中不符合的变量定义为局部型变量。,总39页第37页,5本

20、地变量 本地变量只能在定义它的程序中使用,一旦定义它的程序运行完毕,本地变量将从内存中释放。 【格式】LOCAL 【功能】将中指定的变量定义为本地变量。 【说明】 (1)用LOCAL定义的本地变量,系统自动将其初值赋以逻辑型.F.; (2)LOCAL与LOCATE前4个字母相同,故不可缩写。本地型内存变量只能在定义它的程序中使用,不能在上级或下级的调用程序中使用。,总39页第38页,例:建立一个程序,内容是子程序的嵌套调用及在过程调用中查看变量值的变化。程序如下:,*主程序GCCS.PRG SET TALK OFF CLEAR PUBLIC X,Z X=1 Y=1 Z=1 DO SUB1 ?“

21、SUB1结束后:” ? MAIN-X=,X ? MAIN-Y=,Y WAIT DO SUB2 ?“SUB2结束后:” ? MAIN-Z=,Z RETURN,PROCEDURE SUB1 X=X+1 Y=Y*X RETURN 当实参是变量时, 实参传递给形参属于引用传递。,总39页第44页,例: clea clea all set talk off x=5 y=10 ?主程序未调用过程时变量的值: ?X=+str(X,2),Y=+str(Y,2) do sub with x,(y) ?主程序调用过程后变量的值: ?X=+str(X,2),Y=+str(Y,2) set talk on retur

22、n,procedure sub parameters a,b a=a+5 b=b+10 ?过程中变量的值: ?A=+str(a,2),B=+str(b,2) return,总39页第45页,8.4.4 自定义函数 Visual FoxPro除了提供许多系统函数外,也允许用户自定义函数(User Defined Funtion),简称UDF。自定义函数既可以放在主程序中,只对主程序有效,也可以作为独立文件保存,其扩展名为. PRG。在Visual FoxPro中UDF可以分为:独立UDF和依附UDF。 1独立UDF 独立自定义函数和子程序的区别在于自定义函数必须有返回值。定义格式如下。 【格式】

23、PARAMETERS 命令序列 RETURN 【功能】建立自定义函数 【说明】RETURN 语句中的值作为返回函数值,它决定了函数的类型,如缺省该语句,则返回函数值为.T.。,总39页第46页,2依附UDF 依附自定义函数不能作为一个独立的程序文件,它以FUNCTION开头,依附在程序的后面或某个过程中。定义格式如下。 【格式】 FUNCTION PARAMETERS 命令序列 RETURN 【功能】定义依附自定义函数 【说明】FUNCTION 在程序里标识UDF的开始并定义函数名。,总39页第47页,在自定义函数中的参数传递: (1)在默认情况下, 使用函数名(实参) 语句调用自定义函数时, 参数的传递属于值传递; (2)可以通过以下方式改变参数传递方式: 利用set udf

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论