第6章程序设计

上传人:hs****ma 文档编号:567316162 上传时间:2024-07-19 格式:PPT 页数:94 大小:591.01KB
返回 下载 相关 举报
第6章程序设计_第1页
第1页 / 共94页
第6章程序设计_第2页
第2页 / 共94页
第6章程序设计_第3页
第3页 / 共94页
第6章程序设计_第4页
第4页 / 共94页
第6章程序设计_第5页
第5页 / 共94页
点击查看更多>>
资源描述

《第6章程序设计》由会员分享,可在线阅读,更多相关《第6章程序设计(94页珍藏版)》请在金锄头文库上搜索。

1、第第6章章 程序设计程序设计v程序文件的建立与运行程序文件的建立与运行 v程序的控制结构程序的控制结构 v过程程序设计过程程序设计7.1 7.1 程序文件的建立与运行程序文件的建立与运行7.1.1 7.1.1 程序文件的建立程序文件的建立1.1.命令方式建立程序文件命令方式建立程序文件 MODIFY COMMAND MODIFY COMMAND 功能:打开程序编辑窗口,修改或创建程功能:打开程序编辑窗口,修改或创建程序文件。序文件。 指定修改或创建的程序文件名。指定修改或创建的程序文件名。 命令程序文件的扩展名是命令程序文件的扩展名是.PRG.PRG。2. 2. 在程序编辑窗口中输入命令在程序

2、编辑窗口中输入命令 例例 编写两个变量的加法运算程序。编写两个变量的加法运算程序。步骤步骤1 1:在命令窗口里输入:在命令窗口里输入: MODIFY COMMAND CX1MODIFY COMMAND CX1 步骤步骤2 2:在程序编辑窗口输入如下:在程序编辑窗口输入如下6 6条命令。条命令。 CLEAR &CLEAR &将屏幕输出窗口内容清空将屏幕输出窗口内容清空 a=12 &a=12 &将数值将数值1212赋值给变量赋值给变量a a b=18 & b=18 &将数值将数值1818赋值给变量赋值给变量b b c=a+b & c=a+b &将变量将变量a a与与b b的和计算出来,赋值给变量的

3、和计算出来,赋值给变量c c ?a,b,c & ?a,b,c &输出变量输出变量a a、b b、c c的值的值 RETURNRETURN & &表示程序结束。表示程序结束。 在输入程序时,请注意以下几点:在输入程序时,请注意以下几点: a. a. 一个命令语句中只能有一个命令动词;一个命令语句中只能有一个命令动词; b. b. 每输入完一个语句按每输入完一个语句按“回车回车”键表示该语句结束;键表示该语句结束; c. c. 每一个程序最后一般应有一个结束语句,以表示该程序的结束。每一个程序最后一般应有一个结束语句,以表示该程序的结束。 3. 3. 程序文件的保存、打开与关闭程序文件的保存、打开

4、与关闭(1 1)程序文件的保存)程序文件的保存 按快捷键按快捷键Ctrl+WCtrl+W将文件进行保存退出。或将文件进行保存退出。或(2 2)程序文件的打开)程序文件的打开 在命令窗口里,利用在命令窗口里,利用“MODIFY COMMAND MODIFY COMMAND ”命令打开指定程序文件,进行编辑修改。命令打开指定程序文件,进行编辑修改。(3 3)程序文件的关闭)程序文件的关闭 a. a. 单击菜单单击菜单【文件文件( (F F) )】【关闭关闭( (C C) )】命令;命令; b. b. 单击程序编辑窗口右上角的单击程序编辑窗口右上角的【】关闭按钮;关闭按钮; c. c. 在在“命令命

5、令”窗口里输入命令:窗口里输入命令:CLOSE ALL CLOSE ALL ; d. d. 按快捷键按快捷键Ctrl+WCtrl+W,保存并关闭程序文件。保存并关闭程序文件。7.1.2 7.1.2 程序的运行程序的运行 命令方式运行程序命令方式运行程序 DO DO 功能:将指定的程序文件调入内存并运行。功能:将指定的程序文件调入内存并运行。 说明:说明: a. a. 默认程序扩展名为默认程序扩展名为.PRG.PRG,可不必输入;可不必输入; b. b. 该命令可在命令窗口里输入执行,也可以出现在另一个该命令可在命令窗口里输入执行,也可以出现在另一个程序文件中,后者可实现在一个程序中调用另一个程

6、序。程序文件中,后者可实现在一个程序中调用另一个程序。 如在命令窗口里输入:如在命令窗口里输入:DO cx1DO cx1 执行程序执行程序cx1cx1后,将在屏幕输出程序计算结果:后,将在屏幕输出程序计算结果: 12 18 3012 18 30 在程序打开并且为当前程序的情况下,单击常用工具栏上在程序打开并且为当前程序的情况下,单击常用工具栏上【! !】命令按钮也可以执行程序。命令按钮也可以执行程序。7.1.3 7.1.3 程序中的辅助命令程序中的辅助命令1 1、程序书写规则:、程序书写规则: 一行只能写一条语句。一行只能写一条语句。 每输入完一个语句按每输入完一个语句按“回车回车”键表示该语

7、句结束。键表示该语句结束。 如果希望把一行语句分两行写,应在第一行的尾部键入继行符如果希望把一行语句分两行写,应在第一行的尾部键入继行符 “;”2. 2. 程序注释命令程序注释命令 VFPVFP提供了提供了3 3种程序设计注释命令:种程序设计注释命令: 格式格式1 1: NOTE NOTE 格式格式2 2: * * 功能:使功能:使 NOTENOTE或或* * 后面的内容成为注释内容。后面的内容成为注释内容。 格式格式3 3: & & 功能:功能: 对对&左面的命令做出解释或给出运行左面的命令做出解释或给出运行结果,又称为行尾注释命令。结果,又称为行尾注释命令。 3.3.程序结束命令程序结束命

