使用FOR循环语句的有关说明:
①省略STEP<步长>,则〈步长〉为默认值1;
②〈初值〉、〈终值〉和〈步长〉都可以是数值表达式,但这些表达式仅在循环语句开始执行时计算一次。循环语句执行过程中,初值、终值和步长是不会改变的,并由此确定循环的次数;
③可以在循环体内改变循环变量的值,但会改变循环执行次数;
④EXIT和LOOP命令可以出现在循环体内。执行LOOP命令时,结束本次循环,循环变量增加一个步长值,返回FOR循环头判断循环条件是否成立。执行EXIT命令时,程序跳出循环,执行循环尾后面的语句。
【例】从键盘输入10个数,编程找出其中的最大值和最小值。程序文件名为PA9.PRG。
SET TALK OFF
CLEAR
INPUT“请从键盘输入一个数:”TO A
STORE A TO MAX,MIN
FOR I=2 TO 10
INPUT“请从键盘输入一个数:”TO A
IF MAX
MAX=A
ENDIF
IF MIN>A
MIN=A
ENDIF
ENDFOR
?“最大值为:”,MAX
?“最小值为:”,MIN
SET TALK ON
RETURN
(3)“指针”型循环控制语句
“指针”型循环控制语句,即根据用户设置的表中的当前记录指针,
决定循环体内语句的执行次数据。
1)语句格式:
SCAN[〈范围〉][FOR〈条件表达式1〉
[WHILE〈条件表达式2〉]]
〈命令行序列〉
ENDSCAN
2)语句功能:
该语句在指定的范围内,用数据记录指针来控制循环次数。执行语句时,首先判断函数EOF()的值,若其值为“真”,则结束循环,否则,结合〈条件表达式1〉或〈条件表达式2〉,执行〈命令行序列〉,记录指针移到指定的范围和条件内的下一条记录,重新判断函数EOF()的值,直到函数EOF()的值为真时结束循环。
【例】输出“学生管理”数据库的“学生”表中所有团员的姓名和地址。
程序文件名为PA10.PRG。
SET TALK OFF
CLEAR
OPEN DATABASE学生管理
USE STUD
SCAN FOR是否团员
?姓名,地址
ENDSCAN
CLOSE DATABASE
SET TALK ON
RETURN
(4)使用循环语句时应注意的几点
1)DO WHILE和ENDDO、FOR和ENDFOR、SCAN和ENDSCAN必须配对使用。
2)〈命令行序列〉可以是任何FoxPro命令或语句,也可以是循环语句,即可以为多重循环。
3)〈循环变量〉应是数值型的内存变量或数组元素。
4)EXIT和LOOP命令嵌入在循环体内,可以改变循环次数,但是不能单独使用。EXIT的功能是跳出循环,转去执行ENDDO、ENDFOR、ENDSCAN后面的第一条命令;LOOP的功能是转回到循环的开始处,重新对“条件”进行判断,相当于执行了一次ENDDO、ENDFOR、ENDSCAN命令,它可以改变〈命令行序列〉中部分命令的执行次数。EXIT、LOOP可以出现在〈命令行序列〉的任意位置。
(5)多重循环
多重循环即循环的嵌套,是在一个循环结构的循环体中又包含另一个循环。我们称外层循环为外循环,被包含的循环为内循环。嵌套层数一般没有限制,但内循环的循环体必须完全包含在外循环的循环体中,不能相互交叉。正确的嵌套关系如:
DO WHILE<条件表达式1>
<语句序列11>
DO WHILE<条件表达式2>
<语句序列21>
DO WHILE<条件表达式3>
<语句序列3>
ENDDO
<语句行序列22>
ENDDO
<语句行序列12>
ENDDO
例题:
【例】编程输出下三角形乘法口诀表。程序文件名为PA11.PRG。
SET TALK OFF
CLEAR
X=1
DO WHILE X<=9
Y=1
DO WHILE Y<=X
S=X*Y
??STR(Y,1)+"*"+STR(X,1)+"="+STR(S,2)+""
Y=Y+1
ENDDO
?
X=X+1
ENDDO
SET TALK ON
RETURN