【计算机类职业资格】二级VISUAL+BASIC-93 (1)及答案解析.doc

上传人:sofeeling205 文档编号:1327526 上传时间:2019-10-17 格式:DOC 页数:28 大小:98KB
下载 相关 举报
【计算机类职业资格】二级VISUAL+BASIC-93 (1)及答案解析.doc_第1页
第1页 / 共28页
【计算机类职业资格】二级VISUAL+BASIC-93 (1)及答案解析.doc_第2页
第2页 / 共28页
【计算机类职业资格】二级VISUAL+BASIC-93 (1)及答案解析.doc_第3页
第3页 / 共28页
【计算机类职业资格】二级VISUAL+BASIC-93 (1)及答案解析.doc_第4页
第4页 / 共28页
【计算机类职业资格】二级VISUAL+BASIC-93 (1)及答案解析.doc_第5页
第5页 / 共28页
点击查看更多>>
资源描述

1、二级 VISUAL+BASIC-93 (1)及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:42,分数:100.00)1.以下叙述中错误的是(分数:3.00)A.标准模块文件的扩展名是.basB.标准模块文件是纯代码文件C.在标准模块中声明的全局变量可以在整个工程中使用D.在标准模块中不能定义过程2.下面不能在信息框中输出“VB”的是(分数:3.00)A.MsgBox“VB“B.x=MsgBox(“VB“)C.MsgBox(“VB“)D.Call MsgBox“VB“3.以下关于过程的叙述中,错误的是(分数:3.00)A.在 Sub 过程中不能再定义 Sub 过程B.

2、事件过程也是 Sub 过程C.过程调用语句的形参个数必须与实参个数相同D.函数过程一定有返回值4.设子程序过程定义的首部为:Public Sub S(X As Integer, Y As Single)则以下正确的调用形式为(分数:3.00)A.Call S 5, 4.8B.Call Sub(5, 4.8)C.Sub 5, 4.8D.S 5, 4.85.在窗体上画两个标签和一个命令按钮,其名称分别为 Label1、Label2 和 Command1,然后编写如下程序:Private Sub func(LAs Label) L.Caption=“1234“ End Sub Private Sub

3、 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 程序运行后,单击命令按钮,则在两个标签中显示的内容分别为(分数:3.00)A.ABCD 和 10B.1234 和 100C.ABCD 和 100D.1234 和 106.设有如下 Command1 的单击事件过程及 fun 过程: Private Sub Command1_Click()

4、 Dim x As Integer x=Val(InputBox(“请输入一个整数“) fun(x) End Sub Private Sub fun(x As Integer) If x Mod 2=0 Then fun(x/2) Print x; End Sub 执行上述程序,输入 6,结果是(分数:3.00)A.3 6B.6 3C.6D.程序死循环7.编写如下程序: Private Sub Command1_Click() Dim str1 As String, str2 As String str1=InputBox(“输入一个字符串“): subf str1, str2:Print s

5、tr2 End Sub Sub subf(s1 As String, s2 As String) Dim temp As String:Static i As Imeger i=i+1 temp=Mid(s1, i, 1) If temp“Then subf s1.s2 s2=s2 Next i End Sub 程序运行后,单击命令按钮,在窗体上显示的内容是(分数:3.00)A.1 3B.10 8C.-10 -7D.0 514.求 1!+2!+10!的程序如下: Private Function s(x As Integer) f=1 For i=1 To x f=f*i Next s=f E

6、nd Function Private Sub Command1_Click() Dim i As Integer, y As Long For i=1 To 10 _ Next Print y End Sub 为实现功能要求,程序的括号中应该填入的内容是(分数:3.00)A.Call s(i)B.Call sC.y=y+s(i)D.y=y+s15.在窗体上画一个名称为 Command1 的命令按钮,并编写如下程序: Function Fun(x) y=0 If x10 Then y=x Else y=y+10 End If Fun=y End Function Private Sub Com

7、mand1_Click() n=InputBox(“请输入一个数“):n=Val(n) P=Fun(n):Print P End Sub 运行程序,单击命令按钮,将显示输入对话框,如果在对话框中输入 100,并单击“确定”按钮,则输出结果为(分数:3.00)A.10B.100C.110D.出错信息16.设有如下事件过程: Private Sub Command1_Click() Dim a a=Array(12, 3, 8, 5, 10, 3, 5, 9, 2, 4) For k=1 To 9 Print fun(a(k-1), a(k); “; Next k End Sub Private

8、Function fun(x, y) As Integer Do While x=y x=x-y Loop fun=x End Function 程序运行时的输出结果是(分数:3.00)A.4 0 1 0 3 0 0 4 0B.0 3 3 5 1 3 5 1 2C.9 -5 3 -5 7 -2 -4 7 -2D.9 3 3 5 7 3 5 7 217.设有如下函数: 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=

9、st 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 个数之和的反序),程序需要修改。下面的修改方案中正确的是(分数:2.00)A.把过程 pro 的形式参数 n As Integer 改为 ByVal n As IntegerB.把 Call pro(a+b)改为 pro a+bC.把 n=n/10 改为 n=n/10D

10、.在 pro b 语句之后增加语句 c%=a+b,再把 Call pro(a+b)改为 pro c26.有下面程序代码: Private Sub Command1_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) Static x As Integer x=x+1:a=a+x End Sub 程序运行后,单击命令按钮 Command1,输出结果是(分数:2.00)A.6B.9C

