第六章中的例6-12是一个由条件语句实现的循环。本章将介绍专门用于实现循环结构的3个语句,涉及的主要内容包括:
n 循环的概念
n WHILE循环结构
n WHILE循环结构的执行过程
n FOR-NEXT循环结构
n FOR-NEXT循环的执行过程
n DO循环结构
n 循环结构的嵌套
循环结构是结构化程序3种基本结构之一,它可以充分利用计算机处理速度快的特点,把许多复杂问题的求解步骤变为计算机重复执行某些简单的操作。因此,我们必须很好的掌握它们的应用技巧。本章的难点是对于循环结构的嵌套的理解和学习。
例如:求S=
算法:
本题的算法已在第二章例2-2进行过分析,它就是把加法的操作重复一百次,这就构成了循环。现在分别用条件语句和循环语句编写程序。
源程序1:
N=0:S=0
N=N+1
S=S+N
IF N<100 THEN 20
PRINT "S=";S
END
源程序2: 源程序3:
S=0:N=0 S=0
WHILE N<100 FOR N=1 TO 100
N=N+1 S=S+N
S=S+N NEXT N
WEND PRINT "S=";S
PRINT "S=";S END
END
程序说明:
以上3个程序都是完成同一算法的3种不同表现形式。其中,第1个程序是用条件语句实现的直到型循环。第2、3个程序是用WHILE-WEND和FOR-NEXT实现的当型循环。
WHILE〈条件〉
〈循环体〉
WEND
其中:〈条件〉:是关系表达式或逻辑表达式;
〈循环体〉:是一语句组,要重复执行的内容。
(1)WHILE循环的执行过程如图7-1所示。WHILE语句首先判断条件:当条件成立时,则执行WHILE和WEND之间的循环体,然后再转到WHILE语句重新进行判断;当条件不成立时,就退出循环转到WEND的后续语句。
(2)WHILE和WEND必须配对使用。

图7-1 WHILE循环的执行过程
[例7-1] 编程计算N!的值。
源程序:
REM EXAMPLE 1
INPUT N
T=1
WHILE 1<N
1=1+1
T=T*H
WEND
PRINT "T=";T
END
运行结果:
?5
T=120
程序说明:
当条件1<N为真时进行循环。5行语句为计数器,统计循环次数。6行语句为累乘器,将阶乘的值存放在T中。
[例7-2] 有一阶梯,若每步跨2阶,则最后剩下1阶;若每步跨3阶,则最后剩下2阶;若每步跨5阶,则最后剩4阶;若每步跨6阶,最后剩下5阶;只有每步跨7阶时,最后才正好走完,1阶不剩。请问这条阶梯有多少阶。
算法1:
由于阶梯数被2除后余1,所以不妨设初值X=3,然后用3除X,若不余2,则把X每次增加2,直到最后余2为止;再用5除,若不余4,则每次增加6(6是2与3的最小公倍数),直到余4为止;再用6除,若不余5,则每次增加30(30是2、3、5的最小公倍数),直到余5止;再用7除,若不能整除,每次增加30(30是2、3、5、6的最小公倍数),直到整除为止。此时X中放的数就是要求的阶梯数,N-S图如图7-2所示。

