1、国家二级 VB机试(过程、多重窗体与环境应用)模拟试卷 1及答案与解析 一、选择题 1 以下叙述中错误的是 ( A)标准模块文件的扩展名是 bas ( B)标准模块文件是纯代码文件 ( C)在标准模块中声明的全局变量可以在整个工程中使用 ( D)在标准模块中不能定义过程 2 以下关于过程的叙述中,错误的是 ( A)在 Sub过程中不能再定义 Sub过程 ( B)事件过程也是 Sub过程 ( C)过程调用语句的形参个数必须与实参个数相同 ( D)函数过程一定有返回值 3 在窗体上画两个标签和一个命令按钮, 其名称分别为 Label1、 Label2和Command1,然后编写如下程序: Priv
2、ateSubfune(L As Labe1) Private Sub Command1_Click() L Caption=“1234“ a=Val(Label2 Caption) End Sub Call func(Label1) Private Sub Form_Load() Label2 Caption=a Label1 Caption=“ABCDE“ End Sub Label2 Caption=10 End Sub 程序运行后,单击命令按钮,则在两个标签中显示的内容分别为 ( A) ABCD和 10 ( B) 1234和 100 ( C) ABCD和 100 ( D) 1234和 1
3、0 4 编写如下程序: Private Sub Command1_Click() Dim str1 As String, str 2As String str1=InputBox(“输入一个字符串 “): subfstr1, 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 & temp End Sub 程序运行后,单击命令按钮
4、Command1,且输入 “abcdef”,则输出结果为 ( A) atbecd, ( B) cdbeaf ( C) fedeba ( D) adbecf 5 在 VB中,函数过程与子程序过程的区别之一是 ( A)函数过程必须有参数,而子程序过程可以没有 ( B)函数过程的参数 传递只采用值传递,而子程序过程只采用地址传递 ( C)在程序中,子程序过程调用的代码可以写在表达式中,而函数过程不能 ( D)函数过程有返回值,而子程序过程没有 6 有下面程序代码: Private Sub Command1_Click() Dim a As String a=“COMPUTER“n=search(a,
5、 “T“): Print IIf(n=0, “未找到 “, n) End Sub Private Function search(str As String, ch As String)As Integer For k=1To Len(str) c=Mid(str, k, 1) If c=ch Then search=k: Exit Function End If Next k search=0 End Ftmetion 程序运行后,单击命令按钮 Command1,输出结果是 ( A) 0 ( B) 8 ( C) 6 ( D)未找到 7 假定有以下通用过程: Function Fun(n As
6、 Integer)As Integer x=n*n: Fun=x-11 End Function 在窗体上画一个命令按钮,其 名称为 Command1,然后编写如下事件过程: Private Sub Command1_Click() Dim i As Integer For i=1To2 y=Fun(i)Print y; Next i End Sub 程序运行后,单击命令按钮,在窗体上显示的内容是 ( A) 1 3 ( B) 10 8 ( C) -10 -7 ( D) 0 5 8 在窗体上画一个名称为 Command1的命令按钮,并编写如下程序: Function Fun(x) y=0 If
7、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): Print P 运行程序,单击命令按钮,将显示输入对话框,如果在对话框中输入 100,并单击“确定 ”按钮,则输出结果为 ( A) 10 ( B) 100 ( C) 110 ( D)出错信息 9 设有如下函数: Function DelSpace(ch As String)As Integer Dim n, st$, c$ st=“: n=0 For k
8、=1To Len(ch) C=Mid(ch, k, 1) If c “ “Then st=st&c Else n=n+1 End If Next k ch=st: DelSpace=n End Function 该函数的功能是 ( A)统计并返回字符串 ch中字符的个数 ( B)删除字符串 ch中的空格符,返回删除字符的个数 ( C)统计并返回字符串 ch中非空格字符数 ( D)删除字符串 ch中除空格符外的其他字符,返回删除字符的个数 10 设有下面程序代码: Private Sub Command1_Click() Dim str As String, ch As String str=“
9、Visual Basic Programming“: ch=“a“ n=fun(oh, sir): Print str,n End Sub Private Function fun(ch As String, str As String)As Integer Dim strbufAs String, c As String, n As Integer For k=1To Len(str) c=Mid$(str, k, 1) If c ch Then strbuf=strbuf & C Else strbuf=strbuf & UCase(c): n=n+1 End If Next k str=
10、strbuf: fun=n End Function 程序运行时的输出是 ( A) Visual Basic Programming0 ( B) VisuAl BAsic ProgrAmming3 ( C) Visul Bsic Progrmming3 ( D) VisualBasicProgramming2 11 以下关于过程及过程参数 的描述中,错误的是 ( A)调用过程时可以用控件名称作为实际参数 ( B)用数组作为过程的参数时,使用的是 “传地址 ”方式 ( C)只有函数过程能够将过程中处理的信息传回到调用的程序中 ( D)窗体 (Form)可以作为过程的参数 12 为了通过传值方式来
11、传送过程参数,存函数声明部分应使用的关键字为 ( A) Value ( B) ByVal ( C) -ByRef ( D) Reference 13 某人编写了下面的程序 Private Sub Command1_Click() Dim a As Integer, b As Integer a=InputBox(“请输入整数 “): b=InputBox(“请输入整数 “) pro a: pro b Call pro(a+b) End Sub Private Sub pro(n As Integer) While(n 0) Print n Mod 10; n=n 10 Wend Print E
12、nd Sub 此程序功能是:输入 2个正整数,反序输出这 2个数的每一位数字,再反序输出这2个数之和的每一位数字。例如:若输入 123和 234,则应该输出: 3 2 1 4 3 2 7 5 3但调试时发现只输出了前 2行 (即 2个数的反序 ),而未输出第 3行 (即 2个数之和的反序 ),程序需要修改。下面的修改方案中正确的是 ( A)把过程 pro的形式参数 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,再把
13、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 Integer, n As Integer)As Integer If n 10Then m=n fun1=m+n End Function 程序运行后,单击命令按钮 Command1,输出结果为 ( A) 30 ( B) 32 ( C) 34 ( D) 36 15 设有如下通用过程: Public Function f(
14、x As Integer) Dim y As Integer x=20: y=2: f=x*y End Function 在窗体上画一个命令按钮,其名称为 Command1,然后编写如下事件过程: Private Sub Command1_Click() Static x As Integer x=10: y=5: y=fix)Print x; y End Sub 程序运行后,如果单击命令按钮,则在窗体上显示的内容是 ( A) 10 5 ( B) 20 40 ( C) 20 5 ( D) 10 40 16 编写如下程序: Private Sub Command1_Click() Dim x A
15、s 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 窗体上 有一个名称为 Command1的命令按钮,一个名称为 Text1的文
16、本框。编写如下程序: 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) If n Mod3=0Then n=n+n Else n=n*n End If fun=n End Function 对于上述程序,以 下叙述中错误的是 ( A)语句 fun=n有错,因为 n是整型, fun没有定义类型 ( B)运行程序,输入值为 5时,文本框中显示 655 ( C)
17、运行程序,输入值为 6时,文本框中显示 42 ( D) ByRef表示参数按址传递 18 窗体上有一个名称为 Command1的命令按钮,其单击事件过程如下: 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) Print x; y; z End Sub Private Sub f(ByVal a As Integer, ByRefb As Integer, c As Integer) a=a+a: b=b+b: c=c+c E
18、nd 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 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
19、 String, S2 As String S1=“abcdef“Inv S1 S2 Print S2 End Sub 运行程序,单击窗体,输出结果为 ( A) abcdef ( B) afbecd ( C) fedcba ( D) defabc 20 由高中数学可知,对于连续函数 f(x),若 f(x1)与 f(x2)值的符号相反,则在 x1和 x2之间必存在 x0,使得 f(x0)=0(该点称为 “零点 ”)。设有 VB函数: Private Function f(x As Single)As Single可以返回 fix)的值 (函数体没有给出 )。下面程序的功能是从键盘输入 2个实数
20、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“不能确定在 ”; x1; “与 “; x2; “之间是否存在零点 “ End If End Sub Private Function f(x As Single)As Single End Function
21、为使上面程序可以实现该功能,程序代码中横线处应填写的代码是 ( 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 针对此过程,下面正确的过程调用语句是 ( A) Call proc(a!, 23) ( B) Call proc x, 12 ( C) proc b ( D) x=proc(12) 22 以下关于多
22、重窗体程序的叙述中,错误的是 ( A)对于多重窗体程序,需要单独保存每个窗体 ( B)在多重窗体程序中,可以根据需要指定启动窗体 ( C)在多重窗体程序中,各窗体的菜单是彼此独立的 ( D)用 Hide方法不仅可以隐藏窗体,而且还可以清除内存中的窗体 23 对于含有多个窗体的工程而言,以下叙述中正确的是 ( A)没有指定启动窗体时,系统自动将最后一个添加的窗体设置为启动窗体 ( B)启动窗体可以通过 “工程属性 ”对话框指定 ( C) Load方法兼有装入和显示窗体两种功能 ( D) Hide方法可以将指定的窗体从内存中清除 24 工程中有 Form1、 Form2两个窗体 (Form1中有文
23、本框 Text1: Form2中有 Text1文本框和 Command1命令按钮 )。 Form1是启动窗体。在这些模块中编写下面的程序代码: Form1中的代码如下: Private Sub Text1_DblClick() Text1=“VisualBasic“ Form2 Show End Sub Form2中的代码如下: Private Sub Command1_Click() Text1=Form1 Text1 Form1 Show End Sub 下面关于程序的 叙述中错误的是 ( A)双击 Form1的 Text1后, Text1中显示 “VisualBasic”,弹出 Form
24、2 ( B)双击 Form1的 Text1后, Foma2成为当前窗体 ( C)单击 Form2的命令按钮, Form1成为当前窗体 ( D) Form2的 Text1-Form1 Text1语句不能止确执行 25 设工程文件包含两个窗体文件 Form1 frm、 Form2 frm及一个标准模块文件Module1 bas。两个窗体上分别只有一个名称为 Command1的命令按钮。 Form1的代码如下: Public x As Integer Pfivate Sub Form_Load() x=1: y=5 End Sub Private Sub Command1_Click() Form2
25、 Show End Sub Forrn2的代码如下: Private Sub Command1_Click() Print Form1 x, y End Sub Module1的代码如下: Public y As Integer 运行以上程序,单击 Form1的命令按钮 Command1,则显示 Form2;再单击 Form2上的命令按钮 Command1,则窗体上显示的是 ( A) 1 5 ( B) 0 5 ( C) 0 0 ( D)程序有错 26 Visual Basic中的 “启动对象 ”是指启动 Visual Basic应用程序时,被自动加载并首先执行的对象。下列关于 Visual B
26、asic“启动对象 ”的描述中,错误的是 ( A) “启动对象 ”可以是指定的标准模块 ( B) “启动对象 ”可以是指定的窗体 ( C) “启动对象 ”可以是 Sub Main过程 ( D)若没有经过设置,则默认的 “启动对象 ”是第一个被创建的窗体 27 如果把程序的启动对象设置 为: Sub Main,则 Sub Main过程 ( A)只能写在 Form1窗体中代码的最前面 ( B)可以写在 Form1窗体中代码的任何位置 ( C)只能写在某个标准模块的代码中 ( D)可以写在任何窗体或标准模块的代码中 国家二级 VB机试(过程、多重窗体与环境应用)模拟试卷 1答案与解析 一、选择题 1
27、 【正确答案】 D 【试题解析】 本题考查的考点是有关标准模块的。 Visual Basic中的标准模块也称全局模块或总模块,由全局变量声明、模块层声明及通用过程等几部分组成,其扩展名为 bas,里 面只有代码而没有任何控件。其中全局声明放在标准模块的首部,可以在整个工程中使用。 【知识模块】 过程 2 【正确答案】 C 【试题解析】 Sub过程分为事件过程和通用过程,过程不允许嵌套定义,即在Sub过程中再定义 Sub过程;函数过程必须有一个返回值,当过程的声明语句中使用了可选参数的时候,允许实参个数与形参不同。 【知识模块】 过程 3 【正确答案】 D 【试题解析】 本题考查的考点是有关过程
28、调用的。窗体加载时首先执行了 Load事件里面的代码,设置 Label1的标题为 “ABcDE”, Label2的标题为 “10”;当单击命令按钮时,调用了 func过程,在这个过程中把传入的 Label1的标题设置为“1234”, Label2的标题没有发生变化。 【知识模块】 过程 4 【正确答案】 C 【试题解析】 本题中的子过程 subf会进行递归调用,只要在参数 s1中取出的字符不是空字符串就进行递归,直到 i的值超过 s1的长度才停止,然后进行回归操作,相当于每一次向 s2中连接的字符都是最后取出的 s1中的字符,最终实现字符串的逆序操作。 【知识模块】 过程 5 【正确答案】 D
29、 【试题解析】 函数过程和 Sub子过程一样,也可以有参数也可以没有参数;参数传递也可以使用地址传递也可以使用值传递;都是在代码中进行调用,只是函数过程必须有一个返回值,子过程没有。 【知识模块】 过程 6 【正确答案】 C 【试题解析】 本题中 search函数的参数是两个字符串,在函数内进行循环,依次取出第一个参数的第 k位和第二个参数进行比较,如果相等则返回 k的值,实际上就是查找第二个参数在第一个参数中出现的位置。 【知识模块】 过程 7 【正确答案】 C 【试题解 析】 本题共调用 Fun函数 2次,每次的函数值都是参数的平方减去 11的值,故此输出 -10, -7。 【知识模块】
30、过程 8 【正确答案】 A 【试题解析】 本题是一个简单的函数调用,在函数中会判断参数 x的值,根据 x的值不同执行 If语句的不同分支。由于实际参数为 100不满足 x 10,因此函数返回值为 10。 【知识模块】 过程 9 【正确答案】 B 【试题解析】 在函数中进行字符串的正向遍历,每次取出字符串中的一个字符,判断该字符如果不是空格就将其连接到 st上,否则令 n+1。循环结束 后将会删除字符串 ch中的空格符,返并使用函数值返回删除字符的个数。 【知识模块】 过程 10 【正确答案】 B 【试题解析】 本题中函数 fun除了有返回值外,还通过地址传递的形参 str带回修改以后的字符串。
31、在函数中会依次遍历整个字符串,每一次取得一个字符,判断该字符和给定的参数 “a”是否相等,如果不等则将其原样连接,否则将此字符转换成大写字符以后连接,而且令计数器加 1。所以整个函数的功能就是将形参 str中所有等于形参 ch的字符转换成大写,并且统计这类字符的个数作为函数返回值。 【知识模 块】 过程 11 【正确答案】 C 【试题解析】 本题考查的考点是有关过程参数的。在 VB中不仅可以使用窗体作为通用过程的参数,还可以使用控件作为通用过程参数。控件参数用法同窗体参数,不过形参类型一般为 control。在使用数组作为参数时,使用的是传地址的方式。要想把过程中的信息传回到调用过程中,不但使
32、用函数可以完成,也可以使用传地址调用的参数传递来完成。 【知识模块】 过程 12 【正确答案】 B 【试题解析】 传值就是通过值传送实际参数,即传送实参的值而不是传送它的地址。在这种情 况下,通用过程不访问变量 (实参 )的原始地址,因此不会改变原来变量的值,所有的变化都是在变量的副本上进行的。 传值方式通过关键字 By Val来实现。也就是说,在定义通用过程时,如果形参前面有 BvVal,则该参数通过传值方式传送。在传值方式下,对形参的改变不会影响到实参。 【知识模块】 过程 13 【正确答案】 A 【试题解析】 本题考查的考点是有关过程调用的。本题题干中的程序之所以不能显示第三行的值,是由
33、于在调用 pro函数时使用的是默认的传地址调用,这时在pro过程中的对形参的更改都会影响到实 参。仔细观察 pro过程,发现每次循环都要对形参 n整除 10一直到 n为 0为止,所以每次 pro过程调用结束后都会把对应实参改为 0。修改参数传递方式为传值调用即可使程序正确运行。 【知识模块】 过程 14 【正确答案】 D 【试题解析】 本体是一个简单的函数调用,调用 fun1函数时将 x的值作为实参传送给 fun1函数。由于第二个参数 12满足 n 10,会将形参 m的值也改变为12,因返回的函数值为 24;由于函数 fun1的各个参数为地址传递,因此对于形参m的值会影响实参 x的值,即 x的
34、值也变为 12。 【 知识模块】 过程 15 【正确答案】 B 【试题解析】 本题中函数 f中的形参 x和按钮的单击事件中的静态变量 x是不同的变量,相互之间互不影响。函数 f的参数 x使用的是地址传递的形式,即形参的变化会影响到实参;在命令按钮的单击事件中调用函数 f,会使得参数 x的值变成20,函数返回值为 40。 【知识模块】 过程 16 【正确答案】 D 【试题解析】 在 Visual Basic中调用过程时,参数有两种传递形式:按值传递(Byval)和按址传递 (Byref),默认为按址传递。其中,当参数按址传递 时,如果在引用该参数的过程中改变了形参的值,同时也就改变了传递参数时实
35、参变量的值。本题中 f的参数 a是按地址传递的, b是按值传递的,因此在 f中对 a的改变会影响实参 x,对 b的操作不会影响实参 y。 【知识模块】 过程 17 【正确答案】 A 【试题解析】 本题中的函数 fun的功能是判断参数是否能被 3整除,若可以整除则将 n翻倍,否则将 n变为 n的平方返回。在函数头部没有声明函数的返回值类型,默认为变体型,可以接受任何数据类型的赋值; ByRef表示参数按址传递,对形参的改变将会影响实参;当输入 5的时候输 出 5+25+625=655;当输入 6的时候输出 6+12+24=42。 【知识模块】 过程 18 【正确答案】 D 【试题解析】 在 Vi
36、sual Basic中调用过程时,参数有两种传递形式:按值传递(Byval)和按址传递 (Byref),默认为按址传递。其中,当参数按址传递时,如果在引用该参数的过程中改变了形参的值,同时也就改变了传递参数时实参变量的值。本题中 f的参数 a是按值传递的, b和 c是按地址传递的,凶此在 f中对 a的改变不会影响实参 x,对 b和 c的操作会影响实参 x和 y。 【知识模块】 过程 19 【正确答案】 C 【试题解析】 在 Visual Basic中调用过程时,参数有两种传递形式:按值传递(Byval)和按址传递 (Byref),默认为按址传递。其中,当参数按址传递时,如果在弓 l用该参数的过
37、程中改变了形参的值,同时也就改变了传递参数时实参变量的值。本题中 Inv的参数 xStr是按值传递的, yStr是按地址传递的,因此在 Inv中对 xStr的改变不会影响实参 S1,对 yStr的操作会影响实参 S2。过程 Inv的作用是在每次循环中取出 S1字符串靠后面的值连接到 tStr中,然后将 tStr赋值给 yStr从而通过地址传递带回给 S2,即字符串的逆序。 【知识模块】 过程 20 【正确答案】 C 【试题解析】 本题实际是要求判断两个函数值是否符号相反,由中学数学的知识可知,两数相反的标志是两数相乘结果小于 0。 【知识模块】 过程 21 【正确答案】 C 【试题解析】 Op
38、tional声明的参数是可选参数,在调用的时候可以省略对应的实参,但是可选参数必须放在形参列表的最后声明;在过程内可以使用 IsMissing函数来判断是否实际调用的时候省略了对应的实参。子过程可以独 立使用,也可以使用 Call关键字来进行调用,但此时参数需要加括号。 【知识模块】 过程 22 【正确答案】 D 【试题解析】 包含多个窗体的程序称为多重窗体程序 (Mufti Form)。多重窗体是单一窗体的集合,每个窗体独立保存,各窗体之间的控件、菜单等对象都是相互独立的。对于多重窗体程序,必须指定其中某一个窗体为启动窗体,如果未指定,设计时的第一个窗体默认为启动窗体。只有启动窗体才能在运行
39、程序时自动显示出来,其他窗体必须通过 Load及 Show方法才能看到,使用 Hide方法使窗体隐藏,即不在 屏幕上显示,但仍在内存中。 【知识模块】 多重窗体与环境应用 23 【正确答案】 B 【试题解析】 没有指定启动窗体时,系统自动将第一个添加的窗体设置为启动窗体;启动窗体呵以通过 “工程属性 ”对话框指定。 Load方法用于将窗体装入内存,Show方法用于显示窗体, Hide方法用于隐藏窗体, Unload方法可以将指定的窗体从内存中清除。 【知识模块】 多重窗体与环境应用 24 【正确答案】 D 【试题解析】 本题中 Form1中文本框的双击事件中会将文本框里面的内容设置为指定的值,
40、而 且打开窗体 Form2并使 Form2成为当前窗体;在 Form2的命令按钮中的单击事件中会将本窗体中的 Text1内容赋值成 Form1窗体的文本框Text1的内容,并使 Form1成为当莳窗体。 【知识模块】 多重窗体与环境应用 25 【正确答案】 A 【试题解析】 本题考查的考点是有关变最的作用域的。本题中的 y就是在标准模块中定义的全局变量,在任何一个窗体中都能应用,并在 Form1中被赋值为 5; x是 Form1中定义的局部变量,要想在 Form2中引用,必须用 Form1 x格式来引用。 【知识模 块】 多重窗体与环境应用 26 【正确答案】 A 【试题解析】 对于多重窗体程
41、序,必须指定其中某一个窗体为启动窗体,如果末指定,设计时的第一个窗体默认为启动窗体。只有启动窗体才能在运行程序时自动显示出来,其他窗体必须通过 Load及 Show方法才能看到。在一个应用程序中,有时候需要在显示多个窗体之前对一些条件进行初始化,这就需要在启动程序时执行一个特定启动过程,并命名为 Sub Main,它类似于 C语言中的 Main函数。一个工程可以含有多个标准模块,但 Sub Main过程只能有一个,并且通常被用作启动 过程。 【知识模块】 多重窗体与环境应用 27 【正确答案】 C 【试题解析】 在一个应用程序中,有时候需要在显示多个窗体之前对一些条件进行初始化,这就需要在启动程序时执行一个特定启动过程,并命名为 SubMain,它类似于 C语言中的 Main函数。 Sub Main过程必须在标准模块窗口中建立。 【知识模块】 多重窗体与环境应用