11、.15D.1927.编写如下程序: Private Sub Command1_Click() Dim x As Integer x=10 Print fun1(x, 12)+x End Sub Private Function fun 1(m As Integer, n As Integer)As Integer If n10 Then m=n fun1=m+n End Function 程序运行后,单击命令按钮 Command1,输出结果为(分数:2.00)A.30B.32C.34D.3628.在窗体上画一个名称为 Command1 的命令按钮,再画两个名称分别为 Label1、Label2

12、 的标签,然后编写如下程序代码: Private X As Integer Private Sub Command1_Click() X=5:Y=3 Call proc(X, Y) Label1.Caption=X:Label2.Caption=Y End Sub Private Sub proc(a As Integer, ByVal b As Integer) X=a*a:Y=b+b End Sub 程序运行后,单击命令按钮,则两个标签中显示的内容分别是(分数:2.00)A.25 和 3B.5 和 3C.25 和 6D.5 和 629.设有如下通用过程: Public Function f

13、(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=f(x)Print x; y End Sub 程序运行后,如果单击命令按钮,则在窗体上显示的内容是(分数:2.00)A.10 5B.20 40C.20 5D.10 4030.命任何一个滚动条滚动框件过程如下: Private Sub Command1_Click() x=10 Pri

14、nt f(x) End Sub Private Function f(y As Integer) f=y*y End Function 运行上述程序,如下叙述中正确的是:(分数:2.00)A.程序运行出错,x 变量的类型与函数参数的类型不符B.在窗体上显示 100C.函数定义错,函数名 f 不能又作为变量名D.在窗体上显示 1031.编写如下程序: Private Sub Command1_Click() Dim x As Integer, y As Integer x=InputBox(“输入第一个数“):y=InputBox(“输入第二个数“) Call f(x, y) Print x,

15、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,则输出结果为(分数:2.00)A.10 115B.20 115C.35 15D.20 1532.现有程序如下: Option Base 1 Private Sub Form_Click() Dim x(5, 6) As Integer, y(5)As Integer For j=1 To 5 For i=1 To 6 x(i, j)=Int(Rnd*9+1) Next

16、j 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(i, j) Next j Next i End Sub 关于上述程序,以下叙述中正确的是(分数:2.00)A.调用过程语句有错,参数不匹配B.程序有错,数组下标越界C.y 数组中保存的是 x 数组每行数据之和D.x 数组中数据的取值范围是 1

17、-1033.窗体上有一个名称为 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) If n Mod 3=0 Then n=n+n Else n=n*n End If fun=n End Function 对于上述程序,以下叙述中错误的是(分数:2.00)A.语句 fun=12 有错