图7-2 N-S图
源程序:
REM EXAMPLE
X=3
WHILE X MOD 3<>2
X=X+2
WEND
WHILE X MOD 5<>4
X=X+6
WEND
WHILE X MOD 6<>5
X=X+30
WEND
WHILE X MOD7<>0
X=X+30
WEND
PRINT "X=";X
END
运行结果:
X=119
算法2:
根据题意,阶梯数能被7整除,设初值X=7,判断X是否满足题中的要求,如果满足,则打印X,否则X再增加7,再去判断,以此类推,直到满足要求,打印出X。
源程序:
REM EXAMPLE 2B
X=7
WHILE X MOD 2<>1 OR X MOD 3<>2
OR X MOD 5<>4 OR X MOD 6<>5
X=X+7
WEND
PRINT "X=";X
END
两种算法结果相同,算法2比算法1简单易懂。
FOR〈循环变量〉=〈初值〉 TO 〈终值〉 [STEP 〈步长〉]
〈循环体〉
NEXT 〈循环变量〉
其中:
〈循环变量〉:又称循环控制变量,是简单变量。
〈初值〉,〈终值〉,〈步长〉:可以是整型实型的常量、变量或算术表达式。
当步长为1时,[STEP〈步长〉]可以省略。
说明:
(1)FOR语句称为循环说明语句,也是循环的入口。它的含义是循环变量的取值从初值开始,每循环一次增加一个步长,直到超过终值为止,在语句中由此决定循环的执行次数。循环执行的次数可以用下面的公式计算出来。
循环次数=INT((终值-初值)/步长)+1。
凡是计算出的循环次数小于等于0的,循环次数为0。
(2)NEXT语句称为循环结束语句,是循环的出口。当执行该语句时,循环变量取下一个值,即把控制循环变量的当前值增加一个步长。
(3)FOR和NEXT之间的语句称为循环体,它是循环语句的主体,是需要多次重复执行的部分,可以由一个或多个语句组成。
执行过程如图7-3所示。

图7-3 FOR循环执行过程
(1)在执行FOR语句时,计算机首先把初值赋给循环变量,并自动记下终值和步长。
(2)将循环变量的值与终值比较,如果循环变量的当前值超过终值,则不执行循环体,执行NEXT的下语句。
(3)若循环变量的值未超过终值,则执行循环体。
(4)执行到NEXT语句,循环变量的当前值增加一个步长值再赋给变量,然后转到第2步。
(1)FOR语句和NEXT语句必须配对,而且同一循环中FOR语句和NEXT语句中的循环变量必须同名,否则就会出错。
(2)步长值可以是整数,也可以是小数,可以是正值,也可以是负值。
n 当步长值正时,在循环的执行过程中,循环变量按步长递增,直到循环变量的值变化到大于终值时,循环停止。例如:
FOR I=1 TO 10 STEP 2.5
n 步长值为正时,终止循环的条件是终值必须大于初值。
n 如果步长值为负,在执行循环的过程中,循环变量按步长递减,当循环变量值变化到小于终值时,循环才会停止。例如:
FOR X=5 TO 1 STEP -1
n 步长值为负时,终止循环的条件是终值必须小于初值。
n 当步值长为小数时:
FOR X=1 TO 3+0.5/2 STEP 0.5
当步长值为小数时,实数计算会产生一定误差,为确保循环的预定次数,建议终值加上半个步长,如例3所示。
(3)循环变量的初值,终值和步长的选择方法。
n 如果循环变量不出现在循环体内,仅仅用来控制执行循环次数,则可随意选择初值,终值和步长,只要保证完成需要的循环次数即可。为了提高速度,最好用整数。如要循环N次,则用FOR I =1 TO N
n 如果循环变理出在循环体内并参与运算,则应根据题目要求来选择初值,终值和步长。如例7-3。
[例7-3] 打印-π到π之间的正弦曲线,每隔10°打一“*”号。
源程序:
REM EXAMPLE 3
PI=3.14159
FOR X=-PI TO PI+(PI/18/2) STEP PI/18
PRINT INT(X* 180/PI);
PRINT TAB(32+20 * SIN(X));"*"
NEXT X
END
程序说明:
(1)根据该题要求,选择初值为-3.14159、终值为3.14159+(3.14159/18/2)、步长定为10°。终值加步长的一半是为了确保循环的正常次数。
(2)第5行语句是指定适当位置打印‘*’号,因为sinx的值是小于1的,取整后都为0,所以放大20倍,这样它的坐标值才能打印;为了使图形完整地显示在屏幕中部,故将正弦曲线的X轴线平移32格。