8、令 格式格式1 1:RETURNRETURN 功能:返回到上一级模块。如果本程序是以菜单方功能:返回到上一级模块。如果本程序是以菜单方式或在命令窗口中调用执行的,则返回到命令交互状式或在命令窗口中调用执行的,则返回到命令交互状态即命令窗口。态即命令窗口。 格式格式2 2:CANCELCANCEL 功能:结束程序运行,关闭程序中所有的文件和变功能:结束程序运行,关闭程序中所有的文件和变量,返回到交互状态即命令窗口。量,返回到交互状态即命令窗口。 格式格式3 3:QUITQUIT 功能:关闭功能:关闭Visual FoxProVisual FoxPro,返回到操作系统返回到操作系统 对一个独立程序

9、来说,一般在最后一条语句要用对一个独立程序来说,一般在最后一条语句要用RETURNRETURN命令,以表示程序的结束。命令,以表示程序的结束。 7.1.4 交互式的输入命令交互式的输入命令 根据解决实际问题的需要,往往在程序运行的过程中,由用根据解决实际问题的需要,往往在程序运行的过程中,由用户向程序输入一些数据或信息,完成这种功能的一些命令称为户向程序输入一些数据或信息,完成这种功能的一些命令称为交互式输入命令。交互式输入命令。 a. a. 是在屏幕上出现的提示信息。它可以是字符串,也可以是是在屏幕上出现的提示信息。它可以是字符串,也可以是字符型内存变量,此时该内存变量必须预先赋值。字符型内

10、存变量,此时该内存变量必须预先赋值。 b. b. 用户在键盘输入的任何字符信息都被赋值给用户在键盘输入的任何字符信息都被赋值给“内存变量内存变量”。输入的数据将。输入的数据将作为字符型数据处理,不需要定界符括起来。作为字符型数据处理,不需要定界符括起来。 c. c. 输入完需要的信息后,按输入完需要的信息后,按EnterEnter键结束本命令的输入。如果没有输入其他键结束本命令的输入。如果没有输入其他信息,只输入一个回车键,将把一个空字符赋值给内存变量。信息,只输入一个回车键,将把一个空字符赋值给内存变量。1. 1. 字符型数据输入命令字符型数据输入命令ACCEPTACCEPT ACCEPT

11、ACCEPT TO TO 功能:暂停程序的执行,等待用户输入一个字符串给功能:暂停程序的执行,等待用户输入一个字符串给变量变量 例例 编一程序,将学生表打开,在程序运行中输入学生姓名,编一程序,将学生表打开,在程序运行中输入学生姓名,显示指定姓名的人员记录。该程序编写步骤为:显示指定姓名的人员记录。该程序编写步骤为: 步骤步骤1 1:在命令窗口里输入命令:在命令窗口里输入命令: MODIFY COMMAND CX2MODIFY COMMAND CX2 步骤步骤2 2:在打开的程序窗口里输入如下语句:在打开的程序窗口里输入如下语句: NOTE NOTE 该程序查找指定姓名的人员信息。该程序查找指

12、定姓名的人员信息。 CLEARCLEAR USE rsb USE rsb ACCEPT ACCEPT “请输入要查找的姓名:请输入要查找的姓名:” TO name1TO name1 LOCATE FOR ALLTRIM( LOCATE FOR ALLTRIM(姓名姓名)=name1)=name1 DISPLAY DISPLAY RETURN RETURN 步骤步骤3 3:按:按Ctrl+WCtrl+W保存该程序保存该程序 步骤步骤4 4:运行程序,在命令窗口里输入:运行程序,在命令窗口里输入: DO CX2DO CX2 请输入要查找的姓名:请输入要查找的姓名:李明李明a a. . ,同,同“A

