第4章 VB控制结构
一、本章知识点
1、If语句
(1)单分支结构的If语句 (2)双分支If语句 (3)多分支If语句 2、IIf函数
Var=IIf(条件,True部分,False部分) 3、Select Case语句(p121)
测试表达式可以是数值表达式或字符串表达式,也可以是一个常量或一个变量。如:
Case l,3,7 Case \,\
Case 1 To l0,\Case Is > 15
4、计数型循环(For - Next)
首先计算初值表达式(简称初值)、终值表达式(简称终值)、步长表达式(简称步长)的值,循环中其值不会发生改变 5、条件型循环(Do - Loop)
条件型循环的四种基本格式
二、试题与解析
选择题
1.在Select Case x结构中,描述判断条件3≤X≤7的测试项应该写成__________。 A.Case 3<=X<=7 B.Case 3<=X,X<=7 C.Case Is<=7,Is>=3 D.Case 3 To 7 【答案】D
填空题
1. 执行下面的程序,当单击窗体时,显示在窗体上第一行的内容是________,第二行的内
容是________。
Private Sub Form_Click( )
Dim i As Integer, Sum As Integer For I = 0.5 To 8.5 Step 2.5 Sum = Sum + I * 10 Next I Print Sum
Print I End Sub
【答案】200,10
【解析】I为整型变量,赋初值为0.5,系统将其转换为整型0,第一次循环结束后,加上步长2.5,即0+2.5,再转换为2,因此此题循环变量的取值为0,2,4,6,8,当循环变量的值为10时,超出终值,终止循环。(给整型变量赋带小数的值时,系统自动转换为整型,转换原则为四舍六入五成双,如3.1为3,3.6为4,3.5为4,2.5为2)
2.执行下面的程序,当单击窗体时,显示在窗体上第一行的内容是________,第三行的内容是________,第五行是________。
Private Sub Form_Click( ) Dim S As String, i As Integer, n(9) As Integer Dim S1 As String * 1, j As Integer S = Trim(“12345a307291b233”) For i = 1 To Len(S) S1 = Mid(S, I, 1) If S1 >= “0” And S1 <=”9” Then j = Val(S1) n(j) = n(j) + 1 End If Next I For j = 0 To 9 Print j; “:”; n(j) Next j
End Sub
【答案】0:1,2:3,4:1
【解析】此程序功能为统计字符串S中0—9数字出现的次数。 3.下面程序的功能是对密文解密。密文的加密方法是以字符为单位,取其ASCII码,按逆序保存(例如字母“e”的ASCII码是01100101,密文中则为10100110)。解密是加密的逆过程。完善程序,实现以上功能。
Private Sub Command1_Click()
Dim S As String, st As String Dim i as integer , n as integer S = Text1 Do Until n >=Len(S) ____1_____ If n Mod 8 <> 0 Then St = st & Mid(s , n, 1) Else St = st & Mid(s , n, 1) List1.AddItem St _____2____ End If
Loop End Sub
Private Sub Command2_Click() Dim S as String, st as String, I as Integer For I = 0 To ____3_____ ST = List1.List(i) For j = 1 To Len(st) S = Mid(st, j, 1) & S Next j For j = Len(S) To 1 Step –1 N = ____4______ Next j Text2 = Text2 & Chr(N) S = “” ____5____ Next i End Sub
【答案】(1)N=N+1,(2)St=””,(3) List1.ListCount-1,(4)N+Val(Mid(s,j,1))*2^(8-J),(5)N=0
【解析】Command1_Click过程中:N为计数器,表示对第N个数字进行操作,通过If语句对N进行判断是否是8的倍数,如是则表示St是一个密文字符的ASCII码逆序,输出至List1中,并将St清空,为下一个字符作准备。Command2_Click过程中:循环次数为List1中的列表项数,由于循环变量I是从0开始,因此循环终值为List1.ListCount-1,由于List1中存放的是密文的逆序,通过第一个For-Next j循环将其反射输出至S中,即S中存放的是密文的正序,再通过第二个For-Next j循环将S由二进制转换成十进制数N,最后再在循环体结束处将S和N清空,为解密下一字符作准备。
4.下面程序的功能是,验证任意一个大于5的奇数可表示为3个素数之和。完善程序,实现以上功能。
Option Base l
Private Sub Command1_Click()
Dim P() As Integer, N As Integer, L As Integer Dim I As Integer, J As Integer, k As Integer Dim ch As String
N=InputBox("输入一个大于5的奇数")
Label1.Caption=____1____ Call Prime(P, N) L=UBound(P) For I=1 To L For J=1 To L For k=1 To L
If ____2____ Then
ch=CStr(P(I)) & "+" & CStr(P(J)) & "+" & CStr(P(k)) Text1.Text=ch
____3____
End If Next k Next J Next I End Sub
Private Sub Prime(A() As Integer, N As Integer) Dim I As Integer, Idx As Integer Dim J As Integer For I=2 To N
For J=2 To Sqr(I)
If I Mod J=0 Then Exit For Next J
If J>Sqr(I) Then ____4____
ReDim Preserve A(Idx) A(Idx)=I
End If Next I End Sub
【答案】(1) N & \,(2) N = P(I) + P(J) + P(k) ,(3) Exit Sub ,(4) Idx = Idx + 1
5.将20个棋子围成一圈,按顺时针方向从1~20给棋子编号,从中取出棋子的规则是:从某编号棋子开始取出第1个棋子,然后按顺时针方向围绕圆周数棋子,从1数到2取第2个,再从1数到3取第3个,再从1数到4取第4个??直到取完。本程序的功能就是找出依照上述规则取棋子的编号序列,使得最后一个被取棋子的编号为指定的编号。例如:若指定最后取棋子的编号为9,则必须从编号为17的棋子开始取第一个棋子,取棋子的顺序是:17,19,2,6,11,18??9。完善程序,实现以上功能。
Option base 1
Private sub command1_Click()
Dim a(20) as integer, i as integer , k as integer Dim n as integer, number as integer, s as string Number=val(text2) For k=1 to 20 For i=1 to 20 a(i)=1 next i
s=____1____
call sub1(a, k, n, s) if n=number then text1=s exit for end if next k end sub
private sub sub1(a() as integer, Byval Idx As integer, n as integer, s as string) dim i as integer, js as integer, sum as integer dim ub as integer, step as integer ____2____ js=1:step=1 A(Idx)=0
Do while js<20 Step=step+1
____3____
Do While Sum If Idx>Ub Then ____4____ Sum=Sum+A(Idx) Loop A(Idx)=0 S=S & Left(CStr(Idx) & " ", 3) _____5____ If Js Mod 10=0 Then S=S & vbCrLf Loop N=Idx End Sub 【答案】(1) s = Left(CStr(k) & \ \,(2) ub = UBound(a)(或ub=20) ,(3) sum = 0 ,(4) Idx = 1,(5) js = js + 1 6.下列程序的功能是计算圆周率π(计算精确到第n项减1的绝对值小于10-5为止)。 ??2?22?22?2?22?2?2??? Option Explicit Private Sub Form_Click() Dim Y As Single, t As Single, a As Single Y=2:t=0 Do _____1______ a=2/t If ______2_______ Then Exit Do Y=Y*a Loop Print \End Sub 【答案】(1)t = Sqr(2 + t)(2)abs(a – 1) < 0.00001 7.执行下面程序,单击按钮Command1,在图片框Pic2中显示的第一行是_____1_____,第二行是_____2_____,第三行是____3_____。 Option Explicit Option Base 1