第6章测试题
一、选择题
1.设有如下程序段: Public Sub F1(n%) ...
n = 3 * n + 4 ... End Sub
Private Sub Command1_Click() Dim n%, m% n = 3
m = 4 ..
调用F1语句
... End Sub
则在Command1_Click()事件中有效的调用语句是( )。
A.Call F1(n + m) B.Call F1(m) C.Call F1(5) D.Call F1(m+5) 2.下面子过程语句说明合法的是( )。
A.Sub F1(ByVal n%()) B.Sub F1(n%) As Integer C.Function f1%(f1%) D.Function f1(ByVal n%) 3.要想从子过程调用后返回两个结果,下面子过程语句说明合法的是( )。 A.Sub f2(ByVal n%, ByVal m%) B.Sub f1(n%, ByVal m%) C.Sub f1(n%, m%) D.Sub f1(ByVal n%, m%)
4.在过程中定义的变量,若希望在离开该过程后,还能保存过程中局部变量的值,则应使用( )关键字在过程中定义局部变量。
A.Dim B.Private C.Public D.Static 5.下面过程运行后显示的结果是( )。
A.2 34 B.12 34 C.2 3 D.12 3 6.如下程序运行的结果是( )。 Dim a%, b%, c%
Public Sub p1(x%, y%) Dim c%
x = 2 * x: y = y + 2: c = x + y End Sub
Public Sub p2(x%, ByVal y%) Dim c%
x = 2 * x: y = y + 2: c = x + y End Sub
Private Sub Command1_Click() a = 2: b = 4: c = 6 Call p1(a, b)
Print \ Call p2(a, b)
Print \
End Sub
A.a=2 b=4 c=6 B.a=4 b=6 c=10 a=4 b=6 c=10 a=8 b=8 c=16 C.a=4 b=6 c=6 D.a=4 b=6 c=14 a=8 b=6 c=6 a=8 b=8 c=6 7.如下程序的运行结果是( )。 Public Sub Proc(a%()) Static i% Do
a(i) = a(i) + a(i + 1) i = i + 1
Loop While i < 2
End Sub
Private Sub Command1_Click() Dim m%, i%, x%(10)
For i = 0 To 4: x(i) = i + 1: Next i For i = 1 To 2: Call Proc(x): Next i For i = 0 To 4: Print x(i);: Next i End Sub
A.3 4 7 5 6 B.3 5 7 4 5 C.2 3 4 4 5 D.4 5 6 7 8 二、填空题
1.伟地址方式是当过程被调用时,形参与实参共享 (1) 。
2.按照如下要求书写函数过程的首语句,即Function (2) 定义语句,要求为:形参有两个,a为整型,b为一维整型数组,函数过程名为MyF,函数的返回值类型为逻辑型。 3.当形参是数组时,在过程体内对该数组操作时,为了确定数组的下界和上界,应分别用 (3 ) 和 (4) 函数
4.VB中的变量按其作用域分为全局变量、模块级变量和 (5) 变量。
5.窗体中的模块级变量应在 (6) 段声明,它作用于该窗体 (7) 。 6.如下程序,运行的结果是 (8) ,函数过程的功能是 (9) 。 Public Function f(m%, n%) Do While m <> n
Do While m > n: m = m - n: Loop Do While n > m: n = n - m: Loop
Loop f = m End Function
Private Sub Command1_Click() Print f(24, 18)
End Sub
7.将100-150之间的偶数,拆分成两个素数之和(只要一对即可),是后输出格式如图1所示。其中,prime函数判断参数x是否为质数。
Private Function prime(ByVal x As Integer) As Boolean prime = (10) For i = 2 To Sqr(x)
If (11) Then prime = False Exit Function End If Next i
End Function
Private Sub Form_Click() i = 1
For n = (12) For k = 3 To n / 2
If prime(k) (13) Then
图1 第7题运行界面 Print i; \
Exit For End If Next k i = i + 1 Next n End Sub
8.子过程MoveStr( )是把字符数组移动m个位置,当Tag为true时左移,则前m个字符移到字符数组尾,例如,“abcdefghij”左移3个位置后,结果为“defghijabc”;当tag为False时右移,则后m个字符移到字符数组前,如“abcdefghij”右移3个位置后,结果为“hijabcdefg”。 子过程如下:
Public Sub MoveStr(a(), m%, Tag As Boolean) Dim i%, j%, t$
If (15) Then '左移 For i = 1 To m (16)
For j = 0 To (17) a(j) = a(j + 1) Next j
(18) Next i
Else
For i = 1 To m (19)
For j = UBound(a) (20) '右移 a(j) = a(j - 1) Next j
(21) Next i
End If End Sub
9.子过程CountN用来统计字符串中各数字字符(“0”~“9”)出现的个数;主调程序对在Text1Box1框输入的文本,每次单击“统计”按钮,调用该子过程,在Label1框显示结果,如图2所示。
Sub CountN( (22)
Dim c As String * 1, i%, m%, j% For i = 0 To 9 num(i) = 0 Next i m = Len(s) For i = 1 To m
c = (23)
If c >= \ j = Val(c)
num(j) = (24) End If
图2 题9的运行界面
Next i End Sub
Private Sub Command1_Click() Dim n(9) As Integer, i% Call CountN(n(), Text1) List1.Clear For i = 0 To 9
If n(i) Then (25) \字符\出现的次数为\ Next
End Sub
10.子过程F(n,m,t)对一个四位数n整数判断:已知该整数n,逆向排列获得另一个4位数m是它自身的倍数(2倍以上),则t为true表示满足上述条件。主调程序调用该函数,显示1000~9999中所有满足该条件的数,如图3所示。
Private Sub Command1_Click() Dim t As Boolean, i%, k%
Text1 = \ Text2 = \
For i = 1000 To 9999 Call f( (26) ) If t Then
Text1 = Text1 & i & vbCrLf
Text2 = Text2 & k & \ End If
Next i End Sub
Sub f(ByVal n%, ByRef m%, ByRef Tag As Boolean)
Dim i% Tag = False m = 0 i = n
Do While i > 0 m = (27) i = (28) Loop
If m Mod n = 0 And m \\ n > 1 Then Tag = (29) End If
图3 题10的运行界面
End Sub 11.下列程序中的子过程MySplit(s,sArray(),n)用于实现Split函数的功能(字符分离到数组),即将数字字符串s按分隔符“,”分离到sArray数组中,分离的个数为n。主调程序将文本框中输入的数字字符串按回车键后分离,结果在List1控件显示,如图4所示。 Private Sub Text1_KeyPress(KeyAscii As Integer) Dim str1 As String, num(100) As Integer, n%, i% If (30) Then str1 = Trim(Text1)
Call MySplit( (31) ) List1.Text = \ For i = 0 To n
List1.AddItem num(i) Next i End If End Sub
Sub MySplit(ByVal str1 As String, ByRef sn() As Integer, ByRef n As Integer) Dim i%, j%, ch$ i = 0
j = InStr(str1, \ Do While j > 0
sn(i) = Val( (32) ) str1 = Mid(str1, j + 1) i = i + 1
j = (33) Loop
sn(i) = Val(str1) n = (34)
图4 题11的运行界面
End Sub
12.以下过程将一个有序数组中重复出现的数进行压缩,删除后只剩一个。主调程序运行后结果如图5所示。 Sub p(a())
Dim n%, m%, k% n = UBound(a)