一道简单VB题的详解

来源:百度知道 编辑:UC知道 时间:2024/06/22 07:27:19
Private Sub Command1_Click()
Dim s As Integer
s = 5
Do
If s Mod 2 = 0 Then
s = s / 2
Else
s = 3 * s + 1
End If
Select Case s
Case s Mod 2 = 0
k = k + 1
Case Else
k = k + 2
End Select
Loop Until s = 1
End Sub

我算出来循环结果分别是s=16,k=1,
s=8,k=2
s=4,k=3
s=2,k=4
s=1,k=6
但答案上说不对。怎么回事? 错在哪里?VB 实际操作得出最后k=10。

语句故意写的不好。
Case又不是IF

Select Case s
Case s Mod 2 = 0
k = k + 1
Case Else
k = k + 2
End Select

在 s是偶数时,相当于

Select Case s
Case 1
k = k + 1
Case Else
k = k + 2
End Select

于是执行了5次 k=k+2
k=10

你在VB里单步跟踪试试。监视一下 k 值。

Private Sub Command1_Click()
Dim s As Integer
s = 5
Do
If s Mod 2 = 0 Then
s = s / 2
Else
s = 3 * s + 1
End If
Select Case s
Case s Mod 2 = 0
k = k + 1
Case Else
k = k + 2
End Select
Debug.Print s & " " & k
Loop Until s = 1
End Sub