1、国家二级 VB 机试(过程)模拟试卷 5 及答案解析(总分:62.00,做题时间:90 分钟)一、选择题(总题数:31,分数:62.00)1.现有如下程序: Private Sub Command1_Click() Public Function f(x As Integer) s=0 If x=10 Then For j=1 To 5 t=x+1 s=s+f(5+i) Else Next t=x+2 Print s End If End Sub f=t End Function 运行程序,则窗体上显示的是(分数:2.00)A.38B.49C.61D.702.假定有以下通用过程: Functi
2、on Fun(n As Integer)As Integer x=n*n:Fun=x-11 End Function 在窗体上画一个命令按钮,其名称为 Command1,然后编写如下事件过程: Private Sub Command1_Click() Dim i As Integer For i=1 To 2 y=Fun(i)Print y; Next i End Sub 程序运行后,单击命令按钮,在窗体上显示的内容是(分数:2.00)A.1 3B.10 8C.-10 -7D.0 53.求 1!+2!+10!的程序如下: Private Function s(x As Integer) Pri
3、vate Sub Command1_Click() f=1 Dim i As Integer,y As Long For i=1 To x For i=1 To 10 f=f*i ( ) Next Next s=f Print y End Function End Sub 为实现功能要求,程序的括号中应该填入的内容是(分数:2.00)A.Call s(i)B.Call sC.y=y+s(i)D.y=y+s4.在窗体上画一个名称为 Command1 的命令按钮,并编写如下程序: Function Fun(x) Private Sub Command1_Click() y=0 n=InputBox
4、(“请输入一个数“) If xA.10B.100C.110D.出错信息5.设有如下事件过程: Private Sub Command1_Click()Dim a Private Function fun(x,y)As Integer a=Array(12,3,8,5,10,3,5,9,2,4) Do While x=y For k=1 To 9 x=x-Y Print fun(a(k-1),a(k);“; Loop Next k fun=x End Sub End Function 程序运行时的输出结果是(分数:2.00)A.4 0 1 0 3 0 0 4 0B.0 3 3 5 1 3 5 1
5、 2C.9 -5 3 -5 7 -2 -4 7 -2D.9 3 3 5 7 3 5 7 26.设有如下函数: 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 For i=1 To 500 p=True Ifp(i)Then s=s+1 Else Next p=False Print s End If End Sub End Function 关于上述程序,以下叙述中正确的是(分数:2.00)A.程序功能是统计 1-500 范围内
6、能被 7 整除的整数个数B.Command1 Click 事件过程中 lf 语句的条件表达式不完整C.Function 过程定义有误,函数过程 p 的名称与该过程中的变量名 p 相同D.函数过程 p 的返回值为 Boolean 类型8.设有下面程序代码: 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 Privme Function fun(ch As String,sir As
7、String)As Integer Dim strbufAs String,c As String,n As Integer For k=1 To Len(str) c=Mid$(str,k,1) Ifc0) a=InputBox(“请输入整数“) Print n Mod 10;n=n10 b=InputBox(“请输入整数“) Wend pro a:pro b Print Call pro(a+b) End Sub End Sub 此程序功能是:输入 2 个正整数,反序输出这 2 个数的每一位数字,再反序输出这 2 个数之和的每一位数字。例如:若输入 123 和 234,则应该输出: 3 2
8、 1 4 3 2 7 5 3 但调试时发现只输出了前 2 行(即 2 个数的反序),而未输出第 3 行(即 2 个数之和的反序),程序需要修改。下面的修改方案中正确的是(分数:2.00)A.把过程 pro 的形式参数 n As Integer 改为 ByVal n As IntegerB.把 Call pro(a+b)改为 pro a+bC.把 n=n10 改为 n=n10D.在 pro b 语句之后增加语句 c=a+b,再把 Call pro(a+b)改为 pro c15.有下面程序代码: Private Sub Command1_Click() Private Sub proc(ByVal
9、 a As Integer) Dim x As Integer,s As Integer Static x As Integer x=1 x=x+1:a=a+x For k=1 To 3 End Sub x=x+1:proc x:s=s+x Next k Print s End Sub 程序运行后,单击命令按钮 Command1,输出结果是(分数:2.00)A.6B.9C.15D.1916.编写如下程序: Private Sub Command1_Click()Dim x As Integer x=10 Print funl(x,12)+x End Sub Private Function f
10、un1(m As Integer,n As Integer)As Integer If n10 Then m=n funl=m+n End Function 程序运行后,单击命令按钮 Command1,输出结果为(分数:2.00)A.30B.32C.34D.3617.在窗体上画一个名称为 Command1 的命令按钮,再画两个名称分别为 Label1、Label2 的标签,然后编写如下程序代码: Private X As Integer Private Sub cornmand l Click() Private Sub proc(a As Integer, X=5:Y=3 ByVal b A
11、s Integer) Call proc(X,Y) X=a*a:Y=b+b Label1Caption=X End Sub Label2Caption=Y End Sub 程序运行后,单击命令按钮,则两个标签中显示的内容分别是(分数:2.00)A.25 和 3B.5 和 3C.25 和 6D.5 和 618.设有如下通用过程: Public Function f(x As Integer) Dim y As Integer x=20:y=2:f=x*y End Function 在窗体上画一个命令按钮,其名称为 Command1,然后编写如下事件过程: Private Sub Command1
12、_Click() Static x As Integer x=10:y=5:y=f(x)Print x;y End Sub 程序运行后,如果单击命令按钮,则在窗体上显示的内容是(分数:2.00)A.10 5B.20 40C.20 5D.10 4019.命任何一个滚动条滚动框件过程如下: Private Sub Command1_Click() Private Function fly As Integer) x=10 Print f(x) f=y*y End Sub End Function 运行上述程序,如下叙述中正确的是:(分数:2.00)A.程序运行出错,x 变量的类型与函数参数的类型不
13、符B.在窗体上显示 100C.函数定义错,函数名 f 不能又作为变量名D.在窗体上显示 1020.编写如下程序: 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:b=b+100 End Sub 程序运行后,单击命令按钮Command1,并输入数值 10 和 15,则输出结果为(分数:
14、2.00)A.10 115B.20 115C.35 15D.20 1521.现有程序如下: Option Base1 Private Sub Form Click() Sub f(m As Integer,n As Integer, Dim x(5,6)As Integer,y(5)As Integer a() As Integer,b() As Integer) For i=1 To 5 For i=1 To m For j=1 To 6 b(i)=0 x(i,i)=Int(Rnd*9+1) For j=1 To n Nextj b(i)=b(i)+a(i,j) Next i Next j
15、Call f(5,6,x,y) Next i For i=l To 5 End Sub Print y(i); Next i End Sub 关于上述程序,以下叙述中正确的是(分数:2.00)A.调用过程语句有错,参数不匹配B.程序有错,数组下标越界C.Y 数组中保存的是 x 数组每行数据之和D.x 数组中数据的取值范围是 1-1022.窗体上有一个名称为 Command1 的命令按钮,一个名称为 Text1 的文本框。编写如下程序: Private Sub Command1_Click() Private Function fun(ByRef n As Integer) Dim x As I
16、nteger If n Mod 3=0 Then x=Val(InputBox(“输入数据“) n=n+n Text1=Str(x+fun(x)+fun(x) Else End Sub n=n*n End If fun=n End Function 对于上述程序,以下叙述中错误的是(分数:2.00)A.语句 fun=n 有错,因为 n 是整型,fun 没有定义类型B.运行程序,输入值为 5 时,文本框中显示 655C.运行程序,输入值为 6 时,文本框中显示 42D.ByRef 表示参数按址传递23.窗体上有一个名称为 Command1 的命令按钮,并有如下程序代码: Private Sub
17、Command1_Click() Sub ffByVal x,ByRef y,z) Static a x=x+1:y=y+1:z=z+1 a=1:b=2:c=3 End Sub Call f(a,b,c) Print a;b;c End Sub 运行程序,单击命令按钮,窗体上显示的是(分数:2.00)A.1 3 3B.1 3 4C.2 3 3D.2 3 424.窗体上有一个名称为 Command1 的命令按钮,其单击事件过程如下: Private Sub Command1_Click() Dim x As Integer,y As Integer Static z As Integer x=3
18、:y=5:z=y Call f(x,y,z) Print x;y;z End Sub Private Sub ffByVal a As Integer,ByRef b As Integer,c As Integer) a=a+a:b=b+b:c=c+c End Sub 运行程序,单击命令按钮时,3 个标签中显示的内容分别是(分数:2.00)A.3 5 5B.3 5 10C.3 10 5D.3 10 1025.窗体上有一个名称为 Command1 的命令按钮,其单击事件过程及相关的代码如下: Private Sub Command1_Click() Dim x As Integer,y As I
19、nteger 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,则窗体上显示的是(分数:2.00)A.27B.28C.33D.3826.设有如下程序: Private Sub Inv(ByVal xStr As String,yStr As Str
20、ing) 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 StringS2 As String S1=“abcdef“Inv S1S2 Print S2 End Sub 运行程序,单击窗体,输出结果为(分数:2.00)A.abcdefB.atbecdC.fedcbaD.defabc27.设有如下程序: Private Sub sV(ByVal m
21、As Integer,n As Integer) m=m*2:n=n-5:Print m:n End Sub Private Sub Form Click() Dim xAs Integer,y As Integer x=10:y=15:sV x,y Print x;y End Sub 运行程序,单击窗体,输出结果为(分数:2.00)A.20 10 10 10B.10 15 20 10C.20 15 10 15D.20 10 20 1028.由高中数学可知,对于连续函数 f(x),若 f(x1)与 f(x2)值的符号相反,则在 x1 和 x2 之间必存在x0,使得 f(x0)=0(该点称为“零
22、点”)。设有 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 xl=InputBox(“请输入一个实数 x1“) x2=InputBox(“请再输入一个实数 x2“) if(_)Then Print“在“;x1;“与“;x2;“之间存在零点“ Else Print“不能确定在“;x1;“与“;x2;“
23、之间是否存在零点“ End If End Sub Private Function f(x As Single)As Single End Function 为使上面程序可以实现该功能,程序代码中横线处应填写的代码是(分数:2.00)A.f(x1)0 Or f(x2)029.编写如下程序: Private Sub Command1_Click() Private Function fun 1(ByVal m As Integer, Dim x As Integer,y As Integer n As Integer)As Integer x=10:y=20 m=m*m:n=n+n Call f
24、unl(x,y) End Function Print x;y End Sub 程序运行后,单击命令按钮 Command1,输出结果为(分数:2.00)A.10 25B.10 40C.100 25D.100 4030.设有以下过程: Private Sub proe(x As Integer,Optional Y As Integer) Print x,y End Sub 针对此过程,下面正确的过程调用语句是(分数:2.00)A.Call proc(a!,23)B.Call proc x,12C.proc bD.x=proc(12)31.以下关于过程及过程参数的描述中,错误的是(分数:2.00
25、)A.过程的参数可以是控件名称B.调用过程时使用的实参的个数应与过程形参的个数相同(假定不含可变参数)C.只有函数过程能够将过程中处理的信息返回到调用程序中D.窗体可以作为过程的参数国家二级 VB 机试(过程)模拟试卷 5 答案解析(总分:62.00,做题时间:90 分钟)一、选择题(总题数:31,分数:62.00)1.现有如下程序: Private Sub Command1_Click() Public Function f(x As Integer) s=0 If x=10 Then For j=1 To 5 t=x+1 s=s+f(5+i) Else Next t=x+2 Print s
26、 End If End Sub f=t End Function 运行程序,则窗体上显示的是(分数:2.00)A.38B.49 C.61D.70解析:解析:本题考查的考点是有关函数调用和 If 语句的。要注意在前 4 次循环中每次调用 f 函数时传递的参数分别为 6、7、8、9,都是小于 10 的,最后一次循环传递参数 10,所以最终结果应该为8+9+10+11+11=49。2.假定有以下通用过程: Function Fun(n As Integer)As Integer x=n*n:Fun=x-11 End Function 在窗体上画一个命令按钮,其名称为 Command1,然后编写如下事
27、件过程: Private Sub Command1_Click() Dim i As Integer For i=1 To 2 y=Fun(i)Print y; Next i End Sub 程序运行后,单击命令按钮,在窗体上显示的内容是(分数:2.00)A.1 3B.10 8C.-10 -7 D.0 5解析:解析:本题共调用 Fun 函数 2 次,每次的函数值都是参数的平方减去 11 的值,故此输出-10,-7。3.求 1!+2!+10!的程序如下: Private Function s(x As Integer) Private Sub Command1_Click() f=1 Dim i
28、 As Integer,y As Long For i=1 To x For i=1 To 10 f=f*i ( ) Next Next s=f Print y End Function End Sub 为实现功能要求,程序的括号中应该填入的内容是(分数:2.00)A.Call s(i)B.Call sC.y=y+s(i) D.y=y+s解析:解析:函数过程有一个返回值,一般出现在表达式中组成表达式的一部分。本题的题目要求累加各个数的阶乘,而函数 s 的作用是求参数的阶乘,因此应该在每次循环中累加 f 函数的值,参数为循环变量i。4.在窗体上画一个名称为 Command1 的命令按钮,并编写如
29、下程序: Function Fun(x) Private Sub Command1_Click() y=0 n=InputBox(“请输入一个数“) If xA.10 B.100C.110D.出错信息解析:解析:本题是一个简单的函数调用,在函数中会判断参数 x 的值,根据 x 的值不同执行 If 语句的不同分支。由于实际参数为 100 不满足 x=y For k=1 To 9 x=x-Y Print fun(a(k-1),a(k);“; Loop Next k fun=x End Sub End Function 程序运行时的输出结果是(分数:2.00)A.4 0 1 0 3 0 0 4 0B
30、.0 3 3 5 1 3 5 1 2 C.9 -5 3 -5 7 -2 -4 7 -2D.9 3 3 5 7 3 5 7 2解析:解析:本题中函数 fun 的作用是当第一个形参比第二个形参大或着相等的时候让它减去第二个形参,直到比第二个形参小为止;在按钮的单击事件中循环调用 9 次函数,每次都用数组的前一个元素和后一个元素作为函数的实参,所以应输出的是 12-3-33-3、3、8-5、5、10-3、3、5、9-2、2。6.设有如下函数: Function DelSpace(ch As String)As Integer Dim n,st$,c$ st=“:n=0 For k=1 To Len(
31、ch) c=Mid(ch,k,1) If c0 Then For i=1 To 500 p=True Ifp(i)Then s=s+1 Else Next p=False Print s End If End Sub End Function 关于上述程序,以下叙述中正确的是(分数:2.00)A.程序功能是统计 1-500 范围内能被 7 整除的整数个数B.Command1 Click 事件过程中 lf 语句的条件表达式不完整C.Function 过程定义有误,函数过程 p 的名称与该过程中的变量名 p 相同D.函数过程 p 的返回值为 Boolean 类型 解析:解析:调用 Function
32、 过程要返回一个值,因此可以像内部函数一样在表达式中使用。如果在Function 过程中省略“过程名=表达式”,则该过程返回一个默认值(数值函数过程返回 0 值;字符串函数过程返回空字符串)。因此,通常要在过程体中给“过程名”赋值。本题中函数 p 的返回值为 Boolean类型,功能是判断参数 x 是否能被 7 整除,如果不能整除返回 True,否则返回 False。Command1_Click事件过程中使用了单行的 If 语句,不需要 Else 分支和 Endlf 语句。程序功能是统计 1-500 范围内不能被7 整除的整数个数。8.设有下面程序代码: Private Sub Command
33、1_Click() Dim str As String,ch As String str=“Visual Basic Programming“:ch=“a“ n=fun(ch,str):Print str,n End Sub Privme Function fun(ch As String,sir As String)As Integer Dim strbufAs String,c As String,n As Integer For k=1 To Len(str) c=Mid$(str,k,1) Ifc0) a=InputBox(“请输入整数“) Print n Mod 10;n=n10 b
34、=InputBox(“请输入整数“) Wend pro a:pro b Print Call pro(a+b) End Sub End Sub 此程序功能是:输入 2 个正整数,反序输出这 2 个数的每一位数字,再反序输出这 2 个数之和的每一位数字。例如:若输入 123 和 234,则应该输出: 3 2 1 4 3 2 7 5 3 但调试时发现只输出了前 2 行(即 2 个数的反序),而未输出第 3 行(即 2 个数之和的反序),程序需要修改。下面的修改方案中正确的是(分数:2.00)A.把过程 pro 的形式参数 n As Integer 改为 ByVal n As Integer B.把
35、 Call pro(a+b)改为 pro a+bC.把 n=n10 改为 n=n10D.在 pro b 语句之后增加语句 c=a+b,再把 Call pro(a+b)改为 pro c解析:解析:本题考查的考点是有关过程调用的。本题题干中的程序之所以不能显示第三行的值,是由于在调用 pro 函数时使用的是默认的传地址调用,这时在 pro 过程中的对形参的更改都会影响到实参。仔细观察 pro 过程,发现每次循环都要对形参 n 整除 10 一直到 n 为 0 为止,所以每次 pro 过程调用结束后都会把对应实参改为 0。修改参数传递方式为传值调用即可使程序正确运行。15.有下面程序代码: Priva
36、te Sub Command1_Click() Private Sub proc(ByVal a As Integer) Dim x As Integer,s As Integer Static x As Integer x=1 x=x+1:a=a+x For k=1 To 3 End Sub x=x+1:proc x:s=s+x Next k Print s End Sub 程序运行后,单击命令按钮 Command1,输出结果是(分数:2.00)A.6B.9 C.15D.19解析:解析:本题中首先要区分在命令按钮的单击事件中定义的 x 是局部变量,仅能在过程内部起作用;在子过程 proc 中
37、定义的静态变量 x 也是局部变量,也只能在本过程中起作用。在 VB 的过程调用时,参数有两种传递方式:传址传递和传值传递。如果在过程声明时形参用 ByVal 声明,说明此参数为传值调用;若用 ByRcf 声明,说明此参数为传址调用:没有说明传递类型,则默认为传址传递。即形参的结果会传递给实参。本题中 proc 过程的参数 a 用的是值传递,因此形参的改变不会影响到实参,所以在命令按钮的单击事件中循环累加的是 2+3+4=9。16.编写如下程序: Private Sub Command1_Click()Dim x As Integer x=10 Print funl(x,12)+x End Su
38、b Private Function fun1(m As Integer,n As Integer)As Integer If n10 Then m=n funl=m+n End Function 程序运行后,单击命令按钮 Command1,输出结果为(分数:2.00)A.30B.32C.34D.36 解析:解析:本体是一个简单的函数调用,调用 fun1 函数时将 x 的值作为实参传送给 fun1 函数,由于第二个参数 12 满足 n10,会将形参 m 的值也改变为 12,因返回的函数值为 24;由于函数 fun1 的各个参数为地址传递,因此对于形参 m 的值会影响实参 x 的值,即 x 的值
39、也变为 12。17.在窗体上画一个名称为 Command1 的命令按钮,再画两个名称分别为 Label1、Label2 的标签,然后编写如下程序代码: Private X As Integer Private Sub cornmand l Click() Private Sub proc(a As Integer, X=5:Y=3 ByVal b As Integer) Call proc(X,Y) X=a*a:Y=b+b Label1Caption=X End Sub Label2Caption=Y End Sub 程序运行后,单击命令按钮,则两个标签中显示的内容分别是(分数:2.00)A.
40、25 和 3 B.5 和 3C.25 和 6D.5 和 6解析:解析:本题考查的考点是有关参数传递的。在 VB 的过程调用时,参数有两种传递方式:传址传递和传值传递。如果在过程声明时形参用 ByVal 声明,说明此参数为传值调用;若用 ByRef 声明,说明此参数为传址调用:没有说明传递类型,则默认为传址传递。即形参的结果会传递给实参。由于本题中的实参Y 采用传值传递,实参 X 采用传址传递,而且 X 是全局变量,所以在被调过程中改变了 X 的值而没有改变Y 的值。18.设有如下通用过程: Public Function f(x As Integer) Dim y As Integer x=2
41、0:y=2:f=x*y End Function 在窗体上画一个命令按钮,其名称为 Command1,然后编写如下事件过程: Private Sub Command1_Click() Static x As Integer x=10:y=5:y=f(x)Print x;y End Sub 程序运行后,如果单击命令按钮,则在窗体上显示的内容是(分数:2.00)A.10 5B.20 40 C.20 5D.10 40解析:解析:本题中函数 f 中的形参 x 和按钮的单击事件中的静态变量 x 是不同的变量,相互之间互不影响。函数 f 的参数 x 使用的是地址传递的形式,即形参的变化会影响到实参;在命令
42、按钮的单击事件中调用函数 f,会使得参数 x 的值变成 20,函数返回值为 40。19.命任何一个滚动条滚动框件过程如下: Private Sub Command1_Click() Private Function fly As Integer) x=10 Print f(x) f=y*y End Sub End Function 运行上述程序,如下叙述中正确的是:(分数:2.00)A.程序运行出错,x 变量的类型与函数参数的类型不符 B.在窗体上显示 100C.函数定义错,函数名 f 不能又作为变量名D.在窗体上显示 10解析:解析:在调用子过程或者函数过程时,要求实参与形参必须是匹配的,即
43、个数相同、类型相同、顺序一致。本题中命令按钮的 Click 事件中隐式声明了变量 x,所以 x 是变体型;在调用函数 f 的时候将变体型的 x 作为实参传送,但函数 f 中的形参 y 是整型的,故此产生类型不匹配的情况。20.编写如下程序: 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
44、+b:b=b+100 End Sub 程序运行后,单击命令按钮Command1,并输入数值 10 和 15,则输出结果为(分数:2.00)A.10 115B.20 115C.35 15D.20 15 解析:解析:在 Visual Basic 中调用过程时,参数有两种传递形式:按值传递(ByvaI)和按址传递(Byref),默认为按址传递。其中,当参数按址传递时,如果在引用该参数的过程中改变了形参的值,同时也就改变了传递参数时实参变量的值。本题中 f 的参数 a 是按地址传递的,b 是按值传递的,因此在 f 中对 a 的改变会影响实参 x,对 b 的操作不会影响实参 y。21.现有程序如下: O
45、ption Base1 Private Sub Form Click() Sub f(m As Integer,n As Integer, Dim x(5,6)As Integer,y(5)As Integer a() As Integer,b() As Integer) For i=1 To 5 For i=1 To m For j=1 To 6 b(i)=0 x(i,i)=Int(Rnd*9+1) For j=1 To n Nextj b(i)=b(i)+a(i,j) Next i Next j Call f(5,6,x,y) Next i For i=l To 5 End Sub Pri
46、nt y(i); Next i End Sub 关于上述程序,以下叙述中正确的是(分数:2.00)A.调用过程语句有错,参数不匹配B.程序有错,数组下标越界C.Y 数组中保存的是 x 数组每行数据之和 D.x 数组中数据的取值范围是 1-10解析:解析:本题中子过程 f 的四个形参分别为整型、整型、整型数组和整型数组,在窗体的单击事件中调用过程 f,四个实参和四个形参可以匹配,调用语句没有错误;在二重循环中为二维数组的每个元素赋值,数组下界从 1 开始,因此不会越界;在二重循环中为数组 x 的元素赋值为 09 之间的值;在过程 f中用一个二重循环以此计算 x 数组每行数据之和放在 y 数组中。
47、22.窗体上有一个名称为 Command1 的命令按钮,一个名称为 Text1 的文本框。编写如下程序: Private Sub Command1_Click() Private Function fun(ByRef n As Integer) Dim x As Integer If n Mod 3=0 Then x=Val(InputBox(“输入数据“) n=n+n Text1=Str(x+fun(x)+fun(x) Else End Sub n=n*n End If fun=n End Function 对于上述程序,以下叙述中错误的是(分数:2.00)A.语句 fun=n 有错,因为
48、n 是整型,fun 没有定义类型 B.运行程序,输入值为 5 时,文本框中显示 655C.运行程序,输入值为 6 时,文本框中显示 42D.ByRef 表示参数按址传递解析:解析:本题中的函数 fun 的功能是判断参数是否能被 3 整除,若可以整除则将 n 翻倍,否则将 n 变为 n 的平方返回。在函数头部没有声明函数的返回值类型,默认为变体型,可以接受任何数据类型的赋值:ByRef 表示参数按址传递,对形参的改变将会影响实参;当输入 5 的时候输出 5+25+625=655;当输入 6 的时候输出 6+12+24=42。23.窗体上有一个名称为 Command1 的命令按钮,并有如下程序代码
49、: Private Sub Command1_Click() Sub ffByVal x,ByRef y,z) Static a x=x+1:y=y+1:z=z+1 a=1:b=2:c=3 End Sub Call f(a,b,c) Print a;b;c End Sub 运行程序,单击命令按钮,窗体上显示的是(分数:2.00)A.1 3 3B.1 3 4 C.2 3 3D.2 3 4解析:解析:在 Visual BaSic 中调用过程时,参数有两种传递形式:按值传递(ByVaI)和按址传递(Byref),默认为按址传递。其中,当参数按址传递时,如果在引用该参数的过程中改变了形参的值,同时也就改变了传递参数时实参变量的值。本题中 f 的参数 x 是按值传递的,y 和 z 是按地址传递的,因此在 f 中对 x的改变不会影响实参 a,对 y 和 z 的操作会影响实参 b 和 c。24.窗体上有一个名称为 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) P