13、CCEPTACCEPT”命令中的命令中的含义。含义。b. b. 用户可输入任何一个合法的数值型(用户可输入任何一个合法的数值型(N N)、)、字符型(字符型(C C)、)、日日期型(期型(D D)、)、逻辑型(逻辑型(L L)表达式,表达式的值并将该值赋值表达式,表达式的值并将该值赋值给内存变量。给内存变量。c. c. 如果输入字符串信息,则必须加上双引号或单引号定界符,如果输入字符串信息,则必须加上双引号或单引号定界符,如如ABCABC。d. d. 按按EnterEnter键结束输入,系统将表达式的值赋值给内存变量。键结束输入,系统将表达式的值赋值给内存变量。e. e. 如果输入的是非法表达

14、式,系统将提示重新输入。如果输入的是非法表达式,系统将提示重新输入。2. 2. 表达式输入命令表达式输入命令INPUTINPUT INPUT INPUT TO TO 功能:暂停程序的执行,接受用户输入合法表达式并将表达功能:暂停程序的执行,接受用户输入合法表达式并将表达式的值赋值给内存变量。式的值赋值给内存变量。 例例 已知圆半径为已知圆半径为r r,求圆面积求圆面积s s 假设圆的半径为假设圆的半径为r r,则计算圆面积则计算圆面积s s的公式为:的公式为: s=rs=r2 2,计算圆面积公计算圆面积公式的表达式为:式的表达式为:3.14*r2 3.14*r2 。程序编写步骤如下:程序编写步

15、骤如下: 步骤步骤1 1:在命令窗口里输入:在命令窗口里输入: MODIFY COMMAND CX3MODIFY COMMAND CX3 步骤步骤2 2:在打开的程序窗口里输入如下语句:在打开的程序窗口里输入如下语句: * * 该程序用于计算指定半径的圆的面积。该程序用于计算指定半径的圆的面积。 CLEARCLEAR INPUT INPUT 请输入圆半径请输入圆半径r= TO rr= TO r s=3.14*r2 s=3.14*r2 ? ?该圆半径为:该圆半径为:,r,r ? ?该圆面积为:该圆面积为:,s,s RETURN RETURN 步骤步骤3 3:按:按Ctrl+WCtrl+W保存该程

16、序文件。保存该程序文件。 步骤步骤4 4:在命令窗口里输入运行命令:在命令窗口里输入运行命令: DO CX3DO CX3 请输入圆半径请输入圆半径r= 18a. a. 指定要显示的自定义信息。若省略该参数,指定要显示的自定义信息。若省略该参数,则显示信息则显示信息“按任意键继续按任意键继续”。例如下列命令显示一行有提示信息。例如下列命令显示一行有提示信息。WAIT 请稍后,程序将继续执请稍后,程序将继续执.“此时单击鼠标按键、按下键盘上任意一个按键此时单击鼠标按键、按下键盘上任意一个按键,程序继续执行程序继续执行.3. 3. 程序暂停、等待接收单字符命令程序暂停、等待接收单字符命令WAITWA

17、IT WAIT WAIT TO TO 内存变量内存变量 功能:暂停程序,用户按任意键或者时间超过等待的秒数后,功能:暂停程序,用户按任意键或者时间超过等待的秒数后,程序继续执行。如果包含程序继续执行。如果包含TO TO 短语,将用户所短语,将用户所按键盘字符赋值给指定的内存变量。按键盘字符赋值给指定的内存变量。a.a. 用于指定在屏幕上输出的行、列位置坐标。用于指定在屏幕上输出的行、列位置坐标。b.b.SAY SAY 用来在屏幕上输出表达式的值。用来在屏幕上输出表达式的值。c. GET c. GET 子句用来在屏幕上输入指定变量的值,且必子句用来在屏幕上输入指定变量的值,且必须与须与READR

18、EAD命令配套使用。命令配套使用。d. DEFAULT d. DEFAULT 子句用来给子句用来给GET GET 子句中的变子句中的变量赋初值量赋初值。4. 4. 定位输出与输入命令定位输出与输入命令 SAY SAY GET GET DEFAULT DEFAULT 在屏幕上指定行、列位置输出指定表达式的值,并在屏幕上指定行、列位置输出指定表达式的值,并且(或者)获得所指定变量的值。且(或者)获得所指定变量的值。 例例 将学生表打开,新增加一条记录部分字段内容,增加完成后在浏将学生表打开,新增加一条记录部分字段内容,增加完成后在浏览窗口显示数据表记录内容,关闭浏览窗口,屏幕出现等待信息览窗口显示

19、数据表记录内容,关闭浏览窗口,屏幕出现等待信息, ,等待信等待信息关闭,清屏并关闭数据表,程序结束。该程序如下:息关闭,清屏并关闭数据表,程序结束。该程序如下: CLEARCLEAR USE USE 学生表学生表 APPEND BLANKAPPEND BLANK 3,8 SAY 3,8 SAY 请输入新职工信息:请输入新职工信息: 4,8 SAY 4,8 SAY “学号:学号:” GET GET 学号学号 5,8 SAY 5,8 SAY 姓名:姓名: GET GET 姓名姓名 6,8 SAY 6,8 SAY “性别:性别:” GET GET 性别性别 READREAD BROWSE BROWS

20、E WAIT WAIT “程序将在按任意键后关闭程序将在按任意键后关闭.。 USE USE CLEAR CLEAR RETURN RETURN 例例 编写一个程序,根据记录号来修改学生表中的记录。编写一个程序,根据记录号来修改学生表中的记录。该程序如下:该程序如下: CLEARCLEAR USE USE 学生表学生表 a=1 a=1 10 10,20 say 20 say “请输入记录号请输入记录号” get aget a read read go a go a 12,20 SAY 12,20 SAY “修改该同学的信息:修改该同学的信息: 14,20 SAY 14,20 SAY “学号:学号

21、:” GET GET 学号学号 16,20 SAY 16,20 SAY 姓名:姓名: GET GET 姓名姓名 18,20 SAY 18,20 SAY “性别:性别:” GET GET 性别性别 READREAD BROWSE BROWSE USE USE RETURN RETURN7.2 7.2 程序的控制结构程序的控制结构 程序设计包括三种基本结构,即顺序结构、选择结构、循程序设计包括三种基本结构,即顺序结构、选择结构、循环结构。环结构。7.2.1 7.2.1 顺序结构顺序结构 顺序结构是程序设计中最基本的结构,该结构按照程序顺序结构是程序设计中最基本的结构,该结构按照程序命令出现的先后顺

22、序依次执行。其它结构作为它的组成部分命令出现的先后顺序依次执行。其它结构作为它的组成部分而存在于程序之中。而存在于程序之中。 事实上,程序中的命令如果不进行特殊说明,就自动按其事实上,程序中的命令如果不进行特殊说明,就自动按其前后排列顺序执行。我们以前介绍的几个例题都是顺序结构前后排列顺序执行。我们以前介绍的几个例题都是顺序结构程序设计题目。程序设计题目。7.2.2 7.2.2 选择结构选择结构 可分为简单分支结构、双分支选择结构和多分支选择结构。可分为简单分支结构、双分支选择结构和多分支选择结构。1.1.简单分支结构简单分支结构2. 简单分支结构是由简单分支结构是由IFIF语句开头,以语句开

23、头,以ENDIFENDIF语句结束,中间由若干条命语句结束,中间由若干条命令组成的。令组成的。 IF IF 命令序列命令序列 ENDIF ENDIFa. a. 如果如果 的逻辑值为的逻辑值为.T.T.,就依次执行就依次执行 命令序列命令序列 ,执行,执行完后就转去执行完后就转去执行ENDIFENDIF之后的命令。如果之后的命令。如果 的逻辑值为的逻辑值为.F.F.,则,则直接转到直接转到ENDIFENDIF之后的命令。之后的命令。 b. IFb. IF语句和语句和ENDIFENDIF语句必须成对出现,且各占一行。语句必须成对出现,且各占一行。c. c. 为了程序阅读方便,便于以后维护修改,为了

24、程序阅读方便,便于以后维护修改, 命令序列命令序列 部分部分最好采取向右缩进书写的方式。最好采取向右缩进书写的方式。 问题分析:设行李重量为问题分析:设行李重量为W W公斤,应付运公斤,应付运费为费为P P元,则运费公式为:元,则运费公式为: p=0.25p=0.25w w 当当W50W50 p=50 p=500.25+(w-50)0.25+(w-50)0.45 0.45 当当W W5050程序如下:程序如下: CLEARCLEAR INPUT INPUT 请输入行李重量:请输入行李重量: TO w TO w P=0.25*w P=0.25*w IF w50 IF w50 P=50*0.25+

25、(w-50)*0.45 P=50*0.25+(w-50)*0.45 ENDIF ENDIF ? ?行李重量为:行李重量为:,w,w ? ?应付运费为:应付运费为:,p,p RETURN RETURN 例例 铁路托运行李,按规定每张客票托运行李不超过铁路托运行李,按规定每张客票托运行李不超过5050公斤公斤时,每公斤时,每公斤0.250.25元,如超过元,如超过5050公斤,超过部分按每公斤公斤,超过部分按每公斤0.450.45元元计算。编写一个程序,把行李重量输入计算机,计算出运费。计算。编写一个程序,把行李重量输入计算机,计算出运费。根据以上分析,该问题计根据以上分析,该问题计算机程序框图算

26、机程序框图2.2.双分支简单结构双分支简单结构 双分支选择结构也是由双分支选择结构也是由IFIF语句开头,以语句开头,以ENDIFENDIF语句结束,中语句结束,中间由若干条命令组成的,但其中包含一条间由若干条命令组成的,但其中包含一条ELSEELSE语句。语句。 IF IF 命令序列命令序列11 ELSE ELSE 命令序列命令序列22 ENDIF ENDIF a. a. 如果如果 的逻辑值为的逻辑值为.T.T.,就执行就执行 命令序列命令序列11,执行完,执行完后就转到执行后就转到执行ENDIFENDIF之后的命令。如果之后的命令。如果 的逻辑值为的逻辑值为.F.F.,就执行就执行 命令序

27、列命令序列22,完成后转去执行,完成后转去执行ENDIFENDIF之后的命令。之后的命令。 b. ELSEb. ELSE语句单独占一行,语句单独占一行,IFIF语句和语句和ENDIFENDIF语句必须成对出现,语句必须成对出现,且各占一行。且各占一行。 例例 铁路托运行李,按规定每张客票托运行李不超过铁路托运行李,按规定每张客票托运行李不超过50公斤时,每公斤公斤时,每公斤0.25元,如超过元,如超过50公斤,超过部分按公斤,超过部分按每公斤每公斤0.45元计算。编写一个程序,把行李重量输入计元计算。编写一个程序,把行李重量输入计算机,计算出运费。算机,计算出运费。 CLEARCLEAR IN

28、PUT INPUT 请输入行李重量:请输入行李重量: TO w TO w IF w50 IF w50 P=50*0.25+(w-50)*0.45 P=50*0.25+(w-50)*0.45 else else P=0.25*w P=0.25*w ENDIF ENDIF ? ?行李重量为:行李重量为:,w,w ? ?应付运费为:应付运费为:,p,p RETURN RETURN 1、设设计计简简单单分分支支程程序序。在在“员员工工信信息息表表”表表文文件件中中查查询询“刘刘明明”的的基基本本情情况况,如如果果找找到到,显示信息,否则显示显示信息,否则显示“查无此人查无此人”。 1、设设计计简简单单

29、分分支支程程序序。由由键键盘盘输输入入一一个个员员工工的的姓姓名名,在在“员员工工信信息息表表”表表文文件件中中该该员员工工的的基基本本情情况况,如如果果找找到到,显显示示信信息息,否否则则显显示示“查无此人查无此人”。v 例例 设计选择分支程序,在设计选择分支程序,在“ZGSJ.DBF”表文表文件中查看编号为件中查看编号为“1002”的职工的月收入,若月的职工的月收入,若月收入大于收入大于600元,显示元,显示“该职工的月收入大于该职工的月收入大于600”;否则显示;否则显示“该职工的月收入小于该职工的月收入小于600”。 Use zgsjLocate for 编号编号=“1002”If f

30、ound()Else“无此编号无此编号”endifIf 月收入月收入600 ?”该职工的月收入大于该职工的月收入大于600”Else?”该职工的月收入大于该职工的月收入大于600”3.3.分支嵌套结构分支嵌套结构 对于在分支结构中的对于在分支结构中的 ,可以包含任何,可以包含任何VFPVFP命令语句,也可以包括另外一个或几个合法的分命令语句,也可以包括另外一个或几个合法的分支结构语句,也就是说分支结构可以嵌套。对于嵌套支结构语句,也就是说分支结构可以嵌套。对于嵌套的分支结构语句,一定注意内外层分支结构层次分明,的分支结构语句,一定注意内外层分支结构层次分明,即注意各个层次的即注意各个层次的IF

31、. ELSE.ENDIFIF. ELSE.ENDIF语句配语句配对情况。对情况。4.4.多分支选择结构多分支选择结构 Visual FoxProVisual FoxPro提供了多分支结构来解决多种不同情况下的程序选择问提供了多分支结构来解决多种不同情况下的程序选择问题。题。 DO CASEDO CASE CASE CASE 1 1 CASE CASE 2 2 . . CASE CASE n n OTHERWISE OTHERWISE n+1 ENDCASE ENDCASE a. 多分支选择结构执行的过程:系统依次判断各多分支选择结构执行的过程:系统依次判断各是否满足,若某一是否满足,若某一为为

32、.T.,就执行该,就执行该下的下的,执行后不再判断其它,执行后不再判断其它,而转,而转去执行去执行ENDCASE后面的第一条命令。后面的第一条命令。 如果没有一个如果没有一个为为.T.,就执行,就执行OTHERWISE后面的后面的命令序列命令序列,直到,直到ENDCASE;如果没有;如果没有OTHERWISE,则不作任何操作就转向,则不作任何操作就转向ENDCASE之之后的第一条命令。后的第一条命令。 b. DO CASEb. DO CASE语句和语句和ENDCASEENDCASE语句必须成对出现,各语句必须成对出现,各占一行。占一行。 c. c. 多分支选择结构中各多分支选择结构中各CASE

33、CASE语句后的语句后的 是按是按其先后顺序判断执行的,因此对实际问题进行编程时,其先后顺序判断执行的,因此对实际问题进行编程时,应认真考虑各个条件排列的先后顺序。应认真考虑各个条件排列的先后顺序。 DO CASEENDCASE条件条件1命令组命令组1条件条件2命令组命令组2条件条件 n命令组命令组notherwise编写一个程序编写一个程序,要求从键盘输入一个要求从键盘输入一个学生的分数学生的分数,判断该分数属于哪个等判断该分数属于哪个等级级.分数分数:60分以下为不及格分以下为不及格,60-70为及格为及格,70-80为中为中,80-90为良为良,90-100为优为优Y= 根根据据键键入入

34、的的X值值,计计算算下下面面的的分分段段函函数数值值,并显示结果。并显示结果。5X2+6X-1 (X0)X2-4X+1 (020)【例例6-7】输入考试成绩,显示成绩等级的程序。(输入考试成绩,显示成绩等级的程序。(90分以分以上为上为“优秀优秀”;80-89为为“良好良好”;60-79为为“合格合格”;60分以下为分以下为“不合格不合格”)。)。SET TALK OFFINPUT “输入考试成绩:输入考试成绩:” TO XDO CASE CASE X=90? “成绩等级:优秀成绩等级:优秀”CASE X=80? “成绩等级:良好成绩等级:良好”CASE X=60? “成绩等级:合格成绩等级:

35、合格”OTHER ? “成绩等级:不合格成绩等级:不合格”ENDCASERETU6.9 6.9 循环结构循环结构循环结构有循环结构有3 3种命令格式:种命令格式:nDO WHILEDO WHILEENDDOENDDOnFOR FOR ENDFORENDFORnSCANSCANENDSCANENDSCAN6.2.3 6.2.3 循环结构循环结构 在程序设计中,有时需要从某处开始有规律地反复执行某些类似的操作,在程序设计中,有时需要从某处开始有规律地反复执行某些类似的操作,这些类似的操作一般用循环结构程序设计来解决。在这些类似的操作一般用循环结构程序设计来解决。在VFPVFP中,提供了中,提供了“

36、条件条件循环循环”、“步长型步长型”和和“表扫描型表扫描型”循环结构。循环结构。 1. 1. 条件循环结构条件循环结构 DO WHILE DO WHILE 命令序列命令序列 ENDDO ENDDO a. a. 当型循环执行的过程是:根据当型循环执行的过程是:根据 逻辑逻辑值进行判断。如果值进行判断。如果 为为.T.T.,则执行则执行 命令命令序列序列 , 命令序列命令序列 执行完返回到执行完返回到DO WHILEDO WHILE语句,语句,每执行一遍就判断一次每执行一遍就判断一次DO WHILEDO WHILE语句中的语句中的 。如果。如果 仍然为仍然为.T.T.,则继续执行则继续执行 命令序

37、命令序列列 ,直到,直到 的逻辑值为的逻辑值为.F.F.,则结束循环,则结束循环,转去执行转去执行ENDDOENDDO之后的第一条命令。之后的第一条命令。 1. 1. 条件循环结构条件循环结构 DO WHILE DO WHILE 命令序列命令序列 ENDDO ENDDOb. DO WHILEb. DO WHILE和和ENDDOENDDO语句应配对使用,各语句应配对使用,各占一行。占一行。c. c. 在在 命令序列命令序列 的适当位置可以放置的适当位置可以放置EXITEXIT和和LOOPLOOP语句,用以对循环过程作特殊语句,用以对循环过程作特殊处理。处理。EXITEXIT的功能是:终止本层循环

38、命令。的功能是:终止本层循环命令。LOOPLOOP语句的功能是:终止本次循环命令。语句的功能是:终止本次循环命令。循环结构流程图循环结构流程图6.9 6.9 循环结构循环结构Do While Do While 条件条件 loop loop enddoenddoDO WHILE DO WHILE 条件条件 EXIT EXIT ENDDOENDDO例例5计算计算1+2+10的值的值set talk offcleara=1s=0do While a=10 s=s+a a=a+1enddo? “s=“ , sSet talk onsa00+10+1+21+2+31+2+3+41+2+61+2+71+2

39、+81+2+91+2+1012345678910116.9 6.9 循环结构循环结构【例例】编程计算编程计算S=1+2+3+100【例例】编程计算编程计算S=1+3+5+99【例例】编程计算编程计算S=2+4+6+100【例例】输出输出100-300之间所有能被之间所有能被7整除的数整除的数 基本结构基本结构(循环次数已知情况下)循环次数已知情况下)a=1(定义一个变量,确定循环开始的数)定义一个变量,确定循环开始的数)do While a=90 k1=k1+1 CASE 成绩成绩70 k3=k3+1 OTHERWISE k2=k2+1 ENDCASE SKIPENDDO?90分的人数的个数:

40、分的人数的个数:+STR(k1)?7090人数的个数:人数的个数:+STR(k2)?70以下人数的个数:以下人数的个数:+STR(k3)USE6.9 6.9 循环结构循环结构对表的操作。用对表的操作。用NOT EOF()或或FOUND()作为循作为循环条件进行判断,循环体内必须含有指针移动的环条件进行判断,循环体内必须含有指针移动的语句。语句。 基本结构:基本结构:USE LOCATE FOR DO WHILE .NOT. EOF() (或或 FOUND() CONTINUE ENDDO例:试编一个程序例:试编一个程序,显示显示“学生表学生表.DBF”中所有入学中所有入学成绩超过成绩超过490

41、分的学生名单。分的学生名单。例:统计例:统计“职工数据表职工数据表”中女职工的人数中女职工的人数v计算计算1+2+3,当和大于,当和大于1000时退出时退出循环循环v(2)在永真循环中。一般用于循环次数不定)在永真循环中。一般用于循环次数不定的情况下,在循环体内根据条件执行的情况下,在循环体内根据条件执行EXIT命命令退出循环。其基本形式如下:令退出循环。其基本形式如下:v DO WHILE .T.v v IF X=结束标志结束标志v EXITv ENDIFv v ENDDO2.2.步长型循环结构步长型循环结构FOR FOR =TOTOSTEP STEP 命令序列命令序列 ENDFOR|NEX

