VB循环For的一点启示

今天在做一道题时,学生在写For上边界时,用了iMin

iMax = i: iMin = n - i + 1
For j = i To __________
  If score(j) > score(iMax) Then iMax = j
  If score(j) < score(iMin) Then iMin = j
Next j

 一开始我认为是错的,因为iMin随着循环的进行会变化。

但答案却是这个。

为此做了个验证。如下程序, 

Private Sub Command1_Click()
  Dim i As Integer
  For i = 1 To 3 - i
    Print i
  Next i
End Sub

 思考:该程序循环了几次?一般会认为循环了1次。

一般分析会是这样的:

初值i=1

终值3-i=2

第1次循环,输出1,接着i=i+1=2,终值3-i=3-2=1,

2<1为False。

但实际运行结果是:

思考,从程序结果来分析,终值3-i应该一开始就赋值了,并且作为了常量。

但是3-i=3-1=2,应该循环2次啊。

我们在做一个实验,如下代码:

Private Sub Command1_Click()
  Dim i As Integer
  i = 1
  For i = 1 To 3 - i
    Print i
  Next i
End Sub

从运行结果来看,在for循环外面现将i初始化为1后,3-i=3-1=2,

而拿掉i的初始化语句后,就变成循环3次。

原因分析如下:

1、dim i as integer定义了i变量,它的初值即为i=0;

2、for i=1 to 3-i ,在循环开始时,编译器就将循环的初值和终值同时计算好了,计算的时候终值是不会马上用到初值的。

原文地址:https://www.cnblogs.com/daveylin/p/9138743.html