7.2.4 循环结构程序设计
循环能重复执行一组语句。可以预先指定要循环的次数,也可以预先不指定次数,只要某个条件成立,就可以一直循环下去,直到该条件不成立。
循环语句有三种:FOR…ENDFOR、DO WHILE…ENDDO、SCAN…ENDSCAN。
循环语句都是配对出现的,循环开始的语句称为循环的入口语句,如SCAN、FOR和DO WHILE语句;循环结束的语句称为循环的出口语句,如ENDSCAN、ENDFOR、ENDDO语句。在这个配对结构中间的一组语句常称为循环体。
一、FOR…ENDFOR
若事先知道循环的次数,可以使用FOR循环。
命令格式:
[LOOP]
[EXIT]
ENDFOR/NEXT
命令功能:
循环控制变量也叫计数器,每执行一次循环,循环变量就加一次步长,通过循环变量循环计数,控制重复执行循环体内命令组的次数,一直到循环控制变量大于终值时结束循环。
FOR循环的执行过程如下:
①首先将初值赋给循环变量,并保存终值和步长值;
②判断循环变量的值是否超过终值;
③若超过终值,即结束循环,执行ENDFOR|NEXT之后的语句;
④若未超过终值,那么执行循环体中的命令组;
⑤循环变量=循环变量+步长(若不选STEP,默认步长为1);
⑥转到②,重复上述②-⑤的过程。
命令说明:
①在开始执行FOR语句时,就将终值和步长值保存起来,在以后的运行中,不可能被改变;
②初值和终值可以是正值、负值和零。
③步长值可以是正值和负值,但不应为零(步长为零时,FOR循环将成为死循环),如果步长值为1,那么可以省略该子句,若循环控制变量的初值大于终值,则STEP项应为负值。
④LOOP语句和EXIT语句是循环体中的特殊语句,其功能,将在后面加以说明。
⑤FOR和ENDFOR|NEXT必须配对使用。FOR可以和ENDFOR配对使用,也可以和NEXT配对使用。
⑥FOR…ENDFOR|NEXT语句可以嵌套使用。也就是说,在FOR语句中又包含了另外的FOR语句,即多重循环。
FOR…ENDFOR结构流程图如图7-4所示。
图7-4 FOR…ENDFOR语句流程图
例7-3:计算1~100的累加和。
例7-4:输出几何图形——等腰三角形。
例7-5:计算一个字符串中包括多少个汉字。
其基本算法是从字符串中依次取一个字符,如果其ASCII码值大于127,则为一个汉字内码的第一个字节。
二、DO WHILE…ENDDO
如果循环次数未知,而是根据某一条件决定是否结束循环,可以使用DO WHILE…ENDDO语句。
命令格式:
DO WHILE条件表达式
命令组
ENDDO
命令功能:
在执行DO WHILE语句时,系统首先判断给定的条件(条件表达式)是否成立。如果不成立,那么执行ENDDO之后的语句,即结束循环;如果成立,那么执行循环体中的语句,当执行到ENDDO(循环结束语句)时,系统将返回到DO WHILE(循环开始语句),重新判断给定的条件是否成立,如果仍然成立,那么将再次执行循环体中的语句,依此往复,直到条件不成立时即结束循环,执行ENDDO之后的语句。
DO WHILE…ENDDO结构流程图,如图7-5所示。
图7-5 DO WHILE…ENDDO语句流程图
例7-6:计算1-100的偶数和与奇数和。
例7-7:将十进制数转换成二进制数表示,其基本算法是利用除2取余法,先得到低位,后得到高位。
三、基于表的循环命令:SCAN…ENDSCAN
命令格式:
SCAN[NOOPTIMIZE][范围][FOR<条件表达式1>][WHILE<条件表达式2>]
命令组
ENDSCAN
命令功能:
对当前表中符合条件的所有记录执行循环体内的代码块。
在执行SCAN语句时,系统首先将记录指针定位到指定范围内满足给定条件的首条记录上,然后判断EOF()函数是否为真。如果为真,那么执行ENDSCAN之后的语句,即结束循环;如果为假,那么执行循环体中的语句,当执行到ENDSCAN(循环结束语句)时,系统将记录指针自动定位到指定范围内满足给定条件的下一条记录上,并返回到SCAN(循环开始语句),重新判断EOF()函数是否为真,如果为假,那么将再次执行循环体中的语句,依此往复,直到EOF()函数为真时即结束循环,执行ENDSCAN之后的语句。
说明:
①[NOOPTIMIZE]参数,禁用Rushmore技术(内部优化数据访问技术)。
②[范围]参数,可以使用ALL、NEXT n、RECORD n、REST等子句,限定扫描记录的范围,其默认值为ALL。
③[FOR<条件表达式1>]限定对所有满足条件的记录进行操作。
④[WHILE<条件表达式1>]限定对所有连续满足条件的记录进行操作。
⑤必须先打开一个表。
SCAN…ENDSCAN结构流程图,如图7-6所示。
图7-6 SCAN…ENDSCAN语句流程图
例7-8:逐条显示xs表中的记录。
例7-9:逐条显示xs表中前10条记录内的偶数行记录。
CLEAR
USE xs
SCAN FOR recno()% 2=0 WHILE recno()% 10!=0
DISP
INKEY(0.6)
ENDSCAN
四、循环结构中的LOOP命令与EXIT命令
(1)如果循环体中含有LOOP语句,则当执行到LOOP语句时,将跳过LOOP语句与循环出口语句之间的所有命令,返回到执行循环的入口语句(如SCAN、FOR和DO WHILE语句),进入下一次循环。
(2)EXIT是退出语句,如果循环体中含有EXIT语句,则当执行到EXIT语句时,无论循环结束条件是否满足,都将退出循环,程序转到出口语句外。
(3)LOOP语句和EXIT语句通常与选择结构语句搭配使用,即只有在满足给定条件的情况下才能执行这两条语句。
五、多重循环
多重循环就是循环语句中又包含着另一个循环语句,也称为循环嵌套。嵌套有几层循环,就称为几重循环。外层的循环语句称为外循环,被包含的循环语句称为内循环。前面介绍的三种循环语句可以相互嵌套,形成多重循环,在Visual FoxPro系统中,循环嵌套的层次不限。
需要注意的是:循环嵌套时,内循环必须完全包含在外循环中,不能出现交叉的情况。循环结构与分支结构允许混合嵌套使用,同样不允许交叉。其入口语句与其相应的出口语句必须成对出现。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。