1、国家二级 VB机试(过程)模拟试卷 7及答案与解析 一、选择题 1 假定有如下事件过程: Private Sub Form Click() Dim X As Integer,n As Integer x=1: n=0 Do While x“”Then subfs1, s2 s2=s2&temp End Sub 程序运行后,单击命令按钮 Commandl,且输入 “abcdef”,则输出结果为 ( A) afbecd ( B) cdbeaf ( C) fedcba ( D) adbecf 9 以下关于函数过程的叙述中,正确的是 ( A)函数过程形参的类型与函数返回值的类型没有关系 ( B)在函数
2、过程中,过程的返回值可以有多个 ( C)当数组作为函数过程的参数时,既能以 传值方式传递,也能以传址方式传递 ( D)如果不指明函数过程参数的类型,则该参数没有数据类型 10 在 VB中,函数过程与子程序过程的区别之一是 ( A)函数过程必须有参数,而子程序过程可以没有 ( B)函数过程的参数传递只采用值传递,而子程序过程只采用地址传递 ( C)在程序中,子程序过程调用的代码可以写在表达式中,而函数过程不能 ( D)函数过程有返回值,而子程序过程没有 11 在窗体上画一个命令按钮 (名称为 Commandl),并编写如下代码: Function Fun 1(ByVal a As Integer
3、, b As Integer)As Integer Dim t As Integer t=a-b: b=t+a: Fun1=t+b End Function Private Sub Commandl_Click() Dim x As Integer x=10 Print Funl(Funl(x, (Funl(x, x一 1), x1) End Sub 程序运行后,单击命令按钮,输出结果是 ( A) 10 ( B) 0 ( C) 11 ( D) 21 12 有下面程序代 码: Private Sub Commandl_Click() Dim a As String a=”COMPUTER”n=s
4、earch(a, ”T”): Print IIf(n=0, ”未找至 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 程序运行后,单击命令按钮 Commandl,输出结果是 ( A) 0 ( B) 8 ( C) 6 ( D)未找到 13 现有如下程序: Private Sub
5、 Commandl_Click() s=0 For i=1 To 5 s=s+f(5+i) Next Print s End Sub Public Function f(x As Integer) If x=10 Then t=x+1 Else t=x+2 End If f=t End Function 运行程序,则窗体上显示的是 ( A) 38 ( B) 49 ( C) 61 ( D) 70 14 假定有以下通用过程: Function Fun(n As Integer)As Integer x=n*n: Fun=x-11 End Function 在窗体上画一个命令按钮,其名称为 Comm
6、andl,然后编写如下事件过程: Private Sub Commandl_Click() Dim i As Integer For i=1 To 2 y=Fun(i)Print y: Next i End Sub 程序运行后,单击命令按钮,在窗体上显示的内容是 ( A) 1 3 ( B) 10 8 ( C) -10 7 ( D) 0 5 15 求 1!+2!+10! 的程序如下: Private Function s(x As Integer) f=1 For i=1 To x f=f*i Next s=f End Function Private Sub Commandl_Click()
7、Dim i As 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 16 在窗体上画一个名称为 Commandl的命令按钮,并编写如下程序: Function Fun(x) y=0 If 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)
8、9 -5 3 -5 7 -2 -4 7 -2 ( D) 9 3 3 5 7 3 5 7 2 18 设有如下函数: 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) Commandl_Click事件过程中 If语句的条件表达式不完整 (
9、C) Function过程定义有误,函数过程 P的名称与该 过程中的变量名 P相同 ( D)函数过程 P的返回值为 Boolean类型 20 设有下面程序代码: Private Sub Command1_Click() Dim str As String, ch As 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 strbuf As String, c
10、As String, n As Integer For k=1 To Len(str) c=Mid$(str,k, 1) Ifc0) 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的形式参数 n As Integer改
11、为 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)改为 pro c 27 有下 面程序代码: Private Sub Commandl_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 Integer) Stati
12、c x As Integer x=x+1: a=a+x End Sub 程序运行后,单击命令按钮 Commandl,输出结果是 ( A) 6 ( B) 9 ( C) 15 ( D) 19 28 编写如下程序: Private Sub Commandl_Click()Dim x As Integer x=10 Print funl(x, 12)+x End Sub Private Function fun l(m As Integer, n As Integer)As Integer Ifn10 Then m=n fun1=m+n End Function 程序运行后,单击命令按钮 Comman
13、dl,输出结果为 ( A) 30 ( B) 32 ( C) 34 ( D) 36 29 在窗体上画一个名称为 Commandl的命令按钮,再画两个名称分别为 Label1、Label2的标签,然后编写如下程序代码: Private X As Integer Private Sub Commandl_Click() X=5: Y=3 Call proc(X, Y) Labell Caption=X Private Sub proc(a As Integer, ByVal b As Integer) X=a*a: Y=b+b End Sub Label2 Caption=Y End Sub 程序运
14、行后,单击命令按钮,则两个标签中显示的内容分别是 ( A) 25和 3 ( B) 5和 3 ( C) 25和 6 ( D) 5和 6 30 设有如下通用过程: Public Function f(x As Integer) Dim YAs Integer x=20: y=2: f=x*y End Function 在窗体上画一个命令按钮,其名称为 Commandl,然后编写如下事件过程: Private Sub Commandl_Click() Static x As Integer x=10: y=5: y=f(x)Print x: y End Sub 程序运行后,如果单击命令按钮,则在窗体
15、上显示的内容是 ( A) 10 5 ( B) 20 40 ( C) 20 5 ( D) 10 40 31 命任何一个滚动条滚动框件过程如下: Private Sub Commandl_Click() x=10 Print fix) End Sub Private Function f(y As Integer) f=y*y End Function 运行上述程序,如下叙述中正确的是: ( A)程序运行出错, x变量的类型与函数参数的类型不符 ( B)在窗体上显示 100 ( C)函数定义错,函数名 f不能又作为变量名 ( D)在窗体上显示 10 32 编写如下程序: Private Sub C
16、ommandl_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 33 现有程序如下: Option
17、Base 1 Private Sub Form_Click() Dim x(5, 6)As Integer, y(5)As Integer For i=1 To 5 For i=1 To 6 x(i, j)=Int(Rnd*9+1) Next i Next i Call f(5, 6, x, y) For i=1 To 5 Print y(i); Next i End Sub Sub f(m As Integer, n As Integer, a() As Integer, b()As Integer) For i=1 To m b(i)=0 For i=1 To n b(i)=b(i)+a(
18、i, j) Next j Next i End Sub 关于上述程序,以下叙述中正确的是 ( A)调用过程语句有错,参数不匹配 ( B)程序有错,数组下标越界 ( C) v数组中保存的是 x数组每行数据之和 ( D) x数组中数据的取值范围是 1-10 34 窗体上有一个名称为 Commandl的命令按钮,一个名称为 Textl的文本框。编写如下程序: Private Sub Command1_Click() Dim x As Integer x=Val(InputBox(”输入数据 ”) Text1=Str(x+fun(x)+fun(x) End Sub Private Function f
19、un(ByRef n As Integer) If n 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表示参数按址传递 35 窗体上有一个名称为 Commandl的命令按钮,并有如下程序代码: Private Sub Commandl_Click() Static a a=1: b=2: c=3 Ca
20、ll f(a, b, c) Print a: b: c End Sub Sub ffByVal x, ByRefy, z) x=x+1: y=y+1: z=z+1 End Sub 运行程序,单击命令按钮,窗体上显示的是 ( A) 1 3 3 ( B) 1 3 4 ( C) 2 3 3 ( D) 2 3 4 36 窗体上有一个名称为 Commandl的命令按钮,其单击事件过程如下: Private Sub Command1_Click() Dim x As Integer,y As Integer Static z As Integer x=3: y=5: z=y Call f(x, y, z)
21、 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 37 窗体上有一个名称为 Commandl的命令按钮,其单击事件过程及相关的代码如下: Private Sub Command1_Click() Dim x As Integer,V As Integer x=Va
22、l(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 38 设有如下程序: Private Sub Inv(ByVal xStr As String, yStr As
23、 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=”abcdePInv S1 S2 Print S2 End Sub 运行程序,单击窗体,输出结果为 ( A) abcdef ( B) afbecd ( C) fedcba ( D) defabc 39 设有如下程序: Private
24、 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 运行程序,单击窗体,输出结果为 ( A) 20 10 10 10 ( B) 10 15 20 10 ( C) 20 15 10 15 ( D) 20 10 20 10 40 由高中数学可知,对于连续函数 f(x),若 f(x1)与 f(x2)值的符号相反,则在
25、x1和 x2之间必存在 x0,使得 f(x0)=0(该点称为 “零点 ”)。设有 VB函数: Private Function f(x As Single)As Single可以返回 f(x)的值 (函数体没有给出 )。下面程序的功能是从键盘输入 2个实数 x1、 x2,判断在 x1、 x2之间是否存在零点。 Private Sub Commandl_Click() Dim xl As Single, x2 As Single x1=InputBox(”请输入一个实数 x1”) x2=InputBox(”请再输入一个实数 x2”) If(_)Then Print”在 ”: x1; ”与 ”;
26、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 41 编写如下程序: Private Sub Commandl_Click() Private Function funl(ByVal m As Integer, Dim x As Integer, y As Integer n As I
27、nteger)As Integer x=10: y=20 m=m*m: n=n+n Call funl(x, y) End Function Print x; y End Sub 程序运行后,单击命令按钮 Commandl,输出结果为 ( A) 10 25 ( B) 10 40 ( C) 100 25 ( D) 1 00 40 42 设有以下过程: Private Sub proc(x As Integer,Optional y As Integer) Print x, y End Sub 针对此过程,下面正确的过程调用语句是 ( A) Call proc(a!, 23) ( B) Call
28、proc x, 12 ( C) proc b ( D) x=proc(12) 43 以下关于过程及过程参数的描述中,错误的是 ( A)过程的参数可以是控件名称 ( B)调用过程时使用的实参的个数应与过程形参的个数相同 (假定不含可变参数 ) ( C)只有函数过程能够将过程中处理的信息返回到调用程序中 ( D)窗体可以作为过程的参数 国家二级 VB机试(过程)模拟试卷 7答案与解析 一、选择题 1 【正确答案】 A 【试题解析】 本题考查 Do While循环。在窗体的 Click事件代码里面,定义了变量 x和 n,分析 Do While循环可知, n保存循环次数, x是循环控制变量,如果x的值
29、小于 28则进入循环体,因此 x和 n的变化过程是: 3和 0、 9和 2、 27和3、 81和 4,经过 4次循环后 x值变成 81,循环条件不成立,循环结束。 【知识模块】 过程 2 【正确答案】 D 【试题解析】 本题考查的考点是有关标准模块的。 VB中的标准模块也称全局模块或总模块,由全局变量声明、模块层声明及通用过程等几部分组成,其扩展名为 bas,里面只有代码而没有任何 控件。其中全局声明放在标准模块的首部,可以在整个工程中使用。 【知识模块】 过程 3 【正确答案】 D 【试题解析】 MsgBox()函数用于显示提示信息,并可返回一个代表用户单击了哪个按钮的 Integer类型值
30、,当其作为函数使用时必须将参数放在括号内部,而返回值可以赋值给一个变量,也可以单独使用此函数而不将其返回值赋值给变量;MsgBox过程也用于显示提示信息,作为过程可以独立使用,也可以使用 Call关键字来进行调用,但此时参数需要加括号。 【知识模块】 过程 4 【正确答案】 C 【试题解析】 Sub过程分为事件过程和通用过程,过程不允许嵌套定义,即在Sub过程中再定义 Sub过程:函数过程必须有一个返回值,当过程的声明语句中使用了可选参数的时候,允许实参个数与形参不同。 【知识模块】 过程 5 【正确答案】 D 【试题解析】 子过程可以独立使用,也可以使用 Call关键字来进行调用,但此时参数
31、需要加括号。本题中子程序的名字是 S,故此 B、 C选项可以排除, A选项中缺少参数的括号。 【知识模块】 过程 6 【正确答案】 D 【试题解析】 本题考查的考 点是有关过程调用的。窗体加载时首先执行了 Load事件里面的代码,设置 Labell的标题为 “ABCDE”, Label2的标题为 “10”;当单击命令按钮时,调用了 func过程,在这个过程中把传入的 Labell的标题设置为“1234”, Label2的标题没有发生变化。 【知识模块】 过程 7 【正确答案】 A 【试题解析】 本题中的 fun过程是一个递归调用,如果参数 x为偶数则进入递归;本题中的实参 6传入 fun过程之
32、后,因其是偶数,所以执行 fun(6 2)也就是先输出 3,然后返回到 fun中输出 6。 【知识模块】 过程 8 【正确答案】 C 【试题解析】 本题中的子过程 subf会进行递归调用,只要在参数 s1中取出的字符不是空字符串就进行递归,直到 i的值超过 s1的长度才停止,然后进行回归操作,相当于每一次向 s2中连接的字符都是最后取出的 s1中的字符,最终实现字符串的逆序操作。 【知识模块】 过程 9 【正确答案】 A 【试题解析】 本题考查的考点是有关函数过程的。函数过程町以返回一个函数值,但这个函数值的类型和参数类型没有任何关系;如果不指明参数的类型,则默认参数为变体型 ;数组作为函数参
33、数时只能通过传地址的方式来调用。 【知识模块】 过程 10 【正确答案】 D 【试题解析】 函数过程和 Sub子过程一样,也可以有参数也可以没有参数;参数传递也可以使用地址传递也可以使用值传递;都是在代码中进行调用,只是函数过程必须有一个返回值,子过程没有。 【知识模块】 过程 11 【正确答案】 B 【试题解析】 本题考查的考点是有关过程调用的。对于这种复杂的函数调用,一定要搞清楚调用的顺序以及参数传递的是值还是地址。根据过程调用的原则,首先调用最内层的 Fun1(x, x一 1),其结果为 12, x的值不变仍为 10;然后调用Fun1(x, 12),其结果为 6, x的值也不变为 10;
34、最后调用 Funl(6, x一 1),其结果为 0, x的值也不变为 10。本题中的传址调用是没有作用的,因为表达式是不能传地址的。 【知识模块】 过程 12 【正确答案】 C 【试题解析】 本题中 search函数的参数是两个字符串,在函数内进行循环,依次取出第一个参数的第 k位和第二个参数进行比较,如果相等则返回 k的值,实际上就是查找第二个参数在第一个参数中出现的位置。 【知识模块】 过程 13 【正确答案】 B 【试题解析】 本题考奄的考点是有关函数调用和 If语句的。要注意在前 4次循环中每次调用 f函数时传递的参数分别为 6、 7、 8、 9,都是小于 10的,最后一次循环传递参数
35、 10,所以最终结果应该为 8+9+10+11+11=49。 【知识模块】 过程 14 【正确答案】 C 【试题解析】 本题共调用 Fun函数 2次,每次的函数值都是参数的平方减去 11的值,故此输出一 10, -7。 【知识模块】 过程 15 【正确答案】 C 【试题解析】 函数过程有一个返 回值,一般出现在表达式中组成表达式的一部分。本题的题目要求累加各个数的阶乘,而函数 s的作用是求参数的阶乘,因此应该在每次循环中累加 f函数的值,参数为循环变量 i。 【知识模块】 过程 16 【正确答案】 A 【试题解析】 本题是一个简单的函数调用,在函数中会判断参数 x的值,根据 x的值不同执行 If语句的不同分支。由于实际参数为 100不满足 x10,会将形参 m的值也改变为 12,