1、国家二级 VB机试(过程、多重窗体与环境应用)模拟试卷 2及答案与解析 一、选择题 1 下面不能在信息框中输出 “VB”的是 ( A) MsgBox“VB“ ( B) x=MsgBox(“VB“) ( C) MsgBox(“VB“) ( D) Call MsgBox“VB“ 2 设子程序过程定义的首部为: Public Sub s(X As Integer, Y As Single)则以下正确的调用形式为 ( A) Call S5, 4 8 ( B) Call Sub(5, 4 8) ( C) Sub5, 4 8 ( D) S5, 4 8 3 设有如下 Command1的单击事件过程及 fun
2、过程: Private Sub Command1_Click() Private Sub fun(x As Integer) Dim x As Integer If x Mod2=0Then fun(x 2) x=Val(InputBox(“请输入一个整数 “) Print x; fun(x) End Sub End Sub 执行上述程序,输入 6,结果是 ( A) 3 6 ( B) 6 3 ( C) 6 ( D)程序死循环 4 以下关于函 数过程的叙述中,正确的是 ( A)函数过程形参的类型与函数返回值的类型没有关系 ( B)在函数过程中,过程的返回值可以有多个 ( C)当数组作为函数过程的
3、参数时,既能以传值方式传递,也能以传址方式传递 ( D)如果不指明函数过程参数的类型,则该参数没有数据类型 5 在窗体上画一个命令按钮 (名称为 Command1),并编写如下代码: Function Fun1(ByVal a As Integer, b As Integer)As Integer Dim t As Integer t=a-b: b=t+a: Fun1=t+b End Function Private Sub Command1_Click() Dim x As Integer x=10 Print Fun1(Fun1(x, (Fun1(x, x-1), x-1) End Sub
4、 程序运行后,单击命令按钮,输出结果是 ( A) 10 ( B) 0 ( C) 11 ( D) 21 6 现有如下程序: Private Sub Command1_Click() s=0 For i=1To5 a=s+f(5+i) Next Print s End Sub Public Function f(x As Integer) If x =10Then t=x+1 Else t=x+2 End If f=t End Function 运行程序,则窗体上显示的是 ( A) 38 ( B) 49 ( C) 61 ( D) 70 7 求 1!+2!+10! 的程序如下: Private Fu
5、nction s(x As Integer) f=1 For i=1To x f=f*i Next s=f End Function Private Sub Command1_Click() Dim i As Integer, y As Long For i=1To10 ( ) Next Print y End Sub 为实现功能要求,程序的括号中应该填入的内容是 ( A) Call s(i) ( B) Call s ( C) y=y+s(i) ( D) y=y+s 8 设有如下事件过程: Private Sub Command1_Click()Dim a a=Array(12, 3, 8,
6、5, 10, 3, 5, 9, 2, 4) For k=1To9 Print fun(a(k-1), a(k); “ “; Next k End Sub Private Function fun(x, y)As Integer Do While x =y x=x-y Loop fun=x End Function 程序运行时的输出结果是 ( A) 4 0 1 0 3 0 0 4 0 ( B) 0 3 3 5 1 3 5 1 2 ( C) 9 -5 3 -5 7 -2 -4 7 -2 ( D) 9 3 3 5 7 3 5 7 2 9 窗体上有一个名称为 Command1的命令按钮,其单击事件过程
7、及相关的函数过程如下: Private Sub Command1_Click()Dim i As Integer For i=1To500 If p(i)Then s=s+1 Next Print s End Sub Private Function p(x As Integer)As Boolean If x Mod7 0Then p=True Else p=False End If End Function 关于上述程序,以下叙述中正确的是 ( A)程序功能是统计 1500范围内能被 7整除的整数个数 ( B) Command1_Click事件过程中 If语 句的条件表达式不完整 ( C)
8、 Function过程定义有误,函数过程 p的名称与该过程中的变量名 p相同 ( D)函数过程 p的返回值为 Boolean类型 10 以下叙述中错误的是 ( A)在通用过程中,多个形式参数之间可以用逗号作为分隔符 ( B)在 Print方法中,多个输出项之间可以用逗号作为分隔符 ( C)在 Dim语句中,所定义的多个变量可以用逗号作为分隔符 ( D)当一行中有多个语句时,可以用逗号作为分隔符 11 下面是求最大公约数的函数的首部 Function gcd(ByVal x As Integer, ByVal y As Integer)As Integer 若要输出 8、 12、 16这 3个数
9、的最大公约数,下面正确的语句是 ( A) Print gcd(8, 12), gcd(12, 16), gcd(16, 8) ( B) Print god(8, 12, 16) ( C) Print gcd(8), gcd(12), gcd(16) ( D) Print gcd(8, gcd(12, 16) 12 以下过程定义中正确的过程首行是 ( A) Private Sub Proc(Optional a as Integer, b as Integer) ( B) Private Sub Proc(a as Integer)as Integer ( C) Private Sub Proc
10、(a()As Integer) ( D) Private Sub Proc(ByVal a()As Integer) 13 有下面程序代码: Private Sub Command1_Click() Dim x As Integer, S As Integer x=1 For k=1To3 x=x+1: proc x: s=s+x Next k Print s End Sub Private Sub proc(ByVal a As Integer) Static x As Integer x=x+1: a=a+x End Sub 程序运行后,单击命令按钮 Command1,输出结果是 ( A)
11、 6 ( B) 9 ( C) 15 ( D) 19 14 在窗体上画一个名称为 Command1的命令按钮,再画两个名称分别为 Label1、Label2的标签,然后编写如下程序代码: Private X As Integer Private Sub Command1_Click() X=5: Y=3 Call proc(X, Y) Label1 Caption=X: Label2 Caption=Y End Sub Private Sub proc(a As Integer, ByVal b As Integer) X=a*a: Y=b+b End Sub 程序运行后,单击命令按钮,则两个标
12、签中显示的内容分别是 ( A) 25和 3 ( B) 5和 3 ( C) 25和 6 ( D) 5和 6 15 命任何一个滚动条滚动框件过程如下: Private Sub Command1_Click() Private Function f(y As Integer) x=10 Print f(x) f=y*y End Sub End Function 运行上述程序,如下叙述中正确的是: ( A)程序运行出错, x变量的类型与函数参数的类型不符 ( B)在窗体上显示 100 ( C)函数定义错,函数名 f不能又作为变量名 ( D)在窗体上显示 10 16 现有程序如下: Option Bas
13、e1 Private Sub Form_Click() Dim x(5, 6)As Integer, y(5)As Integer For i=1To5 For i=1To6 x(i, j)=Int(Rnd*9+1) Next j Next i Call f(5, 6, x, y) For i=1To5 Print y(i); Next i End Sub Sub f(m As Integer, n As Integer, a()As Integer, b() As Integer) For i=1Tom b(i)=0 For j=1Ton b(i)=b(i)+a(i, j) Next j N
14、ext i End Sub 关于上述程序,以下叙述中正 确的是 ( A)调用过程语句有错,参数不匹配 ( B)程序有错,数组下标越界 ( C) y数组中保存的是 x数组每行数据之和 ( D) x数组中数据的取值范围是 110 17 窗体上有一个名称为 Command1的命令按钮,并有如下程序代码: Private Sub Command1_Click() Static a a=1: b=2: c=3 Callf(a, b, c) Print a; b; C End Sub Sub f(ByVal x, ByRef y, z) x=x+1: y=y+1: z=z+1 End Sub 运行 程序,
15、单击命令按钮,窗体上显示的是 ( A) 1 3 3 ( B) 1 3 4 ( C) 2 3 3 ( D) 2 3 4 18 窗体上有一个名称为 Command1的命令按钮,其单击事件过程及相关的代码如下: Private Sub Command1_Click() Dim x As Integer, y As Integer x=Val(InputBox(“输入整数 “) y=Val(InputBox(“输入整数 “)Print Str(fun(x, y)+x+y) End Sub Private Function fun(ByRef m As Integer, ByVal n As Integ
16、er) m=m*m: n=n+n: fun=m+n End Function 运行程序,单击命令按钮时,出现输入对话框,分别输入 3、 5,则窗体上显示的是 ( A) 27 ( B) 28 ( C) 33 ( D) 38 19 设有如下程序: Private Sub sV(ByVal m As Integer, n As Integer) m=m*2: n=n-5: Print m; n End Sub Private Sub Form_Click() Dim x As Integer, y As Integer x=10: y=15: sV x, y Print x; y End Sub 运
17、行程序,单击窗体,输出结果为 ( A) 20 10 10 10 ( B) 10 15 20 10 ( C) 20 15 10 15 ( D) 20 10 20 10 20 编写如下程序: Private Sub Command1_Click() Dim x As Integer, y As Integer x=10: y=20 Call fun1(x, y) Print x; y End Sub Private Function fun1(ByVal m As Integer, n As Integer)As Integer m=m*m: n=n+n End Function 程序运行后,单击
18、命令按钮 Commandl,输出结果为 ( A) 10 25 ( B) 10 40 ( C) 100 25 ( D) 100 40 21 以下关于过程及过程参数的描述中,错误的是 ( A)过程的参数可以是控件名称 ( B)调用过程时使用的实参的个数应与过程形参的个数相同 (假定不含可变参数 ) ( C)只有函 数过程能够将过程中处理的信息返回到调用程序中 ( D)窗体可以作为过程的参数 22 下列操作中不能向工程添加窗体的是 ( A)执行 “工程 ”菜单中的 “添加窗体 ”命令 ( B)单击工具栏上的 “添加窗体 ”按钮 ( C)右击窗体,在弹出的菜单中选择 “添加窗体 ”命令 ( D)右击工
19、程资源管理器,在弹出的菜单中选择 “添加 ”命令,然后在下一级菜单中选择 “添加窗体 ”命令 23 设工程中有 Form1、 Form2两个窗体,要求单击 Form2上的 Command1命令按钮, Form2就可以从屏幕上消失,下面的事件过程中不能 实现此功能的是 ( A) Private Sub Command1_Click()Form2 Hide End Sub ( B) Privte Sub Command1_Click()Unload Me End Sub ( C) Private Sub Command1_Click()Form2 Unload End Sub ( D) Privt
20、e Sub Command1_Click()Me Hide End Sub 24 设工程中有 2个窗体: Form1和 Form2,每个窗体上都有一个名称为 Text1的文本框。若希望把 Form1上文本框中的内容复制到 Form2上的文本框中,应进行的操作是 ( A)执行 Form1中的语句: Form1 Text1=Form2 Text1 ( B)执行 Form1中的语句: Text1=Form1 Text ( C)执行 Form2中的语句: Form1 Text1=Text1 ( D)执行 Form2中的语句: Text1=Form1 Text1 25 以下叙述中错误的是 ( A) Su
21、b Main是定义在标准模块中的特定过程 ( B)一个工程中只能有一个 Sub Main过程 ( C) Sub Main过程不能有返回值 ( D)当工程中含有 Sub Main过程时,工程执行时一一定最先执行该过程 26 以下关于 VB文件的叙述中,正确的是 ( A)标准模块文件的扩展名是 frm ( B) VB应用程序可以被编译为 exe文件 ( C)一个工程文件只能含有一个标准模块文件 ( D)类模块文件的扩展名为 bas 27 以下叙述中,错误的是 ( A)标准模块不属于任何一个窗体 ( B)工程文件的扩展名为 vbg ( C)窗体文件的扩展名为 frm ( D)一个应用程序可以有多个窗
22、体 国家二级 VB机试(过程、多重窗体与环境应用)模拟试卷 2答案与解析 一、选择题 1 【正确答案】 D 【试题解析】 MsgBox()函数用于显示提示信息,并可返回一个代表用户单击了哪个按钮的 Integer类型值,当其作为函数使用时必须将参数放在括号内部,而返回值可以赋值给一个变量,也可以单独使用此函数而不将其返回值赋值给变量: MsgBox过程也用于显示提示信息,作为过程可以独立使用,也可以使用Call关键字来进行调用 ,但此时参数需要加括号。 【知识模块】 过程 2 【正确答案】 D 【试题解析】 子过程可以独立使用,也可以使用 Call关键字来进行调用,但此时参数需要加括号。本题中
23、子程序的名字是 S,故此 B、 C选项可以排除, A选项中缺少参数的括号。 【知识模块】 过程 3 【正确答案】 A 【试题解析】 本题中的 fun过程是一个递归调用,如果参数 x为偶数则进入递归;本题中的实参 6传入 fun过程之后,因其是偶数,所以执行 fun(6 2),也就是先输出 3,然后返回到 fun中输出 6。 【知识 模块】 过程 4 【正确答案】 A 【试题解析】 本题考查的考点是有关函数过程的。函数过程可以返回一个函数值,但这个函数值的类型和参数类型没有任何关系;如果不指明参数的类型,则默认参数为变体型:数组作为函数参数时只能通过传地址的方式来调用。 【知识模块】 过程 5
24、【正确答案】 B 【试题解析】 本题考查的考点是有关过程调用的。对于这种复杂的函数调用,一定要搞清楚调用的顺序以及参数传递的是值还是地址。根据过程调用的原则,首先调用最内层的 Fun1(x, x-1),其结果为 12, x的值不 变仍为 10;然后调用Fun1(x, 12),其结果为 6, x的值也不变为 10;最后调用 Fun1(6, x-1),其结果为 0, x的值也不变为 10。本题中的传址调用是没有作用的,因为表达式是不能传地址的。 【知识模块】 过程 6 【正确答案】 B 【试题解析】 本题考查的考点是有关函数调用和 If语句的。要注意在前 4次循环中每次调用 f函数时传递的参数分别
25、为 6、 7、 8、 9,都是小于 10的,最后一次循环传递参数 10,所以最终结果应该为 8+9+10+11+11=49。 【知识模块】 过程 7 【正确 答案】 C 【试题解析】 函数过程有一个返回值,一般出现在表达式中组成表达式的一部分。本题的题目要求累加各个数的阶乘,而函数 s的作用是求参数的阶乘,因此应该在每次循环中累加 f函数的值,参数为循环变量 i。 【知识模块】 过程 8 【正确答案】 B 【试题解析】 本题中函数 fun的作用是当第一个形参比第二个形参大或着相等的时候让它减去第二个形参,直到比第二个形参小为止;在按钮的单击事件中循环调用 9次函数,每次都用数组的前一个元素和后
26、一个元素作为函数的实参,所以应输出的是 12-3-3-3-3、 3、 8-5、 5、 10-3、 3、 5、 9-2、 2。 【知识模块】 过程 9 【正确答案】 D 【试题解析】 调用 Function过程要返回一个值,因此可以像内部函数一样在表达式中使用。如果在 Function过程中省略 “过程名 =表达式 ”,则该过程返回一个默认值 (数值函数过程返回 0值;字符串函数过程返回空字符串 )。因此,通常要在过程体中给 “过程名 ”赋值。本题中函数 p的返回值为 Boolean类型,功能是判断参数 x是否能被 7整除,如果不能整除返回 True,否则返回 False。C0mmand1_Cl
27、ick事件过程中使用了单行的 If语句,不需要 Else分支和 EndIf语句。程序功能是统计 1-500范围内不能被 7整除的整数个数。 【知识模块】 过程 10 【正确答案】 D 【试题解析】 本题考查的考点是有关分隔符的。在过程的参数中需要用分隔符隔开;在 Print方法中使用逗号可以隔开多个输出项;在一条 Dim语句中定义多个变量时,这些变量也要用逗号隔开;在一行中写多个语句时,多个语句之间需要用冒号隔开。 【知识模块】 过程 11 【正确答案】 D 【试题解析】 函数过程在传递参数时 ,形参表与实参表中对应变量的名字不必相同,但参数的个数、对应位置和对应类型必须相同。本题中的 gcd
28、函数有两个参数,任何对于 gcd的调用都必须传递实参为两个整型值;选项 A中得到 3个结果,显然不是我们所需要的;选项 D中的函数嵌套调用能够求出 3个数的最大公约数。 【知识模块】 过程 12 【正确答案】 C 【试题解析】 Visual Basic允许用数组作为参数。但用数组作为过程的参数时,应在数组名的后面加上一对括号,以免与普通变量相混淆;而且只能使用地址传递,不能使用值传递。为了定义可选参数,需 要在参数表中使用 Optional关键字来指定可选参数,但是可选参数必须是变体型,而且放在参数表的最后。 Sub子过程是不能有返同值类型的。 【知识模块】 过程 13 【正确答案】 B 【试
29、题解析】 本题中首先要区分在命令按钮的单击事件中定义的 x是局部变量,仅能在过程内部起作用:在子过程 proc中定义的静态变量 x也是局部变量,也只能在本过程中起作用。在 VB的过程调用时,参数有两种传递方式:传址传递和传值传递。如果在过程声明时形参用 ByVal声明,说明此参数为传值调用:若用ByRef声明,说明此参 数为传址调用;没有说明传递类型,则默认为传址传递。即形参的结果会传递给实参。本题中 proc过程的参数 a用的是值传递,因此形参的改变不会影响到实参,所以在命令按钮的单击事件中循环累加的是 2+3+4=9。 【知识模块】 过程 14 【正确答案】 A 【试题解析】 本题考查的考
30、点是有关参数传递的。在 VB的过程调用时,参数有两种传递方式:传址传递和传值传递。如果在过程声明时形参用 ByVal声明,说明此参数为传值调用:若用: ByRef声明,说明此参数为传址调用;没有说明传递类型,则默认为传址传递。即形 参的结果会传递给实参。由于本题中的实参 Y采用传值传递,实参 X采用传址传递,而且 X是全局变量,所以在被调过程中改变了 x的值而没有改变 Y的值。 【知识模块】 过程 15 【正确答案】 A 【试题解析】 在调用子过程或者函数过程时,要求实参与形参必须是匹配的,即个数相同、类型相同、顺序一致。本题中命令按钮的 Click事件中隐式声明了变量x,所以 x是变体型;在
31、调用函数 f的时候将变体型的 x作为实参传送,但函数 f中的形参 y是整型的,故此产生类型不匹配的情况。 【知识模块】 过程 16 【正确答 案】 C 【试题解析】 本题中子过程 f的四个彤参分别为整型、整型、整型数组和整型数组,在窗体的单击事件中调用过程 f,四个实参和四个形参可以匹配,调用语句没有错误;在二重循环中为二维数组的每个元素赋值,数组下界从 1开始,因此不会越界;在二重循环中为数组 x的元素赋值为 0 9之间的值;在过程 f中用一个二重循环以此计算 x数组每行数据之和放在 y数组中。 【知识模块】 过程 17 【正确答案】 B 【试题解析】 在 Visual Basic中调用过程
32、时,参数有两种传递形式:按值传递(Byval)和按 址传递 (Byref),默认为按址传递。其中,当参数按址传递时,如果在引用该参数的过程中改变了形参的值,同时也就改变了传递参数时实参变量的值。本题中 f的参数 x是按值传递的, y和 z是按地址传递的,因此在 f中对 x的改变不会影响实参 a,对 y和 z的操作会影响实参 b和 c。 【知识模块】 过程 18 【正确答案】 C 【试题解析】 在 Visual Basic中调用过程时,参数有两种传递形式:按值传递(Byval)和按址传递 (Byref),默认为按址传递。其中,当参数按址传递时,如果在引用该参数的过程中改变 了形参的值,同时也就改
33、变了传递参数时实参变量的值。本题中 fun的参数 m是按地址传递的, n是按值传递的,因此在 f中对 m的改变会影响实参 x,对 n的操作不会影响实参 y,即输出的是 Str(19+9+5)=“33“。 【知识模块】 过程 19 【正确答案】 A 【试题解析】 在 Visual Basic中调用过程时,参数有两种传递形式:按值传递(Byval)和按址传递 (Byref),默认为按址传递。其中,当参数按址传递时,如果在引用该参数的过程中改变了形参的值,同时也就改变了传递参数时实参变量的值。本题 中 sV的参数 m是按值传递的, n是按地址传递的,因此在 sV中对 m的改变不会影响实参 x,对 n
34、的操作会影响实参 y。 【知识模块】 过程 20 【正确答案】 B 【试题解析】 在 Visual Basic中调用过程时,参数有两种传递形式:按值传递(Byval)和按址传递 (Byref),默认为按址传递。其中,当参数按址传递时,如果在引用该参数的过程中改变了形参的值,同时也就改变了传递参数时实参变量的值。本题中 fun1的参数 m是按值传递的, n是按地址传递的,因此在 fun1中对m的改变不会影响实参 x,对 n的 操作会影响实参 y。 【知识模块】 过程 21 【正确答案】 C 【试题解析】 本题考查的考点是有关过程参数的。过程的参数可以为任何控件,包括窗体,在传递参数时,形参表与实
35、参表中对应变量的名字不必相同,但参数的个数、对应位置和对应类型必须相同。除了函数过程可以把信息返回到调用程序中,一般过程也可以通过地址传递的方法把信息返回到调用程序中。 【知识模块】 过程 22 【正确答案】 C 【试题解析】 可以通过执行 “工程 (Project)”“ 添加窗体 (Add Form)”菜单命令来建立窗体,每执行一次就新建立一个窗体;也可以单击工具栏上的 “添加窗体 ”按钮:右击工程资源管理器,在掸出的菜单中选择 “添加 ”命令,然后在下一级菜单中选择 “添加窗体 ”命令也可以添加窗体。 【知识模块】 多重窗体与环境应用 23 【正确答案】 C 【试题解析】 Hide方法可以
36、隐藏一个窗体, Me指代当前窗体,所以语句Form2 Hide和 Me Hide均可以隐藏当前窗体 Form2; Unload语句可以在内存中卸载一个窗体,该语句不能当作方法使用。 【知识模块】 多重窗体与环境应用 24 【正确答案】 D 【试题解析】 丈本框的默认属性是 Text属性,在当前窗体中引用控件不必加上窗体前缀。 【知识模块】 多重窗体与环境应用 25 【正确答案】 D 【试题解析】 在 Visual Basic中,可以将多窗体程序中的其中一个窗体或某标准模块中的 Sub Main过程设置为启动对象。 Sub Main是定义在标准模块中的特定过程,该过程不能有返回值,一个工程中仅能
37、有一个 Sub Main过程。 【知识模块】 多重窗体与环境应用 26 【正确答案】 B 【试题解析】 在 VB中主要有标准模块、类模块和窗体模块 3种模块。一个工程中可以有多个模块文件,其中窗体文件的扩展名为 frm,标准模块文件扩展名为bas,类模块文件扩展名为 cls。 【知识模块】 多重窗体与环境应用 27 【正确答案】 B 【试题解析】 标准模块是只含有程序代码的应用程序文件,不属于任何一个窗体,其扩展名为 bas:窗体文件中含有控件和程序代码,其扩展名为 frm:类模块文件的扩展名为 cls:工程文件的扩展名为 vbp,在一个工程中含有多个窗体文件和标准模块文件;工程组文件的扩展名是 vbg, 一个工程组文件中可以含有若干工程,一个工程中可以有若干窗体和标准模块。 【知识模块】 多重窗体与环境应用