1、国家二级 VB 机试(数组)模拟试卷 5 及答案解析(总分:60.00,做题时间:90 分钟)一、选择题(总题数:30,分数:60.00)1.窗体上有名称为 Command1 的命令按钮,其事件过程如下: Option Base1 Private Sub Command1_Click() Dim a Dim b(10)As Integer a=Array(2,4,7,3,9,6) For i=LBound(a)To UBound(a) b(i)=a(i)+i Sum=Sum+b(i) Next i Print Sum End Sub 运行程序,单击命令按钮时,窗体上显示的是(分数:2.00)A
2、.44B.46C.50D.522.窗体上有一个名称为 Command1 的命令按钮,有程序如下: Option Base1 Private Sub Command1_Click() Dim a(10)As Integer 第 1 个 For For i=l To 10 a(i)=Int(Rnd*100+100) Print a(i);Next x=a(i):y=x 第 2 个 For For i=1 To 10 Ifxa(i)Then Y=a(i) s=s+a(i) Next Print x,y,s End Sub 关于上述程序的叙述中,正确的是(分数:2.00)A.程序运行出错,第 1 个
3、For 循环之后的 x=a(i)赋值语句错B.程序正常运行,x 是 10 个随机数中的最大值C.程序正常运行,s 是 10 个随机数的和D.程序正常运行,10 个随机数的范围是 100-2003.在窗体上画一个文本框,其名称为 Text1,然后编写如下程序: Option Base1 Pdvme Sub Form_Click() Dim Arr(10)As Integer For i=6 To 10 An(i)=i-3 Next i Text1Text=Str(Arr(6)+Arr(Arr(6)+Arr(10) End Sub 程序运行后,单击窗体,在文本框中显示的内容是(分数:2.00)A.
4、7B.8C.9D.104.假定有如下程序: Private Sub Form Click() Dim a(4)As Integer,b(4)As Integer For k=0 To 2 a(k+1)=Val(InputBox(“请输入一个整数:“) b(3-k)=a(k+1) Next k Print b(k) End Sub 运行程序,单击窗体,依次输入 3、6、9,输出结果为(分数:2.00)A.3B.6C.9D.15.阅读程序: Option Base1 Private Sub Form Click() Dim a(3,3)As Integer For i=1 To 3 Forj=1
5、To 3 a(i,j)=_ Print a(i,j); Nextj Print Next i End Sub 运行上面的程序,单击窗体,输出结果如下: 1 4 7 2 5 8 3 6 9 则在横线处应填入的内容为(分数:2.00)A.i+jB.i*jC.(i-1)*3+jD.i+(j-1)*36.阅读程序: Option Base1 Sub P(b() As Integer) For i=1 To 4 b(i)=2*i Next i End Sub Private Sub Form Click() Dim a(4)As Integer For i=1 To 4 a(i)=i+4 Next i
6、P a For i=1 To 4 Print a(i) Next i End Sub 运行上面的程序,单击窗体,输出结果为(分数:2.00)A.2 4 6 8B.5 6 7 8C.10 12 14 16D.4 8 12 167.在窗体上画一个命令按钮,然后编写如下程序: Option Base1 Privme Sub Command1_Click() Dim Arr(10)As Integer For i=1 To 10 Arr(i)=11-i Next i x=InputBox(“输入一个整数(310)“) PrintAn(2+Arr(x) End Sub 程序运行后,单击命令按钮,在输入对
7、话框中输入 7,则输出结果为(分数:2.00)A.3B.4C.5D.68.设有下面程序代码: Private Sub Command1_Click() Dim a As Variant a=Array(22,43,23,56,87,45,67,12,98,98,56,34,23,75,64) m=a(0)n=m For k=1 To UBound(a) Ifa(k)mThen n=m:m=a(k) Elselfa(k)n And a(k)“Then subf s1,s2 s2=s2 temp End Sub 程序运行后,单击命令按钮 Command1,且输入“abcdef”,则输出结果为(分数
8、:2.00)A.afbecdB.cdbeafC.fedcbaD.adbecf27.以下关于函数过程的叙述中,正确的是(分数:2.00)A.函数过程形参的类型与函数返回值的类型没有关系B.在函数过程中,过程的返回值可以有多个C.当数组作为函数过程的参数时,既能以传值方式传递,也能以传址方式传递D.如果不指明函数过程参数的类型,则该参数没有数据类型28.在 VB 中,函数过程与子程序过程的区别之一是(分数:2.00)A.函数过程必须有参数,而子程序过程可以没有B.函数过程的参数传递只采用值传递,而子程序过程只采用地址传递C.在程序中,子程序过程调用的代码可以写在表达式中,而函数过程不能D.函数过程
9、有返回值,而子程序过程没有29.在窗体上画一个命令按钮(名称为 Command1),并编写如下代码: Function Fun1(ByVal a As Integer, Private Sub Command1_Click() b As Integer)As Integer Dim x As Integer Dim t As Integer x=10 t=a-b:b=t+a:Fun1=t+b Print Funl(Funl(x,(Funl(x,x-1),x-1) End Function End Sub 程序运行后,单击命令按钮,输出结果是(分数:2.00)A.10B.0C.11D.2130.
10、有下面程序代码: Private Sub Command1_Click() Dim aAs String a=“COMPUTER”n=search(a,“T“):Print IIf(n=0,“未找到“,n) End Sub Private Function search(str As String,ch As String)As Integer For k=1 To Len(str) c=Mid(str,k,1) Ifc=ch Then search=k:Exit Function End If Next k search=0 End Function 程序运行后,单击命令按钮 Command
11、1,输出结果是(分数:2.00)A.0B.8C.6D.未找到国家二级 VB 机试(数组)模拟试卷 5 答案解析(总分:60.00,做题时间:90 分钟)一、选择题(总题数:30,分数:60.00)1.窗体上有名称为 Command1 的命令按钮,其事件过程如下: Option Base1 Private Sub Command1_Click() Dim a Dim b(10)As Integer a=Array(2,4,7,3,9,6) For i=LBound(a)To UBound(a) b(i)=a(i)+i Sum=Sum+b(i) Next i Print Sum End Sub 运
12、行程序,单击命令按钮时,窗体上显示的是(分数:2.00)A.44B.46C.50D.52 解析:解析:本题中使用了一个循环为 b 数组进行赋值,每个元素的值是对应 a 数组元素的值加上下标的值。因此 b 数组中的元素为(3、6、10、7、14、12),然后累加和为 52。2.窗体上有一个名称为 Command1 的命令按钮,有程序如下: Option Base1 Private Sub Command1_Click() Dim a(10)As Integer 第 1 个 For For i=l To 10 a(i)=Int(Rnd*100+100) Print a(i);Next x=a(i)
13、:y=x 第 2 个 For For i=1 To 10 Ifxa(i)Then Y=a(i) s=s+a(i) Next Print x,y,s End Sub 关于上述程序的叙述中,正确的是(分数:2.00)A.程序运行出错,第 1 个 For 循环之后的 x=a(i)赋值语句错 B.程序正常运行,x 是 10 个随机数中的最大值C.程序正常运行,s 是 10 个随机数的和D.程序正常运行,10 个随机数的范围是 100-200解析:解析:随机数函数 Rnd 的功能是用于产生一个小于 1 大于或等于 0 的随机数,本题中产生的整数的范围是 100-199:在第一个循环结束后,循环变量 i
14、的值为不满足循环条件的值 11,在紧随其后的 x=a(i)语句将会执行出错,因为出现了数组越界。3.在窗体上画一个文本框,其名称为 Text1,然后编写如下程序: Option Base1 Pdvme Sub Form_Click() Dim Arr(10)As Integer For i=6 To 10 An(i)=i-3 Next i Text1Text=Str(Arr(6)+Arr(Arr(6)+Arr(10) End Sub 程序运行后,单击窗体,在文本框中显示的内容是(分数:2.00)A.7B.8C.9D.10 解析:解析:本题中在循环中为数组部分元素赋值,把 Arr(6)Arr(1
15、0)分别赋值为 37,其余的数组元素保持默认值 0;最终输出的是 Arr(6)+Arr(Arr(6)+Arr(10)即 Arr(6)+Arr(10)=10。4.假定有如下程序: Private Sub Form Click() Dim a(4)As Integer,b(4)As Integer For k=0 To 2 a(k+1)=Val(InputBox(“请输入一个整数:“) b(3-k)=a(k+1) Next k Print b(k) End Sub 运行程序,单击窗体,依次输入 3、6、9,输出结果为(分数:2.00)A.3 B.6C.9D.1解析:解析:本题在循环中输入数据,当第
16、一次输入 3 的时候 a(1)=3,b(3)=a(1)=3;当第二次输入 6 的时候 a(2)=6,b(2)=a(2)=6:当第三次输入 9 的时候 a(3)=6,b(1)=a(3)=9,跳出循环后 k 的值为 3,将输出 b(3)的值。5.阅读程序: Option Base1 Private Sub Form Click() Dim a(3,3)As Integer For i=1 To 3 Forj=1 To 3 a(i,j)=_ Print a(i,j); Nextj Print Next i End Sub 运行上面的程序,单击窗体,输出结果如下: 1 4 7 2 5 8 3 6 9
17、则在横线处应填入的内容为(分数:2.00)A.i+jB.i*jC.(i-1)*3+jD.i+(j-1)*3 解析:解析:本题中使用二重循环为数组赋值,分许输出的结果,每个元素和行号和列号的关系可以看出,每个元素的值应该等于 i+(i-1)*3。6.阅读程序: Option Base1 Sub P(b() As Integer) For i=1 To 4 b(i)=2*i Next i End Sub Private Sub Form Click() Dim a(4)As Integer For i=1 To 4 a(i)=i+4 Next i P a For i=1 To 4 Print a(
18、i) Next i End Sub 运行上面的程序,单击窗体,输出结果为(分数:2.00)A.2 4 6 8 B.5 6 7 8C.10 12 14 16D.4 8 12 16解析:解析:本题中的过程 P 的功能是为形参数组 b 进行赋值,数组作为参数时采用的是地址传递,所以对形参的改变将会影响实参,也就是在窗体的单击事件中,首先在一个循环中为数组 a 赋值,然后调用了P 过程重新为 a 赋值覆盖掉原来的值。7.在窗体上画一个命令按钮,然后编写如下程序: Option Base1 Privme Sub Command1_Click() Dim Arr(10)As Integer For i=1
19、 To 10 Arr(i)=11-i Next i x=InputBox(“输入一个整数(310)“) PrintAn(2+Arr(x) End Sub 程序运行后,单击命令按钮,在输入对话框中输入 7,则输出结果为(分数:2.00)A.3B.4C.5 D.6解析:解析:本题是一个简单的数组操作,首先在一个循环中为数组元素赋值,然后输出指定的数组元素值。最终输出的是 Arr(2+Arr(7)=Arr(6)=5。8.设有下面程序代码: Private Sub Command1_Click() Dim a As Variant a=Array(22,43,23,56,87,45,67,12,98,
20、98,56,34,23,75,64) m=a(0)n=m For k=1 To UBound(a) Ifa(k)mThen n=m:m=a(k) Elselfa(k)n And a(k)“Then subf s1,s2 s2=s2 temp End Sub 程序运行后,单击命令按钮 Command1,且输入“abcdef”,则输出结果为(分数:2.00)A.afbecdB.cdbeafC.fedcba D.adbecf解析:解析:本题中的子过程 subf 会进行递归调用,只要在参数 s1 中取出的字符不是空字符串就进行递归,直到 i 的值超过 s1 的长度才停止,然后进行回归操作,相当于每一次
21、向 s2 中连接的字符都是最后取出的 s1 中的字符,最终实现字符串的逆序操作。27.以下关于函数过程的叙述中,正确的是(分数:2.00)A.函数过程形参的类型与函数返回值的类型没有关系 B.在函数过程中,过程的返回值可以有多个C.当数组作为函数过程的参数时,既能以传值方式传递,也能以传址方式传递D.如果不指明函数过程参数的类型,则该参数没有数据类型解析:解析:本题考查的考点是有关函数过程的。函数过程可以返回一个函数值,但这个函数值的类型和参数类型没有任何关系:如果不指明参数的类型,则默认参数为变体型:数组作为函数参数时只能通过传地址的方式来调用。28.在 VB 中,函数过程与子程序过程的区别
22、之一是(分数:2.00)A.函数过程必须有参数,而子程序过程可以没有B.函数过程的参数传递只采用值传递,而子程序过程只采用地址传递C.在程序中,子程序过程调用的代码可以写在表达式中,而函数过程不能D.函数过程有返回值,而子程序过程没有 解析:解析:函数过程和 Sub 子过程一样,也可以有参数也可以没有参数;参数传递也可以使用地址传递也可以使用值传递;都是在代码中进行调用,只是函数过程必须有一个返回值,子过程没有。29.在窗体上画一个命令按钮(名称为 Command1),并编写如下代码: Function Fun1(ByVal a As Integer, Private Sub Command1
23、_Click() b As Integer)As Integer Dim x As Integer Dim t As Integer x=10 t=a-b:b=t+a:Fun1=t+b Print Funl(Funl(x,(Funl(x,x-1),x-1) End Function End Sub 程序运行后,单击命令按钮,输出结果是(分数:2.00)A.10B.0 C.11D.21解析:解析:本题考查的考点是有关过程调用的。对于这种复杂的函数调用,一定要搞清楚调用的顺序以及参数传递的是值还是地址。根据过程调用的原则,首先调用最内层的 Funl(x,x1),其结果为 12,x的值不变仍为 10
24、;然后调用:Funl(x,12),其结果为 6,x 的值也不变为 10;最后调用 Funl(6,x-1),其结果为 0,x 的值也不变为 10。本题中的传址调用是没有作用的,因为表达式是不能传地址的。30.有下面程序代码: Private Sub Command1_Click() Dim aAs String a=“COMPUTER”n=search(a,“T“):Print IIf(n=0,“未找到“,n) End Sub Private Function search(str As String,ch As String)As Integer For k=1 To Len(str) c=Mid(str,k,1) Ifc=ch Then search=k:Exit Function End If Next k search=0 End Function 程序运行后,单击命令按钮 Command1,输出结果是(分数:2.00)A.0B.8C.6 D.未找到解析:解析:本题中 search 函数的参数是两个字符串,在函数内进行循环,依次取出第一个参数的第 k位和第二个参数进行比较,如果相等则返回 k 的值,实际上就是查找第二个参数在第一个参数中出现的位置。