1、程序设计基础知识 程序是为了完成一项任务而编写的指令的集合,在某种程度上VFP中的程序设计同老式的程序设计有很大的不一样。在VFP中能够同时应用面对过程和面对对象两种编程措施,面对对象的程序设计是其重要特色。一般来说,对于制作简单、较小的应用程序,使用过程编程方式比较轻易,同时这也是面对对象编程方式的基础。本章重要简介的是面对过程的编程措施。 4.1 程序设计概念 4.1.1程序设计与算法简介 程序设计从某种意义上来说, 是依照算法步骤把命令、函数、变量、常量、体现式等以逻辑的方式组合成程序文献或系统。确定算法和编写程序是两个重要步骤。 算法是指为
2、处理一个问题而采取的措施和步骤,或者说处理步骤的精准描述。算法分为数值运算算法和非数值运算算法。数值运算算法的目标是计算数值解,如求方程的根,求函数的定积分等。非数值运算算法,包括的范围很广,常见的办公室自动化系统、管理领域、商业领域及医学应用等等,重要是描述其处理应用问题的逻辑步骤。 描述实现算法的逻辑步骤,一般采取流程图方式,流程图分老式流程图;N--S流程图等。老式流程图是用某些图框,流程线以及文字阐明来描述操作过程,这么的表示算法,直观,形象,轻易了解。如图4.1和图4.2: .“起止框”用来表示算法的开始和结束。 “处理框”用来表示一般的数据处理。 “输入/出框”表示输入,
3、输出操作。 “流程线”表示流程的方向(执行方向)。 “连接点”用于将画在不一样地方的线连接起来。 “判断框”用来依照给定条件是否满足,决定执行两条途径中的某一途径。 图4.1 拿到一个问题后,首先确定并写出算法,画出结构流程图,然后再依照算法书写程序,是一个良好的习惯。这么做不但可提升所写程序的正确性,也轻易修改程序,提升整个程序设计的效率 4.1.2源程序实例 例:显示”student.dbf”表中“总成绩 “小于360的所有学生的学号,姓名,总成绩. 分析问题:逐一判断每条统计的总成绩字段的值是否不小于360,假如不小于就显示,否则不显示.依照分析
4、成果画出结构流程图,如:图4.2,然后写出源程序如下: SET TALK OFF CLEAR OPEN DATABASE STUDENTS USE STUDENT1 DO WHILE !EOF() 初始化 打开数据库和表 是否表末尾 总成绩>360 显示,移统计指针 移统计指针 结束 IF 总成绩>=360 ? 学号,姓名,总成绩 SKIP ELSE Y SKIP ENDIF N ENDDO CLOSE DATABASE
5、N Y N RETURN N Y 4.1.3 程序的创建、编辑和运行 VFP6.0 源程序文献的扩展名是.PRG, 程序运行时,系统自动编译产生扩展名为.FXP 的文献, 其文献主名与.PRG为扩展名的文献主名相同, 在VFP下若修改了.PRG 为扩展名的文献,系统也会自动重新编译. 4.1.3.1程序文献的创建 图4.2 创建VFP6.0 源程序文献,可使用任何文本编辑器建立;本系统
6、中使用自身编辑器创建,编辑源程序文献。VFP提供了如下三种措施。 图4-3编辑文献窗口 图4-2新建 文献 措施一 能够在VFP主窗口的 “文献“ 菜单中选择“新建“或工具栏中的“新建” 按钮,选择“程序“ 如图 4-2所示。然后单击“新建文献”,这时系统将打开一个编辑窗口,能够往里输入程序,如图4-3所示。 源程序输完后, 利用文献菜单进行保存。 也可立即利用 【程序】|【运行】菜单 和【程序】|【编译】菜单,进行编译和运行程序。程序执行成果显示在主窗口中。 措施二 在命令窗口中执行命令: MODIFY COMMAND <文献名> 这时,系统将打开一
7、个如图4-3的编辑窗口,能够往里输入程序代码。编辑完成,使用CTRL+W键,则存盘退出。 措施三 在“项目管理器”中选择“代码”选项卡中的程序选项,选择“新建”命令。系统将打开编辑窗口,能够创建一个程序,如图4-4所示。 图4-4在项目管理器中建立程序 4.1.3.2 程序的保存 程序输入完成后,能够选择“文献”菜单中的“保存”项保存程序文献。 图4-5 关闭没有保存的程序时将出现问询 若用户要关闭一个没有保存的程序,则会弹出对应的对话框,提示用户是保存还是放弃已作的修改,如图4-5所示。 若用户保存了一个由“项目管理器”创建的程序,则该程序被加入项
8、目中。若用户保存了一个尚未命名的程序,则会打开“另存为。。。。”对话框,用户应当从中选择或输入正确的盘符、途径、文献名。程序保存后,用户能够在其后任一时刻运行或修改程序。 4.1.3.3程序的修改 程序的修改即对源程序文献打开进行编辑。有如下措施: 措施一 若程序包括在某一个项目中,则能够在“项目管理器“中选定它,并选择“修改” 措施二 在“文献”菜单中选择“打开”命令,这时将出现一个包括文献列表的“文献类型”对话框。从中选择“程序”,然后找到要编辑修改的程序,选定后单击“确定”按钮,如图4-6所示。 图4-6 在打开文献窗口中选定要修改的程序 措施三 在“命令”窗
9、口中键入如下命令: MODIFY COMMAND <程序文献名> 然后将出现程序文献编辑窗口,如图 4-3 所示。接下来可对显示在编辑窗口中的程序进行修改。 4.1.3.4 程序的运行 程序创建或修改完成,最后需要运行。运行程序有如下几个措施。 措施一 在“程序”菜单中选择“运行”菜单项,然后选择一个程序文献,如图4-6 措施二 在命令窗口中运行命令:DO <程序文献名> 措施三 若程序包括在一个项目中,则能够在“项目管理器”中选定它并选择“运行”命 令,如图4-4 所示。 4.2常用命令和语句 VFP的一个特点,是大
10、量使用系统环境设置命令以及其他某些控制命令,以协助用户进行数据处理、安全管理、程序调试、成果输出等方面的工作。本节重要简介某些常用的命令和语句。 4.2.1基本输入、输出语句 程序最基本的操作就是输入、输出。输入是从键盘或鼠标等设备中接收数据。输出是指将计算机所做的运算成果输出到屏幕或打印机。 4.2.1.1输入命令 1)字符型键盘输入命令 ACCEPT 格式:ACCEPT [<提示>] TO <内存变量> 功效: 建立内存变量,并用键盘输入的方式将字符型数据赋值给内存变量。 阐明:①<提示>表示需输入内容的提示信息,是命令执行时显示的内容。<提
11、示>一般为字符型常量,字符型变量或字符型体现式。 ② <内存变量>表示存储字符数据的字符变量或数组元素。 ③ 输入的数据作为字符型数据处理,不需要定界符括起来。若使用定界符,则定界符成为输入字符的一部分。输入回车健则按空字符处理。 例11-2 输入班级编号和姓名,并打印出来。 ACCEPT “请输入班级编号:”TO number ACCEPT “请输入姓名:”TO name ?“班级编号:”,number,“姓名:”,name 2)任意类型键盘输入命令INPUT 格式:INPUT [<提示>] TO <内存变量> 功效: 建立内存变量,并用键盘输入的方式将数值型,字
12、符型,逻辑型或日期型数据赋值给内存变量。 阐明:① <提示>是命令执行时显示的提示内容。可是一个字符型体现式。 ② <内存变量>可为数组元素。内存变量无须事先定义。 ③ 从键盘输入的数据能够是命令允许的四种类型体现式。执行该命令时计算键盘输入的体现式的值,将其赋给内存变量。 ④ 字符型常量必须有定界符,且不能单用回车输入。 3)程序暂停,等候接收单字符命令WAIT 格式:WAIT [<提示>] TO <内存变量> [WINDOW[ AT <行坐标,列坐标>]] [TIMEOUT <等候秒数>]
13、 功效: 显示提示并暂停程序运行,直到按下任意一键或鼠标按键程序才继续执行。 阐明:① <提示>表示要显示提示的内容,省略提示,系统给出“按任意键继续。。。。。。。”。 ② TO<内存变量>]表示键盘的输入以字符形式存入指定的内存变量。内存变量类型为字符型,宽度为1。 ③ [WINDOW]表示在Visual FoxPro主窗口右上角出现的系统消息窗口的位置中显示消息。WAIT WINDOW 支持多行消息。 ④ [AT<行坐标,列坐标>]指Visual FoxPro主窗口中消息窗口的位置。 ⑤ [NOWAIT]表示在消息被显示后不移去消息窗
14、口,立即继续执行程序。省略时,程序暂停直到按下一个键或鼠标按钮,并将消息窗口从主窗口中移走。 4.2.1.2 格式输出命令 格式:@ <行,列>SAY <体现式>[PICTURE<模式符>][FUNCTION<功效符>] 功效:在指定坐标位置按格式输出体现式的值。 例11-5 在程序编辑窗口输入如下内容 *ex1.PRG Vb1=49562.89 Vb2=--0.5 @3,10 SAY Vb1 FUNCTION”B” @5,10 SAY Vb1 FUNCTION”C” @7,10 SAY Vb2 F
15、UNCTION”X” 运行ex1.PRG 成果显示 49562.89 49562.89CR _0.5DB 4.2.1.3 格式输入命令 格式:@< 行,列>SAY<提示信息>GET<变量> [FUNCTION<功效符>] [PICTURE<模式符> [RANGE<数值体现式1>,<数值体现式2> [VALID<逻辑体现>] READ[SAVE] 功效:在指定行、列首先显示<提示信息>,接着按要求的格式反显GET后变量的值;当执行命令READ时,子命令GET被激活,其变量值处在编辑状态。一个READ语句能够激活多个在它前面的GET子命令。 阐明:①
16、命令中的功效符和模式符代码及其含义如下表11-1和表11-2 ② 命令的执行过程是,系统先在指定的行列显示SAY后的提示信息,在提示信息后显示GET变量的值,此前GET 后的变量必须赋值,且变量值反显,当次序执行READ语句后,反显的变量值被激活,此时,可编辑变量的值,按回车键可结束此过程。 ③ 一个READ命令可激活多个GET的编辑区,因此,只要GET 语句是在READ 语句前,当第一个GET 激活变量值编辑后光标可自动跳到下一个 编辑区,依次执行。 ④RANGE中数值体现式1和2,表示数据编辑和显示的下限和上限。 ⑤ VALID<逻辑体现式>表示数据编辑和显
17、示的条件范围。 表4-1 PICTURE模式符代码表 代码 含义 代码 含义 A 只允许字母 L 只允许逻辑型数据 N 只允许字母或数字 X 允许任何字符 Y 只允许逻辑数据且小写换大写 G 只允许数字 # 允许数字,空格和正负号 ! 小写转换成大写 ¥ 数值前显示货
18、币符号 · 指定小数点位置 , 分隔多位数 * 数值前显示星号 表4-2 FUNCTION功效符代码表 代码 含义 代码 含义 A 只允许字符字母 B 数值数据在显示区左对齐 C 在正数之后显示CR表示贷款 D 使用目前的SetDate日期格式 E 使用欧洲日期格式Dd/mm/yy L 数值显示时显示前导0,而不是空格
19、X 在负数背面显示DB表示借贷 T 去掉体现式首尾空格 S(n) 限制字符显示的宽度为n个字符 Z 数值为0时刻用空格显示 C 将负数括在括号内 ! 将小写字母转化成大写字母 * 用科学计数法显示 ¥ 用Set CURRENCY指定货币格式显示 例4-6 指定坐标位置的格式输出例1。 **exp.prg va1=47612.78 va2=-0.6 @4,10 say va1 function “B” @8,10 say va1 function “c” @10,10 say va2
20、function “x” 将以上程序存盘,并运行。 成果显示: 47612.78 47612.78CR -0.6DB 例4-7 格式输出例2。 **exp.prg vbr1=space(20) vbr2=0 vbr3=date() var4=.F. clear @4,15 say “编辑字符:” get vbr1 function “s14!” @5,15 say “编辑数字:” get vbr2 picture “999999.99”RANGE 1000,40000 @6,15 say “编辑日期:” get vbr3 VLALID vb
21、r3 22、注释行
格式 * <注释内容> 或 NOTE <注释内容>
2) 行末注释
格式 <执行语句> && <注释内容>
例:
* 这是一个示例程序
* 1999.9.9
SET STATU ON && 显示状态栏
NAME=“张三”
* ACCEPT “姓名:” TO NAME
?NAME
CANCEL
4.2.2.2 续行标志
VFP 允许一个语句行最多可又254 个字符长,这一长度足以满足绝大多数语句格式的要求,不过,为了使程序便于阅读,往往需要将一行程序分作几行来写。将一行分作几行来写时,要使用续行标志“;”,表示本语句尚未 23、结束。
例如:
REPLACE 应发工资 WITH 基本工资*1.15+职务津贴+奖金;
扣款 WITH 房租水电+医药费+应发工资*所得税率;
是发工资 WITH 应发工资-扣款
4.2.2.3 指定缺省驱动器和目录
因为数据库应用一般包括大量的文献,为了应用程序的顺利进行,应当将这些文献集中在一个专属目录中。然后将此专属目录指定为缺省驱动器和目录,这么既可大大地以便程序开发工作,又能确保应用程序的顺利进行。
将一专属目录指定为缺省驱动器和目录,有两种方式:
(1) 在程序或命令窗口中使用SET DEFAULT 24、命令,命令格式为
SET DEFAULT TO [<途径>]
例如:指定C:\mysystem\gzl 为缺省 目录;
SET DEFAULT TO C:\MYSYSTEM\GZL
若执行不带途径的 SET DEFAULT 命令,则恢复系统缺省设置。
(2) 修改系统缺省设置。在缺省系统配备文献 CONFIG.FPW或专属系统配备文献(如:MYCONFIG.FPW)中,假如下面一行:
DEFAULT=C:\MYSYSTEM\GZL
4.2 控制结构
VFP的程序结构,与其他高级语言同样,分为三种控制结构,即次序结构、分支结构和循环结构,各个结构能够实现不一样 25、的功效。
图4-7
语句系列2
语句系列1
4.3.1次序结构
次序结构是程序结构设计中最常用,最简单,最基础的基本结构。该结构的特点表白语句排列的次序就是命令的执行次序, 其间既没有分支跳转、也没有重复。如图4-7。组成次序结构的语句,一般包括赋值语句、输入、输出、注释和终止语句以及有关系统环境设置等。
4.3.2选择结构
选择结构:选择结构是程序设计中的基本结构之一。它用选择命令描述分支现象,确定程序执行的途径。常用的选择命令有单条件选择和多条件选择。
如图4-8
Y
命令组1
N
命令组2
条件
1、IF条件选择命令
格式:IF 26、 〈条件体现式〉[THEN]
[命令组1]
[ELSE
[命令组2]]
ENDIF
功效:若<条件体现式>的值为真,执行<命令组1>;否则(即<条件体现式>的值为假)执行<命令组2>;无论哪种情况,命令组系列执行完后,就执行ENDIF下的第一个命令。如图4-8所示.
阐明:① <条件体现式>可为关系或逻辑体现式,其逻辑值为T或F;当[ELSE-[命令组2]]不存在时,<条件体现式>的值为真,执行<命令组1>后,就转到执行ENDIF之后的第一个命令;若<条件体现式>的值为假,则不执行IF与ENDIF之间的命令系 27、列,而直接转到执行ENDIF之后的第一个命令。
② IF—ENDIF结构命令必须配对使用;并且能够通过多层嵌套以实现多条件的选择。
例11-9 铁路拖运行李,从甲地到乙地,按要求每张客票拖运行李不超出50千克时,每千克0.25元,如超出50千克,超出部分按每千克0.45元计算。编程,把行李重量输入计算机,计算出运费,并打印付款清单。
问题分析:设行李重量W千克,应付运费P元,则运费公式为:
0.25*W 当W≤50
P=
50*0.25+(W-50)*0.45 当W>50
编写程序为: 28、
INPUT“请输入行李重量:”TO W
IF W<=50
P=0.25*W
ELSE
P=50*0.25+(W-50)*0.45
ENDIF
?“应付运输费为:”,P,“元”
CANCEL
2、IF嵌套条件选择结构
在IF条件选择结构中,允许包括新的选择结构,一层套一层形成嵌套结构。
注意:形成嵌套结构中,只允许嵌套,不允许交叉,层次必须分明。
例 11-10 已知系数a,b,c编写程序,求一 29、元二次方程ax2+bx+c=0的根。
例题分析:①当a<>0时,有两个根;
②当△>0 时,有两个不一样的实根;
③当△=0 时,有两个相同的实根;
④当△<0 时,有两个不一样的根;
⑤当a=0,b<>0时,有一个根;
⑥当a=0,b=0 时,方程无意
依照以上分析,写出程序:
INPUT “a=” TO a
INPUT “b=” TO b
INPUT “c 30、 TO c
IF a<>0
delta=b^2-4*a*c
re=-b/(2*a)
im=SQRT(ABS(delta))/(2*a)
IF delta>=0
root1=re+im
root1=re-im
? “两个根为:“,root1,root2
ELSE
? “两个根为:“,re,”+”,im,”I”, re,”- 31、im,”I”
ENDIF
ELSE
IF b<>0
? “只有一个根:”,-c/b
ELSE
? “方程退化”
ENDIF
ENDIF
CANCEL
3、DO CASE多条件选择命令
格式:DO CASE
CASE<条件体现式1>
<命令组1>
CASE<条件体现式2>
32、
<命令组2
… …
CASE<条件体现式n>
<命令组n>
[OTHERWISE<命令组n+1>]
ENDCASE
图4-9多条件分支语句
语句组n
语句组1
语句组2
条件2
语句组3
条件3
Otherwise
条件1
功效:执行时,系统将依次检查每一个条件体现式的值,当找到有一个条件为真时,则执行该条件下的命令系列,接着再执行ENDCASE背面的语句,目前面几个条件体现式值均为假时,若有OTHERWISE就执行语句序列n+ 33、1。否则就直接执行ENDCASE背面的语句。如图4-9所示:
阐明:① 在DO CASE与第一个CASE之间不能有任何命令,并且在一个DO CASE结构中,最多只能执行一个CASE语句。
② <条件体现式>能够为关系体现式或逻辑体现式,依照其逻辑值进行判断,若为.T.,就执行该[命令组],直到遇到下一个CASE或OTHERWISE就转向ENDCASE背面的第一条命令。
③ 假如没有一个<条件>为.T.,就执行OTHERWISE背面的[命令组],转到ENDCASE之后的语句。假如没有OTHERWISE,则不作任何操作就转向ENDCASE之后的第一条命令。
④ DO CASE与ENDCAS 34、E必须正确配对;并且本命令结构只能在程序中使用,且DO CASE,CASE,OTHERWISE,ENDCASE必须各占一行,。
例11-11 设计一个按不一样幼儿年龄服药的程序,年龄变量为AGE,每次服药次数COUNT,每次服药量MOUNT。程序为:
MEDICINE=‘阿司匹林’
INPUT‘输入年龄:’TO AGE
DO CASE
CASE AGE<5
COUNTS=‘4次/天’
MOUNT=‘每次1片’
CASE 35、 AGE<10
COUNTS=‘4次/天’
MOUNT=‘每次2片’
OTHERWISE
COUNTS=‘3次/天’
MOUNT=‘每次2片’
ENDCASE
?MEDICINE+‘服法是’+COUNTS+‘·' +MOUNT
RETURN
DO CASE 命令表示程序的多分支结构,与IF命令同样允许多重嵌套,既能够多个DO CASE-ENDCASE一层层嵌套,也能够DO CASE-E 36、NDCAS与IF-ENDIF嵌套。
例11-12 对students库中3个表student.dbf scure1.dbf 和symbolic.dbf 用CASE命令实目前不一样的条件下显示不一样的文献统计。
SET TALK OFF
ACCEPT “输入表文献名:” TO NAME
OPEN OPENDATABASE STUDENTS
DO CASE
CASE NAME=”student”
USE student
DISPLY ALL FOR 专业= “临床医学”
CASE NAME=”scure1”
37、 USE scure1
AVERGE 生物 TO t1 FOR SUBSTR(学号,7,1)=”4”
AVERGE 生物 TO t2 FOR SUBSTR(学号,7,1)<>”4”
? “T1=”,t1,”T2=”,t2
CASE NAME=”symbolic”
USE symbolic
LIST FOR “96” $ 学号
ENDCASE
use &NAME
WAIT
LIST
CLOSE DATABASE
RETURN
4.3.3循环结构程序设计
图 38、4-10循环结构流程图
N
Y
exit
loop
语句组
条件
循环结构是程序设计的一个基本结构。描述循环现象的命令重要为实现某一段程序有规律的重复执行。VFP中给出三种循环结构命令,“当型”,“步长型”和“表扫描型”。VFP中各循环结构的基本流程是同样的 ,如图4-10所示。
1、当循环命令DO WHILE—ENDDO
格式:DO WHILE <条件体现式>
[<命令组>]
[EXIT]
[LOOP]
ENDDO
功效:当<条件体现式>的计算值为真时,就使DO WHI 39、LE…ENDDO之间 的命令序列重复执行,以实现循环;当条件体现式的值为假时,退出循环执行ENDDO后的命令。
阐明:① 循环结构的DO WHILE为循环起始语句,ENDDO为循环终端语句,在DO WHILE与ENDDO之间的语句称循环体。
② <条件体现式>的值是逻辑值。执行时,系统先检测逻辑值的真、假而确定是否执行循环体。ENDDO命令是将循环返回到循环的起始语句。执行过程如图4-10所示。
③强制退出循环命令EXIT,表示执行该命令后从控制从DO WHILE…ENDDO循环中跳出,而去执行ENDDO后的命令。[LOOP]执行该命令后,将控制直接转回到DO WHILE子句,而不执行L 40、OOP和ENDDO之间的命令,LOOP称为无条件循环命令,并且只能在循环结构中使用。一般情况下,在循环体中出现LOOP或EXIT命令时就会有IF条件选择命令的配合使用。
④do while …….enddo 必须成对出现,并且do while …….enddo 可进行嵌套,形成多重循环。
例11-13 有一张厚0.5毫米,面积足够大的纸,将它不停对折。问对折多少次后,其厚度可达珠穆郎玛峰的高度(8848米)。
问题分析: 每次对折都是上次厚度的2倍,然后用此厚度与珠穆郎玛峰的高度作比较,每次循环作一次计数,以便统计对折的次数。
N=0
H=0.5
DO WHILE H 41、< 88488000
N=N+1
H=2*H
ENDDO
?“对折次数为:”,H
CANCEL
例11-14 在数据库STUDENTS.DBC的表Student.DBF 中找出所有男性的学生。
SET TALK OFF
OPEN DATABASE STUDENTS
USE STUDENT
DO WHILE .T.
IF 性别 < > ‘男’
SKIP
Else
DISPLAY
SKIP
ENDI 42、F
IF EOF( )
EXIT
ENDIF
ENDDO
CLOSE DATABASE
RETURN
当循环结构的嵌套。循环结构嵌套是在一个循环体内又完整的包括另一个循环,当循环能够嵌套形成多重循环,但要求每层循环DO WHILE…ENDDO 必须成对出现,不能交叉。如:
DO WHILE<条件1>
DO WHILE<条件2>
内 <命令序列>
43、 ENDDO
外
DO WHILE <条件3>
内 <命令序列>
ENDDO
ENDDO
例11-15 打印九九乘法表。
程序(EXP.PRG)如下:
Set talk off
Clear
A=1
B=1
Do while A<=9
Do while B<=9
T=A*B
?? T
B=B+1
ENDDO
A=A+1
?
Enddo
Cancel
以上双循环执行过程是:当第一次进入外循环DO WHILE A<=9…ENDDO时 44、内循环DO WHILE B<=9…ENDDO 中的循环体需执行9次,输出1,2,…,9。当第十次执行DO WHILE B<=9时,因为B<=9为假时,需跳到执行A=A+1和?命令。当第二次进入DO WHILE A<=9…ENDDO的循环体时,内循环又执行9次输出为2,4,…,18。当第十次执行内循环DO WHILE B<=9时,B<=9为假,跳出内循环,这么重复下去外循环循环9次,内循环共循环81次,直到输出T的值为81。然后整个程序结束。
2、步长型循环(或计数循环)FOR—ENDFOR
格式 FOR <循环变量>=<初值> TO <终值> [STEP <步长值>]
<命令组> 45、
[EXIT]
[LOOP]
ENDFOR(或NEXT)
功效:执行时,系统首先给循环变量赋初值,然后判断循环变量的值是否超出终值(即循环终值),若超出则跳出循环,执行ENDFOR背面的命令,否则重复依次执行循环体命令组序列及语句。
阐明:① FOR…循环起始语句,ENDFOR为循环终端语句,在FOR…ENDFOR之间的语句序列为循环体。
② 循环变量的初值,终值和步长确定循环次数。INT((终值-初值)/ 步长)+1为循环次数。
③ 步长值可为正值和负值,步长缺省时,系统默认步长值为1。
④ EXIT和LOOP命令的使用方法与DO WHILE循环结构中的使用相同 46、
⑤ FOR—ENDFOR循环可嵌套使用。
例11-17 求1!+2!+3!+…+N!的值
S=O
T=1
INPUT “请输入N的值:“ TO N
FOR X=1 TO N
T=T*X
S=S+T
ENDFOR
? “S=”;S
CANCEL
例11-18 设计一个保密口令程序,要求用户使用某个系统时,必须回答口令,该程序口令为“49712”才能允许进入系统,但最多只允许输入三 47、次,否则,退 FoxPro系统。程序如下:
SET TALK OFF
FOR I=1 TO 3
CLEAR
@10,10 SAY “请输入口令:“
SET CONSOLE OFF
ACCEPT TO k1
SET CONSOLE ON
IF k1=“49712”
WAIT“欢迎使用本系统!”TIMEOUT 10
EXIT
ELSE
WAIT“口令错,请按任意键后重新输入!”
ENDIF
ENDFOR
IF I>3
WAIT “对不起 48、你不能使用本系统!“TIMEOUT 10
QUIT
ENDIF
RETURN
3、循环结构SCAN_ENDSCAN
对数据表和统计的处理,用DO WHILE—ENDDO和FOR—ENDFOR循环命令编程时,需要编写统计指针的移动和控制移动的多条命令。因为,这两条命令用于操作数据统计的编程不够理想,效率不高。VFP提供了SCAN—ENDSCAN命令,使用该命令编写处理统计的程序时,不但形式简洁,并且程序执行速度和效率都能得到提升。
格式:SCAN[NOOPTIMIZE] [SCOPE][FOR 49、
[EXIT]
ENDSCAN
功效:对目前数据表中符合指定条件的数据统计按照命令组序列进行处理(SCAN表示循环开始,并按指定条件移动统计指针;ENDSCAN表示一次循环结束,使循环返回。)
阐明:① NOOPTIMIZE参数严禁扫描Rushmore优化。若VFP使用Rushmore技术来优化数据处理。刚技术能够提升其性能。
② SCOPE参数指定扫描范围,只有在范围内的统计才能扫描,扫描范围为ALL、NEXT、RECORD N和REST,缺省为ALL
③ FOR exp1是一个过滤条件,它能够过滤掉不扫描的统计。WHILE exp2指定条件体现式,只要其值为真,命令就执行。
50、④ LOOP使控制直接返回到,放在SCAN和ENDSCAN之间任意位置,EXIT使控制转向ENDSCAN 后的第一条命令。使用方法与在Do While 循环结构中使用同样。
例4-19 输出临床医学,学制五年的全体学生的学号,姓名,专业,学制.
SET TALK OFF
CLEAR
OPEN DATABASE STUDENTS
USE STUDENT
CLEAR
SCAN FOR 专业= “临床医学”.AND. 学制= ‘五’
? 学号,姓名,专业,学制
ENDSCAN
C






