1、国家二级 VB机试(过程)模拟试卷 3及答案与解析 一、选择题 1 以下叙述中错误的是 ( A)标准模块文件的扩展名是 .bas ( B)标准模块文件是纯代码文件 ( C)在标准模块中声明的全局变量可以在整个工程中使用 ( D)在标准模块中不能定义过程 2 以下关于过程的叙述中,错误的是 ( A)在 Sub过程中不能再定义 Sub过程 ( B)事件过程也是 Sub过程 ( C)过程调用语句的形参个数必须与实参个数相同 ( D)函数过程一定有返回值 3 在窗体上画两个标签和一个命令按钮,其名称分别为 Label1、 Label2和Command1,然后编写如下程序: Private Sub fu
2、nc(L As Label) L.Caption=“1234“ End Sub Private Sub Form_Load() Label1.Caption=“ABCDE“ Label2.Caption=10 End Sub Private Sub Command1_Click() a=Val(Label2.Caption) Call func(Label1) Label2.Caption=a End Sub 程序运行 后,单击命令按钮,则在两个标签中显示的内容分别为 ( A) ABCD和 10 ( B) 1234和 100 ( C) ABCD和 100 ( D) 1234和 10 4 编写如
3、下程序: Private Sub Command1_Click() Dim str1 As String,str2 AsString str1=InputBox(“输入一个字符串 “):subf str1,str2:Print 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) If temp “Then subf s1,s2 s2=s2 Next i End Sub 程序运行后,单击命令按钮,在窗体上显示的内容是 ( A)
4、1 3 ( B) 10 8 ( C) -10 -7 ( D) 0 5 8 在窗体上画一个名称为 Command1的命令按钮,并编写如下程序: Function Fun(x) y=0 If x 10Then y=x Else y=y+10 End If Fun=y End Function Private Sub Command1_Click() n=InputBox(“请输入一个数 “):n=Val(n) P=Fun(n):PrintP End Sub 运行程序,单击命令按钮,将显示输入对话框,如果在对话框中输入 100,并单击“确定 ”按钮,则输出结果为 ( A) 10 ( B) 100 (
5、 C) 110 ( D)出错信息 9 设有如下函数: 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 c “Then st=stn=n10 Wend Print End Sub 此程序功能是:输入 2个正整数,反序输出这 2个数的每一位数字,再反序输出这2个数之和的每一位数字。例如:若输入 123和 234,则应该输出: 3 2 1 4 3 2 7 5 3但调试时 发现只输出了前 2行 (即 2个数的反序 ),而未输出第 3行 (即 2个数之
6、和的反序 ),程序需要修改。下面的修改方案中正确的是 ( A)把过程 pro的形式参数 n As Integer改为 ByVal n As Integer ( B)把 Call pro(a+b)改为 pro a+b ( C)把 n=n10改为 n=n/10 ( D)在 pro b语句之后增加语句 c%=a+b,再把 Call pro(a+b)改为 pro c 14 编写如下程序: Private Sub Command1_Click() Dim x As Integer x=10 Print fun1(x,12)+x End Sub Private Function fun1(m As Int
7、eger,n As Integer)As Integer If n 10 Then m=n fun1=m+n End Function 程序运行后,单击命令按钮 Command1,输出结果为 ( A) 30 ( B) 32 ( C) 34 ( D) 36 15 设有如下通用过程: Public Functionf(x As Integer) Dim y As Integer x=20:y=2:f=x*y End Function 在窗体上画一个命令按钮,其名称为 Command1,然后编写如下事件过程: Private Sub Command1_Click() Static x As Inte
8、ger x=10:y=5:y=f(x)Print x;y End Sub 程序运行后,如果单击命令按钮,则在窗体上显示的内容是 ( A) 10 5 ( B) 20 40 ( C) 20 5 ( D) 10 40 16 编写如下程序: Private Sub Command1_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
9、:b=b+100 End Sub 程序运行后,单击命令按钮 Command1,并输入数值 10和 15,则输出结果为 ( A) 10 115 ( B) 20 115 ( C) 35 15 ( D) 20 15 17 窗体上有一 个名称为 Command1的命令按钮,一个名称为 Text1的文本框。编写如下程序: Private Sub Command1_Click() Dim x As Integer x=Val(InputBox(“输入数据 “):Text1=Str(x+fun(x)+fun(x) End Sub Private Function fun(ByRef n As Integer
10、) If n Mod 3=0Then 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表示参数按址传递 18 窗体上有一个名称为 Command1的命令按钮,其单击事件过程如下: Private Sub Command1_Click() Dim x As Integer,y As Integer Static zAs Inte
11、ger x=3:y=5:z=y Call f(x,y,z) 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 19 设有如下程序: Private Sub Inv(ByVal xStr As String,yStr As String) Dim tStr As String
12、 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() DimS1 As String,S2 As String S1=“abcdef“Inv S1,S2 Prin ( A) abcdef ( B) afbecd ( C) fedcba ( D) defabc 20 由高中数学可知,对于连续函数 f(x),若 f(x1)与 f(x2)值的符号相反,则在 x1和 x2之间必存在 x0,使得 f(x0)=0(该点
13、称为 “零点 ”)。设有 VB函数: Private Function f(x As Single)As Single可以返回 f(x)的值 (函数体没有给出 )。下面程序的功能是从键盘输入 2个实数 x1、 x2,判断在 x1、 x2之间是否存在零点。 Private Sub Command1_Click() Dim x1 As Single,x2 As Single x1=InputBox(“请输入一个实数 x1“) x2=InputBox(“请再 输入一个实数 x2“) If(_)Then Print“在 “;x1;“与 “;x2;“之间存在零点 “ Else Print“不能确定在 “
14、;x1;“与 “;x2;“之间是否存在零点 “ End If End Sub Private Function f(x As Single)As Single End Function 为使上面程序可以实现该功能,程序代码中横线处应填写的代码是 ( A) f(x1) 0 Or f(x2) 0 ( B) f(x1) 0 And f(x2) 0 ( C) f(x1)*f(x2) 0 ( D) f(x1)*f(x2) 0 21 设有以下过程: Private Sub proc(x As Integer,Optional y As Integer) Print x,y End Sub 针对此过程,下面
15、正确的过程调用语句是 ( A) Call proc(a!,23) ( B) Call proc x%,12 ( C) proc b% ( D) x=proc(12) 国家二级 VB机试(过程)模拟试卷 3答案与解析 一、选择题 1 【正确答案】 D 【试题解析】 本题考 查的考点是有关标准模块的。 Visual Basic 中的标准模块也称全局模块或总模块,由全局变量声明、模块层声明及通用过程等几部分组成,其扩展名为 bas,里面只有代码而没有任何控件。其中全局声明放在标准模块的首部,可以在整个工程中使用。 【知识模块】 过程 2 【正确答案】 C 【试题解析】 Sub过程分为事件过程和通用过
16、程,过程不允许嵌套定义,即在Sub过程中再定义 Sub过程;函数过程必须有一个返回值,当过程的声明语句中使用了可选参数的时候,允许实参个数与形参不同。 【知识模块】 过 程 3 【正确答案】 D 【试题解析】 本题考查的考点是有关过程调用的。窗体加载时首先执行了 Load事件里面的代码,设置 Label1 的标题为 “ABCDE”, Label2的标题为 “10”;当单击命令按钮时,调用了 func过程,在这个过程中把传入的 Label1 的标题设置为“1234”, Label2 的标题没有发生变化。 【知识模块】 过程 4 【正确答案】 C 【试题解析】 本题中的子过程 subf 会进行递归
17、调用,只要在参数 s1中取出的字符不是空字符串就进行递归,直到 i的值超过 s1的长度才 停止,然后进行回归操作,相当于每一次向 s2 中连接的字符都是最后取出的 s1中的字符,最终实现字符串的逆序操作。 【知识模块】 过程 5 【正确答案】 D 【试题解析】 函数过程和 Sub子过程一样,也可以有参数也可以没有参数:参数传递也可以使用地址传递也可以使用值传递;都是在代码中进行调用,只是函数过程必须有一个返回值,子过程没有。 【知识模块】 过程 6 【正确答案】 C 【试题解析】 本题中 search 函数的参数是两个字符串,在函数内进行循环,依次取出第一个参数的第 k 位和第二 个参数进行比
18、较,如果相等则返回 k 的值,实际上就是查找第二个参数在第一个参数中出现的位置。 【知识模块】 过程 7 【正确答案】 C 【试题解析】 本题共调用 Fun 函数 2次,每次的函数值都是参数的平方减去 11的值,故此输出 -10, -7。 【知识模块】 过程 8 【正确答案】 A 【试题解析】 本题是一个简单的函数调用,在函数中会判断参数 x的值,根据 x的值不同执行 If语句的不同分支。由于实际参数为 100不满足 x 10,因此函数返回值为 10。 【知识模块】 过程 9 【正 确答案】 B 【试题解析】 在函数中进行字符串的正向遍历,每次取出字符串中的一个字符,判断该字符如果不是空格就将
19、其连接到 st上,否则令 n+1。循环结束后将会删除字符串 ch 中的空格符,返并使用函数值返回删除字符的个数。 【知识模块】 过程 10 【正确答案】 B 【试题解析】 本题中函数 fun除了有返回值外,还通过地址传递的形参 str带回修改以后的字符串。在函数中会依次遍历整个字符串,每一次取得一个字符,判断该字符和给定的参数 “a”是否相等,如果不等则将其原样连接,否则将此字符转换成大写 字符以后连接,而且令计数器加 1。所以整个函数的功能就是将形参 s仃中所有等于形参 ch 的字符转换成大写,并且统计这类字符的个数作为函数返回值。 【知识模块】 过程 11 【正确答案】 C 【试题解析】
20、本题考查的考点是有关过程参数的。在 VB中不仅可以使用窗体作为通用过程的参数,还可以使用控件作为通用过程参数。控件参数用法同窗体参数,不过形参类型一般为 Control。在使用数组作为参数时,使用的是传地址的方式。要想把过程中的信息传回到调用过程中,不但使用函数可以完成,也可以使用传地址调用的参数传递 来完成。 【知识模块】 过程 12 【正确答案】 B 【试题解析】 传值就是通过值传送实际参数,即传送实参的值而不是传送它的地址。在这种情况下,通用过程不访问变量 (实参 )的原始地址,因此不会改变原来变量的值,所有的变化都是在变量的副本上进行的。 传值方式通过关键字 By Val来实现。也就是
21、说,在定义通用过程时,如果形参前面有 ByVal,则该参数通过传值方式传送。在传值方式下,对形参的改变不会影响到实参。 【知识模块】 过程 13 【正确答案】 A 【试题解析】 本题考查的考点 是有关过程调用的。本题题干中的程序之所以不能显示第三行的值,是由于在调用 pro函数时使用的是默认的传地址调用,这时在pro过程中的对形参的更改都会影响到实参。仔细观察 pro过程,发现每次循环都要对形参 n整除 10一直到 n为 0为止,所以每次 pro过程调用结束后都会把对应实参改为 0。修改参数传递方式为传值调用即可使程序正确运行。 【知识模块】 过程 14 【正确答案】 D 【试题解析】 本体是
22、一个简单的函数调用,调用 fun1函数时将 x的值作为实参传送给 fun1函数,由于第二个参数 12满足 n 10, 会将形参 m的值也改变为12,因返回的函数值为 24;由于函数 fun1的各个参数为地址传递,因此对于形参m的值会影响实参 x的值,即 x的值也变为 12。 【知识模块】 过程 15 【正确答案】 B 【试题解析】 本题中函数 f中的形参 x和按钮的单击事件中的静态变量 x是不同的变量,相互之间互不影响。函数 f的参数 x使用的是地址传递的形式,即形参的变化会影响到实参;在命令按钮的单击事件中调用函数 f,会使得参数 x的值变成20,函数返回值为 40。 【知识模块】 过程 1
23、6 【正确答案】 D 【试 题解析】 在 Visual Basic中调用过程时,参数有两种传递形式:按值传递(Byval)和按址传递 (Byref),默认为按址传递。其中,当参数按址传递时,如果在引用该参数的过程中改变了形参的值,同时也就改变了传递参数时实参变量的值。本题中 f的参数 a是按地址传递的, b 是按值传递的,因此在 f中对 a的改变会影响实参 x,对 b的操作不会影响实参 y。 【知识模块】 过程 17 【正确答案】 A 【试题解析】 本题中的函数 fun 的功能是判断参数是否能被 3整除,若可以整除则将 n翻倍,否则将 n变为 n的平方 返回。在函数头部没有声明函数的返回值类型
24、,默认为变体型,可以接受任何数据类型的赋值; ByRef、表示参数按址传递,对形参的改变将会影响实参;当输入 5的时候输出 5+25+625=655;当输入 6的时候输出 6+12+24=42。 【知识模块】 过程 18 【正确答案】 D 【试题解析】 在 Visual Basic中调用过程时,参数有两种传递形式:按值传递(Byval)和按址传递 (Byref),默认为按址传递。其中,当参数按址传递时,如果在引用该参数的过程中改变了形参的值,同时也就改变了传递参数时 实参变量的值。本题中 f的参数 a是按值传递的, b和 c是按地址传递的,因此在 f 中对 a的改变不会影响实参 x,对 b 和
25、 c的操作会影响实参 x和 v。 【知识模块】 过程 19 【正确答案】 C 【试题解析】 在 Visual Basic中调用过程时,参数有两种传递形式:按值传递(Byval)和按址传递 (Byref),默认为按址传递。其中,当参数按址传递时,如果在引用该参数的过程中改变了形参的值,同时也就改变了传递参数时实参变量的值。本题中 Inv的参数 xStr是按值传递的, yStr是按地址传递的,因此在 Inv中对 xStr的改变不会影响实参 S1,对 yStr的操作会影响实参 S2。过程 Inv的作用是在每次循环中取出 S1 字符串靠后面的值连接到 tStr中,然后将 tStr赋值给 yStr从而通过地址传递带回给 S2,即字符串的逆序。 【知识模块】 过程 20 【正确答案】 C 【试题解析】 本题实际是要求判断两个函数值是否符号相反,由中学数学的知识可知,两数相反的标志是两数相乘结果小于 0。 【知识模块】 过程 21 【正确答案】 C 【试题解析】 Optional 声明的参数是可选参数,在调用的时 候可以省略对应的实参,但是可选参数必须放在形参列表的最后声明;在过程内可以使用 IsMissing函数来判断是否实际调用的时候省略了对应的实参。子过程可以独立使用,也可以使用 Call关键字来进行调用,但此时参数需要加括号。 【知识模块】 过程