第4章VB控制结构
一.例题解析
(1)设有语句x=InputBox("输入数值","0","示例") , 程序运行后,如果从键盘上输入数值10并按回车键,则下列叙述中正确的是。
A)变量x的值是数值10
B)在InputBox对话框标题栏中显示的是“示例”
C)0是默认值
D)变量x的值是字符串"10"
【答案】D
【解析】InputBox函数一般格式是:
InputBox(<提示>[, 标题] [, 默认值] [, X] [, Y] [, 帮助文件名, 上下文编号])
参照一般格式可知,题干中的“输入数值”是对话框的提示部分,“0”是对话框的标题,“示例”是对话框的默认值。由于程序运行时用户输入了10,且该函数的返回值是字符串,所以选项D是正确答案。
(2)在窗体上放置一个命令按钮,然后编写如下事件过程:
Private Sub Command1_Click()
Dim a,b
a = InputBox("请输入一个整数")
b = InputBox("请输入一个整数")
Print b + a
End Sub
程序运行后,单击命令按钮,在输入对话框中分别输入321和456,输出结果为。
A)321456 B)456321
C)777 D)有语法错误,不能执行
【答案】B
【解析】“+”运算符有两个作用:对于字符串型运算数,执行字符串连接运算;对于数值型运算数,执行加法运算。InputBox函数的返回值是字符串,所以执行字符串连接运算,即将字符串a连接到字符串b之后,结果为456321。
(3)运行下列程序,单击窗体,则消息框中显示的提示是。
Private Sub Form_Click()
MsgBox Str(123 + 123)
End Sub
A)123+123 B)"246"
C)246 D)显示出错信息
【答案】C
【解析】MsgBox语句后给定的字符串参数Str(123 + 123)是消息框中要显示的提示信息。Str(123 + 123)函数首先计算算术表达式123+123,结果为246,然后将其转换为MsgBox 语句所需要的字符串类型的参数。但消息框中显示提示信息时不带字符串两侧的双引号定界符。
(4)执行如下语句后,Print语句的输出结果是。
A=100
Print IIf(A>50,"Large","Small")
A)1000 B)True C)Large D) Small
【答案】C
【解析】IIF函数的一般格式是IIf(表达式1,表达式2,表达式3)。当表达式1的值为True时,函数返回表达式2的值,否则返回表达式3的值。因而本题的正确答案是选项C。
(5)下列语句中,与Else匹配的If语句是。
If x>0 Then
If x<10 Then
Print x
Else
Print x*2
End if
End if
A)第一个B)第二个C)第一个或第二个D)程序有错误
【答案】B
【解析】当出现If语句的嵌套时,Else总是与它前面离它最近的一个If语句匹配,即“最近匹配原则”。
(6)运行下列程序,单击窗体,则输出结果是。
Private Sub Form_Click()
M = 5
If M >= 0 Then N = 1
If M >= 1 Then N = 2
If M >= 2 Then N = 3
Print N;
End Sub
A)1 B)2 C)3 D)1 2 3
【答案】C
【解析】按照语句的执行顺序,M首先被赋值为5,然后判断第一个条件M>=0,条件满足,变量N被赋值为1;继续判断第二个条件M>=1,条件仍然满足,变量N重新被赋值为2;最后判断第三个条件M>=2,条件仍然满足,所以变量N的值最后被赋值为3。Print 语句输出变量N的值是3。
(7)运行下列程序,单击窗体,从键盘输入50,则输出结果是。
Private Sub Form_Click()
a = Val(InputBox("A="))
Select Case a
Case Is < 100: Print a + 1;
Case Is < 80: Print a + 2;
Case Is < 60: Print a + 3;
Case Else: Print a + 4;
End Select
End Sub
A)51 B)52 C)53 D)51 52 53 54
【答案】A
【解析】Select Case语句的执行方法是:用测试表达式的值与第一个Case子句的表达式值进行比较,如果匹配,则执行第一个Case子句下的语句,执行完成结束Select语句的执行;如果不匹配,依次比较第二、第三、……各Case子句。
本例题中,A=50,与第一Case子句的条件匹配(Is<100),所以输出结果是51。
(8)在For循环中,循环控制变量的增量(循环步长)。
A)只能是整数B)只能是正整数
C)只能是不为0的整数D)任何数值型数据
【答案】D
【解析】For循环的控制变量和它的增量可以是任何一种数值型数据。但如果增量为0,在循环体内,必须有可以结束循环的语句,否则会形成“死循环”。
(9)运行下列程序后,单击窗体,则其中的循环体一共被执行次。
Private Sub Form_Click()
For I = 7 To 100 Step 5
Print I
Next I
End Sub
A)16 B)17 C)18 D)19
【答案】D
【解析】For~Next循环中,循环体的执行次数=Int((上界-下界)/步长+1),即Int((100-7)/5+1)。
(10)运行下列程序,单击窗体,则运行结果是。
Private Sub Form_Click()
For x = 1 To 2
a = 0
For y = 1 To x + 1
a = a + 1
Next y
Print a;
Next x
End Sub
A) 1 1 B) 0 0 C) 1 2 D) 2 3
【答案】D
【解析】本题是嵌套两层的For循环结构,外层循环控制变量是x,x的值由1变到2,控制执行两次循环体,每次执行循环体的第—个语句是把0赋给变量a,执行循环体的最后一个语句是输出a的值,用内层循环计算a的值,当x值为1时,内层循环执行2次,每次使a增1,退出内层循环时a的值为2,2是第—个输出;当x值为2时,内层循环执行3次,每次使a增1,退出内层循环时a的值为3,3是第二个输出。由于Print 语句以分号结束,因此,用紧凑格式输出2 和3。
(11)运行下列程序,单击窗体,则执行结果是。
Private Sub Form_Click()
s = 0
Do
s = (s + 1) * (s + 2)
Number = Number + 1
Loop Until s >= 30
Print Number; s
End Sub
A) 0 1 B) 30 30 C) 4 30 D) 3 182
【答案】D
【解析】本题使用了Do~Loop Until循环结构,循环初始设置s为0,循环的退出条件是s>=30,在循环中每次用(s+1)* (s+2)计算出新的s值,很容易算出第1次执行后s的值是2,第2次用3乘以4行后s的值是12,第3次用13乘以14行后s的值是182,到此s的值超过了30,退出循环。退出循环时共执行了3次循环,Number每次执行循环增l,所以Number的值是3,s的值是182。
(12)以下能够正确计算n!的程序是。
A) Private Sub Commandl_Click()
n=5: x=1
Do
x=x*i
i=i+1
Loop While i Print x End Sub B) Private Sub Commandl_Click() n=5: x=l: i=l Do x=x*i i=i+1 Loop While i Print x End Sub C) Private Sub Commandl_Click() n=5: x=1: i=1 Do x=x*i i=i+1 Loop While i<=n Print x End Sub D) Private Sub Commandl_Click() n=5:x=l:i=l Do x=x*i i=i+l Loop While i>n Print x End Sub 【答案】C 【解析】选项A中在循环体外没有为变量i赋初始值,因而变量i的初值为0,则循环体执行第一次的时候,存放阶乘的变量x的值改变为0,所以选项A是错误的。 选项B中各变量的初始值是正确的,错在判断循环执行的条件While i 选项D的错误原因也是判断循环执行的条件While i>n不符合题意,使用该条件循环体只能执行一次,即终止循环,即x中求出的是1!。 (13)在窗体上画一个命令按钮,名称为Command1。然后编写如下程序:Private Sub Command1_Click() For i = 1 To 4 For j = 0 To i Print Chr$(65 + i); Next j Print Next i End Sub 程序运行后,如果单击命令按钮,则在窗体上显示的内容是。 A)BB B)A C) B D)AA CCC BB CC BBB DDDD CCC DDD CCCC EEEEE DDDD EEEE DDDDD 【答案】A 【解析】当i为1时,j的取值为0、1,在同一行输出ASCⅡ码值为66的字符B两次后换行;同理,当i为2时,在同一行输出字符C三次后换行。依此类推。 二.练习题 1.单项选择题 1. 有如下程序: Private Sub Form_Click() ddd = MsgBox("注意", vbAbortRetryIgnore + vbExclamation, "标题") End Sub 运行后,单击窗体,则显示的消息对话框是。 A) B) C) D) 2. 下面程序运行后,单击窗体,输出的结果是。 Private Sub Form_Click() For i = 10 To 4 Step -2 k = i Next i Print k; i End Sub A) 5 2 B) 5 3 C) 4 2 D) 4 3 3. 下面程序中,能正确计算出10的阶乘值(10!)的是。 A) Private Sub Form_Click() p = 0 For i = 1 To 10 p = p * i Next i Print p End Sub B)Private Sub Form_Click() p = 1 For i = 1 To 10 p = p * i Next i Print p End Sub C) Private Sub Form_Click() For i = 1 To 10 p = 0 p = p * i Next i Print p End Sub D) Private Sub Form_Click() For i = 1 To 10 p = 1 p = p * i Next i Print p End Sub 4. 下面程序运行后,单击窗体,从键盘输入a,输出的结果是。 Private Sub form_Click() t = InputBox("请输入一个字符:") Select Case t Case "a" y = String(3, UCase(t)) Case "A" y = String(3, Lcase(t)) Case Else y = "AaA" End Select Print y End Sub A) aaa B) AAA C) AaA D) aAa 5. 下面程序运行后,单击窗体,输出的结果是。 Private Sub Form_Click() m = 63 n = 14 Do While m <> n Do While m > n m = m - n Loop Do While n > m n = n - m Loop Loop Print m; n End Sub A) 7 7 B) 1 1 C) 1 7 D) 7 1 6. 下面程序运行后,单击窗体,输出的结果是。 Private Sub Form_Click() a$ = "1234512345" For i = 1 To Len(a$) k = Mid(a$, i, 1) m = Trim(Str(Val(k) + 2)) s = s + m Next i Print s End Sub A) 30 B) 50 C)3456734567 D) 2345623456 7. 下面程序运行后,单击窗体,输出的结果是。 Private Sub form_Click() k = "A" For i = 5 To 0 Step -1 t = t + Chr(Asc(k) + i) Next i Print t End Sub运行后输出结果是 A) ABCDE B) ABCDEF C) FEDCBA D) EDCBA 8. 下面程序运行后,单击窗体,输出的结果是。 Private Sub Form_Click() For J = 4 To 1 Step -1 Print Tab(6 - J); For K = 3 To 1 Step -1 Print "*"; Next K Print Next J End Sub A) *** B) *** C) *** D) **** *** *** *** *** *** *** *** ** *** *** *** * 9. 下面程序运行后,单击窗体,输出的结果是。 Private Sub Form_Click() a = 100 Do If a Mod 2 = 0 Then s = s + 1 End If a = a + 1 Loop While a < 121 Print a; s End Sub A) 120 12 B) 120 10 C) 122 12 D) 121 11 10. 下面程序运行后,单击窗体,从键盘输入1,输出的结果是。 Private Sub Form_Click() x = -5 s = InputBox("请输入一个整数") Select Case s Case Is > 0: y = x + 1 Case 1 To 10: y = x + 2 Case Else: y = x + 3 End Select Print x; y End Sub A) -5 -1 B) -5 -4 C) -5 -3 D) -5 -5 11. 在窗体上画一个名称为Commandl的命令按钮,然后编写如下事件过程: Private Sub Command1_Click () Dim sum As Integer sum = 1 Do Until sum > 5 Print sum sum = sum + 2 Loop End Sub 程序运行后,单击命令按钮,则窗体上显示的内容是。 A)l B)1 C)1 D)无数据输出 3 2 4 5 4 6 12. 在窗体上画一个名称为Commandl的命令按钮,然后编写如下事件过程: Private Sub Command1_Click() For n = 1 To 10 If n Mod 3 <> 0 Then m = m + n \ 5 Next n Print m End Sub 程序运行后,如果单击命令按钮,则窗体上显示的内容是。 A) 5 B) 3 C)2 D)4 13. 有如下程序 Private Sub Form_Click() y = 1: x = 1 Do Until y > 5 x = x * y y = y + 1 Loop Print x; y End Sub 运行后输出的结果为。 A) 120 6 B) 24 5 C)6 6 D) 显示出错信息 14. 下面程序运行后,单击窗体,则输出结果为。 Private Sub Form_Click() a$ = "1234" b$ = " -*/" ' 注意:字符串的第一位是空格 For j = 4 To 1 Step -1 c$ = c$ + Mid$(a$, j) + Mid$(b$, j, 1) Next j Print c$ End Sub A) 4*34-234+1234 B) 4/3*2-1 C) 4/34*234-1234 D) 出错 15. 现有语句: y=IIf(x>0,x Mod 3,0) 设x=10,则y的值是。 A) 0 B) 1 C) 3 D) 语句有错 16. 设窗体上有一个文本框Text1和一个命令按钮Command1,并有以下事件过程: Private Sub Command1_Click() Dim s As String,ch As String s="" For k=1 To Len(Text1) ch=Mid(Text1,k,1) s=ch+s Next k Text1.Text=s End Sub 程序执行时,在文本框中输入"Basic",然后单击命令按钮,则Text1中显示的是。 A)Basic B)cisaB C)BASIC D)CISAB 17. 在窗体上画一个命令按钮和一个文本框,名称分别为Command1和Text1,然后编写程序: Private Sub Command1_Click() a=Val(InputBox("请输入日期(1~31)")) t="旅游景点:"& IIf(a>0 And a<=10, "长城","") & _ IIf(a>10 And a<=20, "故宫","") & IIf(a>20 And a<=31, "颐和园","") Text1.Text=t End Sub 程序运行后,如果从键盘上输入16,则在文本框中显示的内容是。 A) 旅游景点:长城故宫B) 旅游景点:长城颐和园 C) 旅游景点:颐和园D) 旅游景点:故宫 18. 在窗体上画一个名称为Command1的命令按钮,然后编写如下事件过程: Private Sub Command1_Click() c="ABCD" For n=1 To 4 Print ______ Next End Sub 程序运行后,单击命令按钮,要求在窗体上显示如下内容: D CD BCD ABCD 则在______处应填入的内容为 A) Left(c,n) B) Right(c,n) C) Mid(c,n,1) D) Mid(c,n,n) 19.以下Case语句中错误的是。 A)Case 0 to 10 B)Case Is> 10 C)Case Is>10 and Is <50 D)Case 3,5,Is>10 20. 当VB执行下面语句后,A的值为。 A=1 If A>0 Then A=A+1 If A>1 Then A=0 A.0 B.1 C.2 D.3 21. 在窗体中添加一个文本框(其中Name属性为Text1),然后编写如下代码 Private Sub Form_Click() Text1.Text = "" Text1.SetFocus For i = 1 To 10 Sum = Sum + i Next i Text1.Text = Sum End Sub 上述程序运行后,单击窗体,则运行的结果。 A.在文本框Text1中输出55 B.在文本框Text1中输出0 C.出错D.在文本框Text1中输出不定值 22. 在窗体上画一个名称为Text1的文本框和一个名称为Command1的命令按钮,然后编写如下事件过程: Private Sub Command1_Click() Dim i As Integer,n As Integer For I=0 To 50 i=i+3 n=n+1 If i>10 Then Exit for Next Text1.Text=Str(n) End Sub 程序运行后,单击命令按钮,在文本框中显示的值是。 A. 2 B. 3 D. 4 D. 5 二.填空题 1. 下列Visual Basic代码的执行结果是。 a = Abs(-5) b = Sqr(16) If a < b Then a = a / b Else b = a \ b Print a; b 2. 执行下面的程序段后,变量S的值为。 S=5 For i=2.6 To 4.9 Step 0.6 S=S+1 Next i 3. 面程序运行后,单击窗体,输出的结果是。 Private Sub Form_Click() m = 0 For i = -5 To 5 For j = 5 To 0 Step -2 m = m + 1 Next j Next i Print m End Sub 4. 运行下面程序后,单击窗体,要求能够显示下图所示的消息框,请填空。 Private Sub Form_Click() asd = MsgBox("确定", + vbInformation, "标题") End Sub 5. 在下面的程序中,要求循环体执行4次,请填空。 Private Sub Command1_Click() x = 1 Do While x = x + 2 Loop Print x End Sub 6. 以下程序的功能是:生成20个100到300之间的随机整数,输出其中能被5整除的数并 求出它们的和。请填空。 Private Sub Command1_Click() For i = 1 To 20 x = Int( * 200 + 100) If = 0 Then Print x s = s + End If Next i Print "Sum="; s End Sub 7. 以下程序的功能是:从键盘上输入若干个学生的考试分数,当输入负数时结束输入,然 后输出其中的最高分数和最低分数。请填空。 Private Sub Form_Click() Dim x As Integer,amax As Integer,amin As Integer x=InputBox("输入一个分数:") amax=x: amin=x Do While ① If x>amax Then amax=x if ②Then amin=x x=InputBox("请输入下一个分数:") Loop Print "Max=";amax,"Min=";amin End Sub 8. 设有以下的循环: x=1 Do x=x+2 Print x Loop Until 要求程序运行时执行3次循环体,请填空。 9. 下列程序段的执行结果为 a=3:b=1 For i=1 To 3 f=a + b:a=b:b=f Print f; Next I 10. 设有如下程序: Private Sub Form_Click() Dim a As Integer, s As Integer n=8:s=0 Do s=s+n : n=n-1 Loop While n>0 Print s End Sub 以上程序运行后,单击窗体,输出结果为。