42、TENDFOR|NEXT a. a. 、 、 都是都是数值表达式;当数值表达式;当 是是1 1时,可以时,可以省略省略STEPSTEP子句。子句。 b. ENDFORb. ENDFOR或或NEXTNEXT语句为循环终端语语句为循环终端语句,用以标明本循环结构的终点。该句,用以标明本循环结构的终点。该语句必须和语句必须和FORFOR语句配对使用。语句配对使用。2.2.步长型循环结构步长型循环结构FOR FOR = TO TOSTEPSTEP 命令序列命令序列 ENDFOR|NEXTENDFOR|NEXT c. c. 该循环结构的执行过程是:首先将初值赋值该循环结构的执行过程是:首先将初值赋值给循

43、环变量,然后判断循环变量的值是否超过终给循环变量,然后判断循环变量的值是否超过终值,不超过就执行循环体,值,不超过就执行循环体,遇到遇到ENDFORENDFOR或或NEXTNEXT语语句,自动使循环变量增加一个步长值,再将循环句,自动使循环变量增加一个步长值,再将循环变量的值与终值比较,变量的值与终值比较,如果循环变量的值不超过如果循环变量的值不超过终值,就再执行循环体,不断循环执行。如果循终值,就再执行循环体,不断循环执行。如果循环变量的值超过终值则转去执行环变量的值超过终值则转去执行ENDFORENDFOR或或NEXTNEXT语语句后面的第一条语句。句后面的第一条语句。d d. . 在循环

