今天在做一道題時,學生在寫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 ,在循環開始時,編譯器就將循環的初值和終值同時計算好了,計算的時候終值是不會馬上用到初值的。