DO WHILE i<=99 s=s+i
学
IF M>100 EXIT
学 进 程 与 设 计
DO WHILE .NOT. EOF() IF MOD(学号,3)=0 ?姓名,学号
ENDIF SKIP ENDDO USE
例 7.8:显示学生表 XS.DBF 中在 1980 年以后出生的学生记录。
USE XS
DO WHILE NOT EOF( )
IF 出生年月>=CTOD(“1980-01-30”)
DISP ENDIF SKIP ENDDO
7.4.2 记数循环语句 FOR … ENDFOR 格式:
FOR 循环变量=初值 TO 终值 [ STEP 步长 ] < 语句系列 >
[ EXIT ] [ LOOP]
ENDFOR
功能:当循环变量的值不大于终值时,执行循环操作。每循环一 次,循环变量的值自动递增一个步长值。
说明:
①循环变量为任意一个内存变量,不需要事先定义。
②初值、终值、步长均为一个数值表达式,其值可为正或负或小 数。
③若不选[STEP 步长]选项,递增步长为 1。
④[LOOP]选项实现循环短路操作,[EXIT] 选项实现结束当前循环 操作。
在 循 环 之 前 就 可 以 确 定 出 循 环 次 数 时 一 般 用 该 循环结构
学 进 程 与 设 计
例 7.9:求 1000 之内所有偶数之和 S=0
FOR I=0 TO 1000 STEP 2 S=S+I
NEXT
?“1000 之内所有偶数之和为”,S
7.4.3数据表扫描循环语句 SCAN ¼ ENDSCAN 格式:
SCAN [ NOOPTIMIZE ] [ 范围 ]
[ FOR<条件表达式 1> ][WHILE<条件表达式 2>]
< 语句序列 >
[ EXIT ] [ LOOP]
ENDSCAN
功能:对当前打开的表文件在指定范围,满足条件的记录中进行自 上而下逐个扫描操作,随着记录指针的移动,SCAN 循环允许对指定的 每条记录执行相同的< 语句系列 >操作。
说明:SCAN 循环能自动移动指针,按条件指定记录,避免在循环 体内重复执行表文件查询命令。用 DO WHILE 循环也可以实现对表文件 的逐个扫描操作,但它需要借助函数 BOF()或 EOF()测试状态,用 SKIP 命令移动指针,不如 SCAN 循环方便。
例 7.10:分别统计学生表中男生和女生的人数。
STORE 0 TO X,Y SCAN
IF 性别 X=X+1 ELSE Y=Y+1 ENDIF ENDSCAN
比 较 使 用 前 两 种 循 环 结 构 扫 描 表 记 录 和 SCAN 结构的区别, 从 而 体 会 该 结构的优点
教
?”男生人数”,X,”女生人数”,Y 备注学 进 程 与 设 计
USE
使用循环语句时应注意的几点:
(1) DO WHILE 和 ENDDO 、 FOR 和 ENDFOR 、 SCAN 和 ENDSCAN必须配对使用。
(2)〈命令行序列〉可以是任何 FoxPro 命令或语句,也可以是循环 语句,即可以为多重循环。
(3)〈循环变量〉应是数值型的内存变量或数组元素。
(4) EXIT和 LOOP 命令嵌入在循环体内,可以改变循环次数,但是 不 能 单 独 使 用 。 EXIT 的 功 能 是 跳 出 循 环 , 转 去 执 行 ENDDO、ENDFOR、ENDSCAN 后面的第一条命令;LOOP 的功能是 转回到循环的开始处,重新对“条件”进行判断,相当于执行了一次 ENDDO、ENDFOR、ENDSCAN 命令,它可以改变〈命令行序列〉中 部分命令的执行次数。EXIT、LOOP 可以出现在〈命令行序列〉的任意 位置。
7.5多重循环
如果在一个循环体内又包含其他的循环,就构成多重循环,或称为循 环嵌套. 循环嵌套的层次不限.
格式:
循环头 1
<语句行序列 1>
循环头 2
<语句行序列 2>
循环头 N
<语句行序列 N>
循环结束 N …
循环结束 2 循环结束 1
例求 1!+2!+....+N!
I=1
FOR I=1 TO N
多 重 循 环 的 使 用 是 一 个 难点
学
?STR(I)+"*"+STR(J)+"="+STR(I*J) ENDFOR
? ENDFOR
在循环结构的循环体中可以使用任何合法的 visual forPro 命令
教学讲授小结:(5 分钟)
P203选择题(7,14,15,16,22) P206 填空题(2,3,4,5,67)