北京师范大学出版社2008年版的普通高中课程标准实验教科书《数学》3(必修)第110页介绍了For循环,并在例题4的流程图中说明了for循环的运行机制。 例4 请阅读下列用For语句写出的算法,说明该算法的处理功能。
S=0
T=1
For i=1 To 20
S=S+i
T=T*i
Next
输出S
输出T
流程图:
这里的For循环中,使用的是如下的机制:
1、循环变量赋初值,记录终值及步长值;
2、执行循环体;
3、循环变量加步长值;
4、判断循环变量是否超过终值;若未超过,转至步骤2,执行循环体;若超过,则跳出循环。
我们权且将其称为机制Ⅰ。
框图如下:
实际上,For循环还存在着机制Ⅱ:
1、循环变量赋初值,记录终值及步长值;
2、判断循环变量是否超过终值;若未超过,进入步骤3,执行循环体;若超过,则跳出循环;
3、执行循环体;
4、循环变量加步长值。
5、转到步骤2,进行判断。
框图如下:
两种运行机制的不同处在于先判断还是先执行循环体。
机制Ⅰ是先执行循环体,再进行判断,所以循环体至少要执行一次。而机制Ⅱ则不同,它先进行判断,循环变量未超过终值时则执行循环体,一旦发现循环变量超过终值,立即跳出循环。
下面的Basic程序片段,在不同机制下输出结果就不一样。
For i = 1 To 0 Step 2
Print i
Next i
使用机制Ⅰ的Basic语言,输出:1
这是因为它是先执行循环体,再判断,虽然循环变量的初值已超过了终值,但还是先执行了一次循环体中的语句,所以输出1。
而使用机制Ⅱ的Basic语言,则没有输出。
这是因为它是先判断,发现循环变量的初值已超过终值,于是跳出循环,没有执行循环体中语句,所以没有输出。
早期的Basic语言有使用机制Ⅰ的,但现在流行的编程语言一般都使用机制Ⅱ。教参中的程序是用VB语言编写的。也采用机制Ⅱ。然而课本的解释却使用机制Ⅰ,与所用编程语言不符,所以,建议采用机制Ⅱ。