18、,因为 n 是整型,fun 没有定义类型B.运行程序,输入值为 5 时,文本框中显示 655C.运行程序,输入值为 6 时,文本框中显示 42D.ByRef 表示参数按址传递34.窗体上有一个名称为 Command1 的命令按钮,并有如下程序代码: Private Sub Command1_Click() Static a a=1:b=2:c=3 Call f(a, b, c) Print a; b; c End Sub Subf(ByVal x, ByRefy, z) x=x+1:y=y+1:z=z+1 End Sub 运行程序,单击命令按钮,窗体上显示的是(分数:2.00)A.1 3 3B

19、.1 3 4C.2 3 3D.2 3 435.窗体上有一个名称为 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, ByRef b As Integer, c As Integer) a=a+a:b=b+b:c=c+c End Sub 运行程序,单击命令按钮时,3 个标

20、签中显示的内容分别是(分数:2.00)A.3 5 5B.3 5 10C.3 10 5D.3 10 1036.窗体上有一个名称为 Command1 的命令按钮,其单击事件过程及相关的代码如下: Private Sub Command1_Click() Dim x As Integer, y As Integer 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

21、:n=n+n:fun=m+n End Function 运行程序,单击命令按钮时,出现输入对话框,分别输入 3、5,则窗体上显示的是(分数:2.00)A.27B.28C.33D.3837.设有如下程序: 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

22、 S1 As String, S2 As String S1=“abcdef“ Inv S1, S2 Print S2 End Sub 运行程序,单击窗体,输出结果为(分数:2.00)A.abcdefB.afbecdC.fedcbaD.defabc38.设有如下程序: Private 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 E

23、nd Sub 运行程序,单击窗体,输出结果为(分数:2.00)A.20 10 10 10B.10 15 20 10C.20 15 10 15D.20 10 20 1039.由高中数学可知,对于连续函数 f(x),若 f(x1)与 f(x2)值的符号相反,则在 x1 和 x2 之间必存在x0,使得 f(x0)=0(该点称为“零点”)。设有 VB 函数:Private Function f(x As Single)As Single 可以返回 f(x)的值(函数体没有给出)。下面程序的功能是从键盘输入 2 个实数 x1、x2,判断在 x1、x2 之间是否存在零点。 Private Sub Comm

24、and1_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 为使上面程序可以实现该功能,程序代码中横线处应填写的代码是(分数:2.00)A.f(x1)0 Or

25、 f(x2)0B.f(x1)0 And f(x2)0C.f(x1)*f(x2)0D.f(x1)*f(x2)040.编写如下程序: Private Sub Command1_Click() Dim x As Integer, y As Integer x=10:y=20 Call fun1(x, y) Print x; y End Sub Private Function fun1(ByVal m As Integer, n As Integer)As Integer m=m*m:n=n+n End Function 程序运行后,单击命令按钮 Command1,输出结果为(分数:2.00)A.1

26、0 25B.10 40C.100 25D.100 4041.设有以下过程: Private Sub proc(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 b%D.x=proc(12)42.以下关于过程及过程参数的描述中,错误的是(分数:2.00)A.过程的参数可以是控件名称B.调用过程时使用的实参的个数应与过程形参的个数相同(假定不含可变参数)C.只有函数过程能够将过程中处理的信息返回到

27、调用程序中D.窗体可以作为过程的参数二级 VISUAL+BASIC-93 (1)答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:42,分数:100.00)1.以下叙述中错误的是(分数:3.00)A.标准模块文件的扩展名是.basB.标准模块文件是纯代码文件C.在标准模块中声明的全局变量可以在整个工程中使用D.在标准模块中不能定义过程 解析:解析 本题考查的考点是有关标准模块的。Visual Basic 中的标准模块也称全局模块或总模块,由全局变量声明、模块层声明及通用过程等几部分组成,其扩展名为.bas,里面只有代码而没有任何控件。其中全局声明放在标准模块的首部,可以在

