• 沒有找到結果。

常见的有三种情况:

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)

课后小结