44、体内的适当位置也可以放在循环体内的适当位置也可以放置置EXITEXIT和和LOOPLOOP语句,作用和用法与条语句,作用和用法与条件循环结构类似。件循环结构类似。 2.2.步长型循环结构步长型循环结构FOR FOR = TO TOSTEPSTEP 命令序列命令序列 ENDFOR|NEXTENDFOR|NEXT For n=For n=初值初值 to to 终值终值 step step 步长步长 exit exit enddoenddo循环结构流程图循环结构流程图2.步长型循环结构步长型循环结构For n=For n=初值初值 to to 终值终值 step step 步长步长 loop loo

45、p enddoenddo 例例 求求1+2+3+1+2+3+99+100+99+100的值。的值。 问题分析:采用累加的办法,用循环变量产生问题分析:采用累加的办法,用循环变量产生1 1、2 2、3 3、9999、100100这些数。用这些数。用s s保存累加和,保存累加和,s s的初始值为的初始值为0 0,每次循环将每次循环将s s加上循环变量的值,再赋值给变量加上循环变量的值,再赋值给变量s s,循环循环结束即求得结束即求得S S。程序为:程序为:CLEARCLEARs=0s=0FOR FOR x=1x=1 TO TO 100100 step step 1 1 s=s+x s=s+xEND

46、FORENDFOR? 1-100? 1-100自然数累加和是:自然数累加和是:,s,sRETURNRETURN【例例】编程计算编程计算S=1+2+3+100【例例】编程计算编程计算S=1+3+5+99【例例】编程计算编程计算S=2+4+6+100【例例】输出输出100-300之间所有能被之间所有能被7整除的数整除的数 基本结构基本结构(循环次数已知情况下)循环次数已知情况下)For a=1(循环开始的数)(循环开始的数) to a=(终止的数)(终止的数) (step 步长)步长) (执行某项任务)(执行某项任务)endfor? “s=“ , s (输出结果)输出结果)return循环结构的类

47、型:循环结构的类型: 1、条件循环:、条件循环: (常用)(常用) 命令格式:命令格式: do while enddo 2、步长循环步长循环 命令格式:命令格式: For 变量变量=数表数表1 to 数表数表2 STEP 数表数表3 语句序列语句序列 endfor| next一个循环结构一般应具备如下的条件:一个循环结构一般应具备如下的条件:(1)循环的初始条件:一般为给循环)循环的初始条件:一般为给循环控制变量赋初值;控制变量赋初值;(2)循环头:循环语句的起始,设置、)循环头:循环语句的起始,设置、判断循环条件;判断循环条件;(3)循环尾:循环语句的结尾;)循环尾:循环语句的结尾;(4)循

48、环体:位于循环头和循环尾之)循环体:位于循环头和循环尾之间、循环控制重复执行的语句序列间、循环控制重复执行的语句序列 6.9 6.9 循环结构循环结构Do while enddo 和 forendfor的区别求求s=1+2+3+99+100S=0N=1Do while nS S=S+N N=N-2ENDDO?SRETURN阅读下列程序,写出运行结果(每题阅读下列程序,写出运行结果(每题3分)分)2、SET TALK OFFSET TALK OFF STORE 2 TO M STORE 2 TO M,N N DO WHILE M14 DO WHILE M=10 EXIT ENDIF A=A+2