28、整个工程中使用。2.下面不能在信息框中输出“VB”的是(分数:3.00)A.MsgBox“VB“B.x=MsgBox(“VB“)C.MsgBox(“VB“)D.Call MsgBox“VB“ 解析:解析 MsgBox()函数用于显示提示信息,并可返回一个代表用户单击了哪个按钮的 Integer 类型值,当其作为函数使用时必须将参数放在括号内部,而返回值可以赋值给一个变量,也可以单独使用此函数而不将其返回值赋值给变量;MsgBox 过程也用于显示提示信息,作为过程可以独立使用,也可以使用Call 关键字来进行调用,但此时参数需要加括号。3.以下关于过程的叙述中,错误的是(分数:3.00)A.在

29、Sub 过程中不能再定义 Sub 过程B.事件过程也是 Sub 过程C.过程调用语句的形参个数必须与实参个数相同 D.函数过程一定有返回值解析:解析 Sub 过程分为事件过程和通用过程,过程不允许嵌套定义,即在 Sub 过程中再定义 Sub 过程;函数过程必须有一个返回值,当过程的声明语句中使用了可选参数的时候,允许实参个数与形参不同。4.设子程序过程定义的首部为:Public Sub S(X As Integer, Y As Single)则以下正确的调用形式为(分数:3.00)A.Call S 5, 4.8B.Call Sub(5, 4.8)C.Sub 5, 4.8D.S 5, 4.8 解

30、析:解析 子过程可以独立使用,也可以使用 Call 关键字来进行调用,但此时参数需要加括号。本题中子程序的名字是 S,故此 B、C 选项可以排除,A 选项中缺少参数的括号。5.在窗体上画两个标签和一个命令按钮,其名称分别为 Label1、Label2 和 Command1,然后编写如下程序:Private Sub func(LAs Label) L.Caption=“1234“ End Sub Private Sub Form_Load() Label1.Caption=“ABCDE“ Label2.Caption=10 End Sub Private Sub Command1_Click()

31、 a=Val(Label2.Caption) Call func(Label1) Label2.Caption=a End Sub 程序运行后,单击命令按钮,则在两个标签中显示的内容分别为(分数:3.00)A.ABCD 和 10B.1234 和 100C.ABCD 和 100D.1234 和 10 解析:解析 本题考查的考点是有关过程调用的。窗体加载时首先执行了 Load 事件里面的代码,设置Label1 的标题为“ABCDE”,Label2 的标题为“10”;当单击命令按钮时,调用了 func 过程,在这个过程中把传入的 Label1 的标题设置为“1234”,Label2 的标题没有发生变

