1、国家二级 VB机试(过程)模拟试卷 8及答案与解析 一、选择题 1 假定有如下事件过程: Private Sub Form_Click() Dim X As Integer,n As Integer x=1: n=0 Do While x“Then subf s1 s2 s2=s2Fun=x11 End Function 在窗体上画一个命令按钮,其名称为 Commandl,然后编写如下事件过程: Private Sub Commandl_Click() Dim iAs Integer For i=1 To 2 y=Fun(i)Print y; Next i End Sub 程序运行后,单击命令
2、按钮,在窗体上显示的内容是 ( 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 Command1_Click() Dim i As Integer, y As Long For i=1 To 10 ( ) Next Print y End Sub 为实现功能要求,程序的括号中应该填入的内容是 ( A) Call s(i) ( B) Call s
3、( C) y=y+s(i) ( D) y=y+s 16 在窗体上画一个名称为 Commandl的命令按钮,并编写如下程序: 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 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 18 设有如下函数: Function DelSpace(ch As String)As Integer Dim n, st$, c$ st=“:
4、 n=0 For k=l T0 Len(ch) c=Mid(ch, k, 1) If c0 Or f(x2)0 41 编写如下程序: Private Sub Command1_Click() Dim x As Integer, Y As Integer x=10: y=20 Call funl(x, y) Print x; Y End Sub Private Function funl(ByVal m As Integer, n As Integer)As Integer m=m*m: n=n+n End Function 程序运行后,单击命令按钮 Commandl,输出结果为 ( A) 10
5、 25 ( B) 10 40 ( C) 100 25 ( D) 100 40 42 设有以下过程: Private Sub proc(x As Integer, Optional Y As Integer) Print x, y End Sub 针对此过程,下面正确的过程调用语句是 ( A) Call proc(a!, 23) ( B) Call proc x, 12 ( C) proc b ( D) x=proc(12) 43 以下关于过程及过程参数的描述中,错误的是 ( A)过程的参数可以是控件名称 ( B)调用过程时使用的实参的个数应与过程形参的个数相同 (假定不含可变参数 ) ( C)
6、只有函数过程能够将过程中处理的信息返回到调用程序中 ( D)窗体可以作为过程的参数 国家二级 VB机试(过程)模拟试卷 8答案与解析 一、选择题 1 【正确答案】 A 【试题解析】 本题考查 Do While循环。在窗体的 Click事件代码里面,定义了变量 x和 n,分析 Do While循环可知, n保存循环次数, x是循环控制变量,如果x的值小于 28则进入循环体,因此 x和 n的变化过程是: 3和 1、 9和 2、 27和3、 81和 4,经过 4次循环后 x值变成 81,循环条件不成立,循环结束。 【知识模块】 过程 2 【正确答案】 D 【试题解析】 本题考查的考点是有关标准模块的
7、。 VB中的标准模块也称全局模块或总模块,由全局变量声明、模块层声明及通用过 程等几部分组成,其扩展名为 .bas,里面只有代码而没有任何控件。其中全局声明放在标准模块的首部,可以在整个工程中使用。 【知识模块】 过程 3 【正确答案】 D 【试题解析】 MsgBox()函数用于显示提示信息,并可返回一个代表用户单击了哪个按钮的 Integer类型值,当其作为函数使用时必须将参数放在括号内部,而返回值可以赋值给一个变量,也可以单独使用此函数而不将其返回值赋值给变量;MsgBox过程也用于显示提示信息,作为过程可以独立使用,也可以使用 Call关键字来进行调用,但此时参数需要 加括号。 【知识模
8、块】 过程 4 【正确答案】 C 【试题解析】 Sub过程分为事件过程和通用过程,过程不允许嵌套定义,即在Sub过程中再定义 Sub过程;函数过程必须有一个返回值,当过程的声明语句中使用了可选参数的时候,允许实参个数与形参不同。 【知识模块】 过程 5 【正确答案】 D 【试题解析】 子过程可以独立使用,也可以使用 Call关键字来进行调用,但此时参数需要加括号。本题中子程序的名字是 S,故此 B、 C选项可以排除, A选项中缺少参数的括号。 【知识模块】 过程 6 【正确答案】 D 【试题解析】 本题考查的考点是有关过程调用的。窗体加载时首先执行了 Load事件里面的代码,设置 Label1
9、的标题为 “ABCDE”, Label2的标题为 “10”;当单击命令按钮时,调用了 func过程,在这个过程中把传入的 Label1的标题设置为“1234”, Label2的标题没有发生变化。 【知识模块】 过程 7 【正确答案】 A 【试题解析】 本题中的 fun过程是一个递归调用,如果参数 x为偶数则进入递归;本题中的实参 6传入 fun过程之后,因其是偶数,所以执行 fun(6 2),也就是先输出 3,然后返回到 fun中输出 6。 【知识模块】 过程 8 【正确答案】 C 【试题解析】 本题中的子过程 subf会进行递归调用,只要在参数 s1中取出的字符不是空字符串就进行递归,直到
10、i的值超过 s1的长度才停止,然后进行回归操作,相当于每一次向 s2中连接的字符都是最后取出的 s1中的字符,最终实现字符串的逆序操作。 【知识模块】 过程 9 【正确答案】 A 【试题解析】 本题考查的考点是有关函数过程的。函数过程可以返回一个函数值,但这个函数值的类型和参数 类型没有任何关系;如果不指明参数的类型,则默认参数为变体型;数组作为函数参数时只能通过传地址的方式来调用。 【知识模块】 过程 10 【正确答案】 D 【试题解析】 函数过程和 Sub子过程一样,也可以有参数也可以没有参数;参数传递也可以使用地址传递也可以使用值传递;都是在代码中进行调用,只是函数过程必须有一个返回值,
11、子过程没有。 【知识模块】 过程 11 【正确答案】 B 【试题解析】 本题考查的考点是有关过程调用的。对于这种复杂的函数调用,一定要搞清楚调用的顺序以及参数传递 的是值还是地址。根据过程调用的原则,首先调用最内层的 Funl(x, x1),其结果为 12, x的值不变仍为 10;然后调用Funl(x, 12),其结果为 6, x的值也不变为 10;最后调用 Funl(6,x-1),其结果为0, x的值也不变为 10。本题中的传址调用是没有作用的,因为表达式是不能传地址的。 【知识模块】 过程 12 【正确答案】 C 【试题解析】 本题中 search函数的参数是两个字符串,在函数内进行循环,
12、依次取出第一个参数的第 k位和第二个参数进行比较,如果相等则返回 k的值,实际上就是查找 第二个参数在第一个参数中出现的位置。 【知识模块】 过程 13 【正确答案】 B 【试题解析】 本题考查的考点是有关函数调用和 If语句的。要注意在前 4次循环中每次调用 f函数时传递的参数分别为 6、 7、 8、 9,都是小于 10的,最后一次循环传递参数 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,因返回的函数值为 24;由于函数 funl的各个参数为地址传递,因此对于形参 m的值会影响实参 x的值,即 x的值也变为 12。