49、S=S+AENDDO?A,S阅读下列程序,写出运行结果(每题阅读下列程序,写出运行结果(每题3分)分)4、USE RSDAGZH=0DO WHILE .NOT. EOF()() GZH=GZH+基本工资基本工资 SKIPENDDO?GZHRETURNvUSE STUUSE STUvGO 8GO 8vIF IF 团否团否v DISPLAY DISPLAY 姓名姓名vELSEELSEv DISPLAY DISPLAY 入学成绩入学成绩vENDIFENDIFvUSEUSE6、STORE 0 TO M,NDO WHILE .T. N=N+2 DO CASE CASE INT(N/3)*3N LOOP

50、CASE N10 EXIT OTHERWISE M=M+N ENDCASEENDDO?M=,M,N=,NRETURN7、USE ZGSJRS1=0RS2=0DO WHILE .NOT. EOF()()IF 性别性别=男男 RS1=RS1+1 ELSE RS2=RS2+1 ENDIF SKIPENDDO?RS1,RS2RETURN 阅读下列程序,写出运行结果(每题阅读下列程序,写出运行结果(每题3分)分) 8、SET TALK OFF S=0 FOR I=1 TO 6 STEP 2 Q=I*2 ?Q S=S+Q ENDFOR ?S SET TALK ON阅读下列程序,写出运行结果(每题阅读下列程

51、序,写出运行结果(每题3分)分) 9、SET TALK OFFS=0FOR N=1 TO 7 STEP 2 N=N+1 S=S+NENDFOR? S,NSET TALK ONv SET TALK OFFvFILE=“RSDA”vUSE &FILEvLIST FOR 性别性别=“男男”vUSEvSET TALK ON vRETURN vCLEARv Y=等级考试等级考试v X=vL=LEN(Y)vFOR I=L-1 TO 1 STEP -2v X=X+SUBSTR(Y,I,2)vENDFORv?X 阅读下列程序,写出运行结果阅读下列程序,写出运行结果 vA=BvB=CvC=Av?&A+&B+&C

52、阅读下列程序,写出运行结果阅读下列程序,写出运行结果 v SET TALK OFFvA=BvB=1vC=+v?&Av?&A.&C.&AvSET TALK ON 3 3、表扫描循环结构、表扫描循环结构 SCAN SCAN FOR FOR 1 命令序列命令序列 & &命令序列命令序列 也称为循环体也称为循环体 ENDSCANENDSCANa. a. 该结构是针对当前打开的数据表进行操作的。它的功能是:该结构是针对当前打开的数据表进行操作的。它的功能是:对当前打开的数据表中指定范围内符合条件的记录,逐个对当前打开的数据表中指定范围内符合条件的记录,逐个进行进行 所规定的操作,如果缺省范围和条件子句所

53、规定的操作,如果缺省范围和条件子句时,则对所有记录逐个进行时,则对所有记录逐个进行 规定的操作。规定的操作。b. b. 表扫描型循环结构每循环一遍,记录指针自动移动到下一表扫描型循环结构每循环一遍,记录指针自动移动到下一条记录,不需要设置条记录,不需要设置SKIPSKIP语句。语句。c. SCANc. SCAN和和ENDSCANENDSCAN语句要配对使用。语句要配对使用。d. d. 在在 的适当位置也可以放置的适当位置也可以放置EXITEXIT和和LOOPLOOP语句,功语句,功能和用法同其他循环结构类似。能和用法同其他循环结构类似。 例例 将将职工职工数据表中数据表中月收入大于月收入大于6

54、00600元元的的姓名姓名, ,月收入月收入字段输出,并统计字段输出,并统计这些职工的人数。这些职工的人数。 基本操作步骤为:打开职工数据表,设计一个累加变量基本操作步骤为:打开职工数据表,设计一个累加变量n n,代表满足条件代表满足条件的记录数,给的记录数,给n n 赋初值赋初值0 0,用表扫描循环结构定位满足条件的记录,输出姓,用表扫描循环结构定位满足条件的记录,输出姓名和编号字段,并对名和编号字段,并对n n 进行累加进行累加1 1,循环结束即求得,循环结束即求得n n,输出输出n n。程序如下:程序如下: CLEARCLEARUSE USE 职工数据表职工数据表n=0n=0SCAN F

55、OR SCAN FOR 月收入月收入600600 ? ?姓名姓名, ,月收入月收入 n=n+1n=n+1ENDSCAN ENDSCAN ? ?“月收入在月收入在600600元以上的人数有:元以上的人数有:+STR(N,2)+STR(N,2)+人。人。 useuseRETURN RETURN Do while-enddo和和scan-endscan的主要区别的主要区别显示学生表中所有入学成绩超过显示学生表中所有入学成绩超过490分的学生名单分的学生名单Use 学生表学生表 Locate for 入学成绩入学成绩490Do while not eof() Disp 姓名姓名 ContEnddous

56、eUse 学生表学生表scan for 入学成绩入学成绩490Disp 姓名姓名endscanUse4 4、循环结构嵌套、循环结构嵌套 循环结构的嵌套是指在一个循环体内包含其他的循循环结构的嵌套是指在一个循环体内包含其他的循环结构,也称为多重循环结构。同一种类型的循环结环结构,也称为多重循环结构。同一种类型的循环结构可以嵌套,不同类型的循环结构也可以嵌套。要编构可以嵌套,不同类型的循环结构也可以嵌套。要编好循环嵌套结构程序,必须做到:循环开始语句和循好循环嵌套结构程序,必须做到:循环开始语句和循环结束语句配对出现;内外层循环层次分明,不得交环结束语句配对出现;内外层循环层次分明,不得交叉。叉。