32、化。6.设有如下 Command1 的单击事件过程及 fun 过程: Private Sub Command1_Click() Dim x As Integer x=Val(InputBox(“请输入一个整数“) fun(x) End Sub Private Sub fun(x As Integer) If x Mod 2=0 Then fun(x/2) Print x; End Sub 执行上述程序,输入 6,结果是(分数:3.00)A.3 6 B.6 3C.6D.程序死循环解析:解析 本题中的 fun 过程是一个递归调用,如果参数 x 为偶数则进入递归;本题中的实参 6 传入fun 过程之

33、后,因其是偶数,所以执行 fun(6/2),也就是先输出 3,然后返回到 fun 中输出 6。7.编写如下程序: Private Sub Command1_Click() Dim str1 As String, str2 As String str1=InputBox(“输入一个字符串“): subf str1, str2:Print str2 End Sub Sub subf(s1 As String, s2 As String) Dim temp As String:Static i As Imeger i=i+1 temp=Mid(s1, i, 1) If temp“Then subf

34、s1.s2 s2=s2 Next i End Sub 程序运行后,单击命令按钮,在窗体上显示的内容是(分数:3.00)A.1 3B.10 8C.-10 -7 D.0 5解析:解析 本题共调用 Fun 函数 2 次,每次的函数值都是参数的平方减去 11 的值,故此输出-10,-7。14.求 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

35、i=1 To 10 _ Next Print y End Sub 为实现功能要求,程序的括号中应该填入的内容是(分数:3.00)A.Call s(i)B.Call sC.y=y+s(i) D.y=y+s解析:解析 函数过程有一个返回值,一般出现在表达式中组成表达式的一部分。本题的题目要求累加各个数的阶乘,而函数 s 的作用是求参数的阶乘,因此应该在每次循环中累加 f 函数的值,参数为循环变量 i。15.在窗体上画一个名称为 Command1 的命令按钮,并编写如下程序: Function Fun(x) y=0 If x10 Then y=x Else y=y+10 End If Fun=y E

36、nd Function Private Sub Command1_Click() n=InputBox(“请输入一个数“):n=Val(n) P=Fun(n):Print P End Sub 运行程序,单击命令按钮,将显示输入对话框,如果在对话框中输入 100,并单击“确定”按钮,则输出结果为(分数:3.00)A.10 B.100C.110D.出错信息解析:解析 本题是一个简单的函数调用,在函数中会判断参数 x 的值,根据 x 的值不同执行 If 语句的不同分支。由于实际参数为 100 不满足 x10,因此函数返回值为 10。16.设有如下事件过程: Private Sub Command1_

37、Click() Dim a a=Array(12, 3, 8, 5, 10, 3, 5, 9, 2, 4) For k=1 To 9 Print fun(a(k-1), a(k); “; Next k End Sub Private Function fun(x, y) As Integer Do While x=y x=x-y Loop fun=x End Function 程序运行时的输出结果是(分数:3.00)A.4 0 1 0 3 0 0 4 0B.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解析:解析 本题

38、中函数 fun 的作用是当第一个形参比第二个形参大或着相等的时候让它减去第二个形参,直到比第二个形参小为止;在按钮的单击事件中循环调用 9 次函数,每次都用数组的前一个元素和后一个元素作为函数的实参,所以应输出的是 12-3-3-3-3、3、8-5、5、10-3、3、5、9-2、2。17.设有如下函数: 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=st n=n/10 Wend Print End Sub 此程序

39、功能是:输入 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.把 Call pro(a+b)改为 pro a+bC.把 n=n/10 改为 n=n/10D.在 pro b 语句之后增加语句 c%=a+b,再把 Cal

40、l pro(a+b)改为 pro c解析:解析 本题考查的考点是有关过程调用的。本题题干中的程序之所以不能显示第三行的值,是由于在调用 pro 函数时使用的是默认的传地址调用,这时在 pro 过程中的对形参的更改都会影响到实参。仔细观察 pro 过程,发现每次循环都要对形参 n 整除 10 一直到 n 为 0 为止,所以每次 pro 过程调用结束后都会把对应实参改为 0。修改参数传递方式为传值调用即可使程序正确运行。26.有下面程序代码: Private Sub Command1_Click() Dim x As Integer, s As Integer x=1 For k=1 To 3 x

41、=x+1:proc x:s=s+x Next k Print s End Sub Private Sub proc(ByVal a As Integer) Static x As Integer x=x+1:a=a+x End Sub 程序运行后,单击命令按钮 Command1,输出结果是(分数:2.00)A.6B.9 C.15D.19解析:解析 本题中首先要区分在命令按钮的单击事件中定义的 x 是局部变量,仅能在过程内部起作用;在子过程 proc 中定义的静态变量 x 也是局部变量,也只能在本过程中起作用。在 VB 的过程调用时,参数有两种传递方式:传址传递和传值传递。如果在过程声明时形参用

42、 ByVal 声明,说明此参数为传值调用;若用 ByRef 声明,说明此参数为传址调用;没有说明传递类型,则默认为传址传递。即形参的结果会传递给实参。本题中 proc 过程的参数 a 用的是值传递,因此形参的改变不会影响到实参,所以在命令按钮的单击事件中循环累加的是 2+3+4=9。27.编写如下程序: Private Sub Command1_Click() Dim x As Integer x=10 Print fun1(x, 12)+x End Sub Private Function fun 1(m As Integer, n As Integer)As Integer If n10

43、Then m=n fun1=m+n End Function 程序运行后,单击命令按钮 Command1,输出结果为(分数:2.00)A.30B.32C.34D.36 解析:解析 本体是一个简单的函数调用,调用 fun1 函数时将 x 的值作为实参传送给 fun1 函数,由于第二个参数 12 满足 n10,会将形参 m 的值也改变为 12,因返回的函数值为 24:由于函数 fun1 的各个参数为地址传递,因此对于形参 m 的值会影响实参 x 的值,即 x 的值也变为 12。28.在窗体上画一个名称为 Command1 的命令按钮,再画两个名称分别为 Label1、Label2 的标签,然后编写

44、如下程序代码: Private X As Integer Private Sub Command1_Click() X=5:Y=3 Call proc(X, Y) Label1.Caption=X:Label2.Caption=Y End Sub Private Sub proc(a As Integer, ByVal b As Integer) X=a*a:Y=b+b End Sub 程序运行后,单击命令按钮,则两个标签中显示的内容分别是(分数:2.00)A.25 和 3 B.5 和 3C.25 和 6D.5 和 6解析:解析 本题考查的考点是有关参数传递的。在 VB 的过程调用时,参数有两

45、种传递方式:传址传递和传值传递。如果在过程声明时形参用 ByVal 声明,说明此参数为传值调用;若用 ByRef 声明,说明此参数为传址调用;没有说明传递类型,则默认为传址传递。即形参的结果会传递给实参。由于本题中的实参Y 采用传值传递,实参 X 采用传址传递,而且 X 是全局变量,所以在被调过程中改变了 X 的值而没有改变Y 的值。29.设有如下通用过程: Public Function f(x As Integer) Dim y As Integer x=20:y=2:f=x*y End Function 在窗体上画一个命令按钮,其名称为 Command1,然后编写如下事件过程: Priv

46、ate 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 使用的是地址传递的形式,即形参的变化会影响到实参;在命令按钮的单击事件中调用函数 f,会使得参数 x 的值变成 20,函数返回值为 40。30.命任何一个滚动条滚动框件过程如下: Priv

47、ate Sub Command1_Click() x=10 Print f(x) End Sub Private Function f(y As Integer) f=y*y End Function 运行上述程序,如下叙述中正确的是:(分数:2.00)A.程序运行出错,x 变量的类型与函数参数的类型不符 B.在窗体上显示 100C.函数定义错,函数名 f 不能又作为变量名D.在窗体上显示 10解析:解析 在调用子过程或者函数过程时,要求实参与形参必须是匹配的,即个数相同、类型相同、顺序一致。本题中命令按钮的 Click 事件中隐式声明了变量 x,所以 x 是变体型;在调用函数 f 的时候将变

48、体型的 x 作为实参传送,但函数 f 中的形参 y 是整型的,故此产生类型不匹配的情况。31.编写如下程序: 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,则输出结果为(

49、分数:2.00)A.10 115B.20 115C.35 15D.20 15 解析:解析 在 Visual Basic 中调用过程时,参数有两种传递形式:按值传递(Byval)和按址传递(Byref),默认为按址传递。其中,当参数按址传递时,如果在引用该参数的过程中改变了形参的值,同时也就改变了传递参数时实参变量的值。本题中 f 的参数 a 是按地址传递的,b 是按值传递的,因此在 f中对 a 的改变会影响实参 x,对 b 的操作不会影响实参 y。32.现有程序如下: Option Base 1 Private Sub Form_Click() Dim x(5, 6) As Integer, y(5)As Integer For j=1 To 5 For i=1 To 6 x(i, j)=Int(Rnd*9+1) Next j 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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试资料 > 职业资格

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1