1、国家二级 VB机试(过程)模拟试卷 1及答案与解析 一、选择题 1 以下叙述中错误的是 ( A)标准模块文件的扩展名是 bas ( B)标准模块文件是纯代码文件 ( C)在标准模块中声明的全局变量可以在整个工程中使用 ( D)在标准模块中不能定义过程 2 下面不能在信息框中输出 “VB”的是 ( A) MsgBox“VB“ ( B) x=MsgBox(“VB“) ( C) MsgBox(“VB“) ( D) Call MsgBox“VB“ 3 以下关于过程的叙述中,错误的是 ( A)在 Sub过程中不能再定义 Sub过程 ( B)事件过程也是 Sub过程 ( C)过程调用语句的形参个数必须与实
2、参个数相同 ( D)函数过程一定有返回值 4 设子程序过程定义的首部为: Public Sub s(x As Integer, Y As Single)则以下正确的调用形式为 ( A) Call S 5, 4 8 ( B) Call Sub(5, 4 8) ( C) Sub 5, 4 8 ( D) S 5, 4 8 5 在窗体上画两个标签和一个命令按钮,其名称分别为 Labell、 Label2和Command1,然后编 写如下程序: Private Sub func(L As Label) Private Sub Command 1_Click() L Caption=“1234“ a=Va
3、l(Label2 Caption) End Sub Call func(Label 1) Private Sub Form_Load() Label2 Caption=a Label 1 Caption=“ABCDE“ End Sub Label2 Caption=10 End Sub 程序运行后,单击命令按钮,则在两个标签中显示的内容分别为 ( A) ABCD和 10 ( B) 1234和 100 ( C) ABCD和 100 ( D) 1234和 10 6 设有如下 Command 1的单击事件过程及 fun过程: Private Sub Command 1_Click() Private
4、 Sub fun(x As Integer) Dim x As Integer Ifx Mod 2=0 Then fun(x 2) x=Val(InputBox(“请输入一个整数 “) Print x; fun(x) End Sub End Sub 执行上述程序,输入 6,结果是 ( A) 3 6 ( B) 6 3 ( C) 6 ( D)程序 死循环 7 编写如下程序: Private Sub Command1_Click() Dim strl As String, str2 As String strl=InputBox(“输入一个字符串 “): subfstr1, str2: Print
5、str2 End Sub Sub subf(s1 As String, s2 As String) Dim temp As String: Static i As Integer i=i+1 temp: Mid(s1, i, 1) Iftemp=10 Then t=x+1 Else t=x+2 End If f=t End Function 运行程序,则窗体上显示的是 ( A) 38 ( B) 49 ( C) 61 ( D) 70 13 假定有以下通用过程: Function Fun(n As Integer)As Integer x=n*n: Fun=x-11 End Function 在窗
6、体上画一个命令按钮,其名称为 Command1,然后编写如下事件过程: Private Sub Command 1_Click() Dim iAs Integer For i=l To 2 Y=Fun(i)Print y; Next i End Sub 程序运行后,单击命令按钮,在窗体上显示的内容是 ( A) 1 3 ( B) 10 8 ( C) -17 ( D) 0 5 14 求 11+21+101 的程序如下: Private Function s(x As Integer) f=1 For i=1 To x f=f*i Next S=f End Function Private Sub
7、Command 1_Click() Dim iAs Integer,y As Long For i=1 To 10 ( ) Next Print y End Sub 为实现功能要求,程序 的括号中应该填入的内容是 ( A) Call s(i) ( B) Call s ( C) Y=y+s(i) ( D) y=y+s 15 在窗体上画一个名称为 Command 1的命令按钮,并编写如下程序: Function Fun(x) y=0 Ifx=y x=x-y Loop fun=x End Function 程序运行时的输出结果是 ( A) 4 0 1 0 3 0 0 4 0 ( B) 0 3 3 5
8、 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 17 设有如下函数: Function DelSpace(ch As String)As Integer Dim n, st$, c$ st: “: n=0 For k=1 To Len(ch) C=Mid(ch, k, 1) If c0 Then P=True Else P=False End If End Function 关于上述程序,以下叙述中正确的是 ( A)程序功能是统计 1-500范围内能被 7整除的整数个数 ( B) Command1 Click事件过程中 If语句
9、的条件表达式不完整 ( C) Function过程定义有误,函数过程 P的名称与该过程中的变量名 P相同 ( D)函数过程 P的返回值为 Boolean类型 19 设有下面程序代码: Private Sub Command 1_Click() Dim strAs String, chAs String str=“Visual Basic Programming“: ch=“a“ n=fun(ch, str): Print str,n End Sub Private Function fun(ch As String, str As String)As Integer Dim strbufAs
10、String, C As String, n As Integer For k=1 To Len(str) C=Mid$(str,k, 1) If C0) Print n Mod 10; n=n 10 Wend Print End Sub 此程序功能是:输入 2个正整数,反序输出这 2个数的每一位数字,再反序输出这 2个数之和的每一位数字。 例如:若输入 123和 234,则应该输出: 3 2 1 4 3 2 7 5 3 但调试时发现只输出了前 2行 (即 2个数的反序 ),而未输出第 3行 (即 2个数之和的反序 ),程序需要修改。下面的修改方案 中正确的是 ( A)把过程 pro的形式参数
11、 n As Integer改为 ByVal n As Integer ( B)把 Call pro(a+b)改为 pro a+b ( C)把 n=n 10改为 n=n 10 ( D)在 pro b语句之后增加语句 c =a+b,再把 Call pro(a+b)改为 proc 26 有下面程序代码: Private Sub Command 1_Click() Dim x As Integer s As Integer x=1 For k=1 To 3 x=x+1: proc X: s=s+x Next k Print s End Sub Private Sub proc(ByVal a As I
12、nteger) Static x As Integer x=x+1: a=a+x End Sub 程序运行后,单击命令按钮 Command1,输出结果是 ( A) 6 ( B) 9 ( C) 15 ( D) 19 27 编写如下程序: Private Sub Command 1_Click()Dim x As Integer x=1 0 Print funl(x, 12)+x End Sub Private Function fun l(m As Integer,n As Integer)As Integer Ifn10 Then m=n funl=m+n End Function 程序运行后
13、,单击命令按钮 Command1,输出结果为 ( A) 30 ( B) 32 ( C) 34 ( D) 36 28 在窗体上画一个名称为 Command 1的命令按钮,再画两个名称分别为 Label1、Label2的标签,然后编写如下程序代码: Private X As Integer Private Sub Command 1_Click() X=5: Y=3 Call proc(X, Y) Label 1 Caption=X: Label2 Caption=Y End Sub Private Sub proc(a As Integer,ByVal b As Integer) X=a*a:
14、Y=b+b End Sub 程序运行后,单击命令按钮,则两个标签中显示的内容分别是 ( A) 25和 3 ( B) 5和 3 ( C) 25和 6 ( D) 5和 6 29 设有如下通用过程: Public Function f(x As Integer) Dim YAs Integer x=20: y=2: f=x*y End Function 在窗体上画一个命令按钮,其名称为 Command 1,然后编写如下事件过程: Private Sub Command 1_Click() Static x As Integer X=10: y=5: y=fix)Print x; y End Sub
15、程序运行后,如果单击命令按钮,则在窗体上显示的内容是 ( A) 10 5 ( B) 20 40 ( C) 20 5 ( D) 10 40 30 命任何一个滚动条滚动框件过程如下: Private Sub Command 1_Click()Private Function fly As Integer) x=10 Print f(x) f=y*y End Sub End Function 运行上述程序,如下叙述中正确的是: ( A)程序运行出错, x变量的类型与函数参数的类型不符 ( B)在窗体上显示 100 ( C)函数定义错,函数名 f不能又作为变量名 ( D)在窗体上显示 10 31 编写
16、如下程序: Private Sub Command 1_Click() Dim x As Integer,y As Integer x=InputBox(“输入第一个数 “): y=InputBox(“输入第二个数 “) Call f(x, y) Print x, Y End Sub Sub f(a As Integer,ByVal b As Integer) a=a木 2: x=a+b: b=b+100 End Sub 程序运行后,单击命令按钮 Command1,并输入数值 10和 15,则输出结果为 ( A) 10 115 ( B) 20 115 ( C) 35 15 ( D) 20 15
17、 32 现有程序如下: Option Base 1 Private Sub Form Click() Dim x(5, 6)As Integer,y(5)As Integer For i=1 Tn 5 ForJ=1 To 6 x(i, j)=Int(Rnd*9+1) Nextj Next i Call f(5, 6, x, y) For i=1 To 5 Print y(i); Next i End Sub Sub ffm As Integer,n As Integer,a() As Integer,b() As Integer) For i=1 To m b(i)=0 Forj=1 To n
18、 b(i)=b(i)+a(i, j) Nextj Next i End Sub 关于上述程序,以下叙述中正确的是 ( A)调用过程语句有错,参数不匹配 ( B)程序有错,数组下标越界 ( C) Y数组中保存的是 X数组每行数据之和 ( D) X数组中数据的取值范围是 1 10 33 窗体上有一个名称为 Command 1的命令按钮,一个名称为 Text1的文本框。编写如下程序: Private Sub Command 1_Click() Dim x As Integer X=Val(InputBox(“输入数据 “): Text1=Str(x+fun(x)+fun(x) End Sub Pri
19、vate Function fun(ByRef n As Integer) Ifn Mod 3=0 Then n=n+n Else n: n*n End If fun=n End Function 对于上述程序,以下叙述中错误的是 ( A)语句 fun=n有错,因为 n是整型, fun没有定义类型 ( B)运行程序,输入值为 5时,文本框中显示 655 ( C)运行程序,输入值为 6时,文本框中显示 42 ( D) ByRef表示参数按址传递 34 窗体上有一个名称为 Command 1的命令按钮,并有如下程序代码: Private Sub Command 1 Click() Static a
20、 a=l: b=2: C=3 Call f(a, b, c) Print a; b; C End Sub Sub f(ByVal x, ByRefy,z) x=x+l: y=y+1: z=z+1 End Sub 运行程序,单击命令按钮,窗体上显示的是 ( A) 1 3 3 ( B) 1 3 4 ( C) 2 3 3 ( D) 2 3 4 35 窗体上有一个名称为 Command1的命令按钮,其单击事件过程如下: Private Sub Command 1_Click() Dim x As Integer,y As Integer Static z As Integer x=3: Y=5: z=
21、Y Call f(x, yz) Print x; y; z End Sub Private Sub f(ByVal a As Integer,ByRef b As Integer,c As Integer) a=a+a: b=b+b: c=c+c End Sub 运行程序,单击命令按钮时, 3个标签中显示的内容分别是 ( A) 3 5 5 ( B) 3 5 10 ( C) 3 10 5 ( D) 3 10 10 36 窗体上有一个名称为 Command 1的命令按钮,其单击事件过程及相关的代码如下: Private Sub Command 1_Click() Dim x As Integer,
22、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 Integer) m=m*m: n=n+n: fun=m+n End Function 运行程序,单击命令按钮时,出现输入对话框,分别输入 3、 5,则窗体上显示的是 ( A) 27 ( B) 28 ( C) 33 ( D) 38 37 设有如下程序: Private Sub Inv(ByVal xStr As
23、 String, yStr As String) Dim tStr As String Dim L As Integer L=Len(xStr) Do While L=1 tStr=tStr+Mid(xStr,L, 1): L=L-1 Loop yStr=tStr End Sub Private Sub Form_Click() Dim S1 As String, S2 As String S1=“abcdef“Inv S1 S2 Print S2 End Sub 运行程序,单击窗体,输出结果为 ( A) abcdef ( B) afbecd ( C) fcdcba ( D) defabc 3
24、8 设有如下程序: Private Sub sV(ByVal m As Intege,n As Integer) m=m*2: n=n=5: Print m; n End Sub Private Sub Form_Click() Dim x As Intege,y As Integer x=10: y=15: sV x, y Print x; y End Sub 运行程序,单击窗体,输出结果为 ( A) 20 10 10 10 ( B) 10 15 20 10 ( C) 20 15 10 15 ( D) 20 10 20 10 39 由高中数学可知,对于连 续函数 f(x),若 f(x1)与
25、f(x2)值的符号相反,则在 x1和 x2之间必存在 x0,使得 f(x0)=0(该点称为 “零点 ”)。设有 VB函数: Private Function f(x As Single) As Single可以返回 f(x)的值 (函数体没有给出 )。下面程序的功能是从键盘输入 2个实数 x1、 x2,判断在 x1、 x2之间是否存在零点。 Private Sub Command 1_Click() Dim xl As Single, x2 As Single x1=InputBox(“请输入一个实数 x1“) x2=InputBox(“请再输入一个实数 x2“) If(_)Then Prin
26、t“在 “: x1; “与 “; x2; “之间存在零点 “ Else Print“不能确定在 “; x1; “与 “; x2; “之间是否存在零点 “ End If End Sub Private Function f(x As Single)As Single End Function 为使上面程序可以实现该功能,程序代码中横线处应填写的代码是 ( A) f(x1)0 Or f(x2)0 40 编写如下程序: Private Sub Command 1_SClick() Dim x As Intege,y As Integer x=10: y=20 Call funl(x, y) Prin
27、t x; y End Sub Private Function fun l(ByVal m As Integer,n As Integer)As Integer m=m*m: n=n+n End Function 程序运行后,单击命令按 钮 Command1,输出结果为 ( A) 10 25 ( B) 10 40 ( C) 100 25 ( D) 100 40 41 设有以下过程: Private Sub proc(x As IntegeL Optional y As Integer) Print x, y End Sub 针对此过程,下面正确的过程调用语句是 ( A) Call proc(a
28、!, 23) ( B) Call proc x, 12 ( C) proc b ( D) x=proc(12) 42 以下关于过程及过程参数的描述中,错误的是 ( A)过程的参数可以是控件名称 ( B)调用过程时使用的实参的个数应与过程形参的个数相同 (假定不含可变参数 ) ( C)只有函数过程能够将过程中处理的信息返回到调用程序中 ( D)窗体可以作为过程的参数 国家二级 VB机试(过程)模拟试卷 1答案与解析 一、选择题 1 【正确答案】 D 【试题解析】 本题考查的考点是有关标准模块的。 Visual Basic 中的标准模块也称全局模块或总模块, 全局变量声明、模块层声明及通用过程等几
29、部分组成,其扩展名为 .bas,世面只何代码而没有任何控件。其中全局声明放 在标准模块的首部,可以在整个工程中使用。 【知识模块】 过程 2 【正确答案】 D 【试题解析】 MsgBox()函数用于显示提示信息,并可返回一个代表用户单击了哪个按钮的 Integer类型值,当其作为函数使用时必须将参数放在括号内部,而返回值可以赋值给一个变量,也可以单独使用此函数而不将其返回值赋值给变量;MsgBox过程也用于显示提示信息,作为过程可以独立使用,也可以使用 Call关键字来进行调用,但此时参数需要加括号。 【知识模块】 过程 3 【正确答案】 C 【试题解析 】 sub过程分为事件过程和通用过程,
30、过程不允许嵌套定义,即在sub 过程中再定义 Sub过程;函数过程必须有一个返回值,当过程的声明语句中使用了可选参数的时候,允许实参个数与形参不同。 【知识模块】 过程 4 【正确答案】 D 【试题解析】 子过程可以独立使用,也可以使用 Call关键字来进行调用,但此时参数需要加括号。本题中子程序的名字是 S,故此 B、 C选项可以排除, A选项中缺少参数的括号。 【知识模块】 过程 5 【正确答案】 D 【试题解析】 本题考查的考点是有关过程调用的。 窗体加载时首先执行了 Load事件里面的代码,设置 Labell 的标题为 “ABCDE”, Label2 的标题为 “10”;当单击命令按钮
31、时,调用了 func过程,在这个过程中把传入的 Labell 的标题设置为“1234”, Label2 的标题没有发生变化。 【知识模块】 过程 6 【正确答案】 A 【试题解析】 本题中的 fun 过程是一个递归调用,如果参数 x为偶数则进入递归;本题中的实参 6传入 fun 过程之后,因其是偶数,所以执行 fun(6 2),也就是先输出 3,然后返回到 fun 中输出 6。 【知识模块 】 过程 7 【正确答案】 C 【试题解析】 本题中的子过程 subf 会进行递归调用,只要在参数 s1中取出的字符不是空字符串就进行递归,直到 i的值超过 s1的长度才停止,然后进行回归操作,相当于每一次
32、向 s2 中连接的字符都是最后取出的 s1中的字符,最终实现字符串的逆序操作。 【知识模块】 过程 8 【正确答案】 A 【试题解析】 本题考查的考点是有关函数过程的。函数过程可以返回一个函数值,但这个函数值的类型和参数类型没有任何关系:如果不指明参数的类型,则默认参数为变体型;数组作为函数参 数时只能通过传地址的方式来调用。 【知识模块】 过程 9 【正确答案】 D 【试题解析】 函数过程和 sub 子过程一样,也可以有参数也可以没有参数:参数传递也可以使用地址传递也可以使用值传递:都是在代码中进行调用,只是函数过程必须有一个返回值,子过程没有。 【知识模块】 过程 10 【正确答案】 B
33、【试题解析】 本题考查的考点是有关过程调用的。对于这种复杂的函数调用,一定要搞清楚调用的顺序以及参数传递的是值还是地址。根据过程调用的原则,首先调用最内层的 Fun(x, x-1),其 结果为 12, x的值不变仍为 10;然后调用Funl(x, 12),其结果为 6, x的值也不变为 10;最后调用 Funl(6, x-1),其结果为0, x的值也不变为 10。本题中的传址调用是没有作用的,因为表达式是不能传地址的。 【知识模块】 过程 11 【正确答案】 C 【试题解析】 本题中 seaLrch 函数的参数是两个字符串,在函数内进行循环,依次取出第一个参数的第 k 位和第二个参数进行比较,
34、如果相等则返回 k 的值,实际上就是查找第二个参数在第一个参数中出现的位置。 【知识模块】 过程 12 【 正确答案】 B 【试题解析】 本题考查的考点是有关函数调用和 If 语句的。要注意在前 4次循环中每次调用 f 函数时传递的参数分别为 6、 7、 8、 9,都是小于 10的,最后一次循环传递参数 10,所以最终结果应该为 8+9+10+11+11=49。 【知识模块】 过程 13 【正确答案】 C 【试题解析】 本题共调用 Full 函数 2次,每次的函数值都是参数的平方减去 11的值,故此输出 -10, -7。 【知识模块】 过程 14 【正确答案】 C 【试题解析】 函数过程有一个
35、返回值,一般出现在 表达式中组成表达式的一部分。本题的题目要求累加各个数的阶乘,而函数 s的作用是求参数的阶乘,因此应该在每次循环中累加 f函数的值,参数为循环变量 i。 【知识模块】 过程 15 【正确答案】 A 【试题解析】 本题是一个简单的函数调用,在函数中会判断参数 x的值,根据 x的值不同执行 If语句的不同分支。由于实际参数为 100不满足 x10,会将形参 m的值也改变为 12,因返回的函数值为 24;由于函数 funl的各个参数为地址传递,因此对于形 参 m的值会影响实参 x的值,即 x的值也变为 12。 【知识模块】 过程 28 【正确答案】 A 【试题解析】 本题考查的考点
36、是有关参数传递的。在 VB的过程调用时,参数有两种传递方式:传址传递和传值传递。如果在过程声明时形参用 ByVal 声明,说明此参数为传值调用;若用 ByRef声明,说明此参数为传址调用;没有说明传递类型,则默认为传址传递。即形参的结果会传递给实参。由于本题中的实参 Y采用传值传递,实参 X采用传址传递,而且 X是全局变量,所以在被调过程中改变了 X的值而没有改变 Y的值。 【知识模块 】 过程 29 【正确答案】 B 【试题解析】 本题中函数 f中的形参 x和按钮的单击事件中的静态变量 x是不同的变量,相互之间互不影响。函数 f的参数 x使用的是地址传递的形式,即形参的变化会影响到实参;在命
37、令按钮的单击事件中调用函数 f,会使得参数 x的值变成20,函数返回值为 40。 【知识模块】 过程 30 【正确答案】 A 【试题解析】 在调用子过程或者函数过程时,要求实参与形参必须是匹配的,即个数相同、类型相同、顺序一致。本题中命令按钮的 Click事件中隐式声明了变量x,所以 x是变体型 ;在调用函数 f的时候将变体型的 x作为实参传送,但函数 f中的形参 v是整型的,故此产生类型不匹配的情况。 【知识模块】 过程 31 【正确答案】 D 【试题解析】 在 Visual Basic中调用过程时,参数有两种传递形式:按值传递(Byval)和按址传递 (Byref),默认为按址传递。其中,当参数按址传递时,如果在引用该参数的过程中改变了形参的值,同时也就改变了传递参数时实参变量的值。本题中 f的参数 a是按地址传递的, b 是按值传递的,因此在 f中对 a的改变会影响实参 x,对 b的操作不会影响实参 y。 【知识模块】 过程 32 【正确答案】 C 【试题解析】 本题中子过程 f的四个形参分别为整型、整型、整型数组和整型数组,在窗体的单击事件中调用过程 f,四个实参和四个形参可以匹配,调用语句没