57、Visual FoxPro Visual FoxPro 最多允许最多允许128128层嵌套。层嵌套。 FOR a=1 TO 9FOR a=1 TO 9 FOR b=1 TO 9 FOR b=1 TO 9 ENDFOR ENDFOR ? ? ENDFOR ENDFOR RETURN RETURN外外循循环环内内循循环环【例例6-19】输出下面图形(要求使用双重循环语句) * * * * * * * * * * * * * * * * FOR I=1 TO 4 FOR J=1 TO I ?“*” ENDFOR ? ENDFOR【例例6-19】输出下面图形(要求使用双重循环语句)输出下面图形(要求使

58、用双重循环语句) * * * * * * * * * * FOR I=1 TO 4 FOR J=1 TO I ?“*” ENDFOR ? ENDFOR阅读下列程序,写出运行结果阅读下列程序,写出运行结果 vDIMENSION A(3,3)vI=1 vDO WHILE I4v J=Iv DO WHILE J4v A(I,J)=I*Jv ?A(I,J)v J=J十十1 v ENDDOv ?v I=I+1vENDDO vRETURN阅读下列程序,写出运行结果阅读下列程序,写出运行结果 vSET TALK OFFvCLEARvZ=0vX=1v?vDO WHILE X=5v Y=1v DO WHILE

59、Y=100v 【2】v OTHERWISEv Y=Y+Xv ENDCASEv 【3】v? 0-100之间的奇数之和为: , Yv2、统计zgsj.dbf 中职工的月收入总和,并在表文件末尾增加一条空记录,在该记录的姓名字段中写入总计,在月收入字段中写入工资总和,最后显示该条记录。vCLEARv【4】vSUM 月收入 TO Sv 【5】vREPLACE 姓名 WITH 总计 , 月收入 WITH Sv 【6】vUSE vRETURNv3、求S=1+2+3+1000。vS=0vI=1vDO WHILE【1】v【2】vI=I+1 vENDDOv?Sv4、某职工数据工资表文件为GZ.DBF。下面程序将

60、根据职工的职称情况对工资作相应调整:职称为教授的基本工资加40%;职称为副教授的基本工资加20%,否则,若基本工资低于300的按500计算。请填上相应的语句,使之成为完整的程序。v【3】vDO WHILE .NOT. EOF()v【4】vCASE 职称=教授v【5】vCASE 职称=副教授vREPLACE 基本工资 WITH 基本工资*1.1vCASE 基本工资300vREPLACE 基本工资 WITH 300vENDCASEv【6】vENDDOvLISTvUSEv5、按性别查询显示并统计RSDA.DBF中的指定性别的职工人数。vUSE RSDA vSTORE 0 TO RSvACCEPT “

61、请输入性别:” TO XBv【4】vDO WHILE .NOT.EOF()v DISP OFFv RS=RS+1v 【5】vENDDOv?“性别为”+XB+“的人数=”,【6】vUSEv6、求出1到100之间的奇数积、偶数和,请在【 】处填入正确的内容。vs1=0vs2=1vFOR I=1 to 100v IF 【1】 v s1=s1+Iv Elsev s2=【2】v ENDIFvNEXTv? 奇数积为:,s2v?偶数和为:,s1v7、有一数据表RS.DBF,编写实现在其中按姓名查询学生信息的程序。v请在【 】处填入正确的内容。v【3】vACCEPT 输入姓名: TO NAMEv【4】vIF

62、.NOT.EOF()v DISPvELSE v ?查无此人v【5】vUSE实验内容u编成求编成求s=1+2+3+99+100(分别用(分别用do while和和for-endfor实现)实现)u显示学生表中所有入学成绩超过显示学生表中所有入学成绩超过490分的学生名单(分别用分的学生名单(分别用do while和和scan for-ends实现)实现)u输出下面图形(用输出下面图形(用for循环嵌套)循环嵌套) * * * * * * * * * * * * * * * * * * * * * * * * * *6.6.1 6.6.1 过程的建立与调用过程的建立与调用过程:可被调用的功能模块或

63、能够完成某种特定功过程:可被调用的功能模块或能够完成某种特定功能的独立程序。能的独立程序。1、过程的建立:、过程的建立: MODIFY COMMAND 2、过程的调用、过程的调用 DO 3、过程中的返回命令、过程中的返回命令 RETURN TO MASETR4、过程的嵌套:一个过程又调用了另一个过程过程的嵌套:一个过程又调用了另一个过程例例1:用过程编写一个求和与乘积的程序。:用过程编写一个求和与乘积的程序。 *AA.PRG调用过程调用过程BB *过程过程BBSET TALK OFF M=3S=1 N=5P=1 S=M+NDO BB P=S*N?”S=”,S RETURN?”P=”,PSET

64、TALK ONRETURN6.6.3 6.6.3 内存变量作用域内存变量作用域作用域:内存变量的作用范围。作用域:内存变量的作用范围。1、全局变量、全局变量n全全局局变变量量:指指在在程程序序的的任任何何嵌嵌套套中中及及在在程程序序执执行行期期间间始始终终有有效的变量。效的变量。n格式:格式:PUBLIC 2、本地变量本地变量n本本地地变变量量只只能能在在建建立立它它的的模模块块中中起起作作用用,在在它它的的上上层层或或底底层层模块不起作用。模块不起作用。n格式:格式:local 3、局部变量局部变量n局部变量:未经局部变量:未经PUBLIC、local命令定义且只在建立它的过命令定义且只在建

65、立它的过程及其下级过程中有效的内存变量。程及其下级过程中有效的内存变量。n局部变量的定义:局部变量的定义:n隐含定义方式:过程中未经特殊说明的内存变量。隐含定义方式:过程中未经特殊说明的内存变量。n显示定义方式:显示定义方式:PRIVATE A=1B=2?在主程序中:在主程序中:A=,A,B=,BDO SUB4? 返回主程序后:返回主程序后:A=,A,B=,B,C=,C,D=,DPRIVATE BPUBLIC CA=10B=11C=12D=13?在过程中:在过程中:A=,A,B=,B,C=,C,D=,DRETURNSUB4.PRG:SET TALK OFFCLEARZ=0X=1?DO WHILE X=5 Y=1 DO WHILE Y50v EXITv ENDIFv X=X+1vENDDOv ? “X=”,X, “S=”,Svreturn

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号