第6章 习题
一 填空题
1. 符号常量在某一过程中说明,则该符号常量只能在 有效。
2. 一个VB应用程序可以包括的三种模块是: 、标准模块和类模块。 3. 函数过程定义中至少有一个赋值语句把表达式的值赋给 。
4. 在VB中,过程定义中有两种传递的参数形式:一种是 ;另一种是 。 5. 若模块中以关键字public定义子过程,则在 中都可以调用该过程。
6. 若窗体模块中以关键字private定义函数过程,则该函数过程只能在 中使用。 7. 每一个用户定义的变量、常量、过程都有一个可访问范围,称为变量、常量、过程的 。
8. 在模块内定义的过程,若在关键字sub或Function加前缀Public,则该过程称为 。 9. 过程中定义的静态变量作用域是 ,生存期是 。
10. 在同一模块中定义了同名的全局变量和局部变量,优先级高的是 。
二 选择题
1. 设已定义子过程p,有3个数值型传值参数;设a为实型变量,调用该子过程的正确语句为( )。
(A) p (B) call p 0.5, a, 100 (C) call p ( 0.5, cos(0.1), a+10 ) (D) p ( 0.5, 1.2, 100 )
2. 下列描述中正确的是( )。
(A)Visual Basic只能通过过程调用执行通用过程 (B)可以在Sub过程的代码中包含另一个Sub过程的代码 (C)可以像通用过程一样指定事件过程的名字 (D)Sub过程和Function过程都有返回值
3. 为达到把a、b中的值交换后输出的目的,编程如下:
Private Sub Command1_Click()
a%=10:b%=20
Call swap(a,b):Print a,b End Sub
Private Sub swap(ByVal a As Integer,ByVal b As Integer)
c=a:a=b:b=c End Sub
在运行时发现输出结果错了,需要修改。下面列出的错误原因和修改方案中正确的是( )。
(A)请用swap过程的语句错误,应改为:Call swap a,b (B)输出语句错误,应改为:Print\,\
(C)过程的形式参数有错,应改为:swap(ByRef a As Integer,ByRef b As Integer)
(D)swap 中3条赋值语句的顺序是错误的,应改为a=b:b=c:c=a
4. 以下关于变量作用域的叙述中,正确的是( )。
(A)窗体中凡被声明为Private的变量只能在某个指定的过程中使用 (B)全局变量可被应用程序的任何过程访问 (C)模块级变量只能用Private关键字声明
(D)Static类型变量的作用域是它所在的窗体或模块文件
5. 以下关于函数过程的叙述中,正确的是( )。 (A)函数过程形参的类型与函数返回值的类型没有关系 (B)在函数过程中,过程的返回值可以有多个
(C)当数组作为函数过程的参数时,既能以传值方式传递,也能以传址方式传递 (D)如果不指明函数过程参数的类型,则该参数没有数据类型
n
6. 为计算a的值,某人编写了函数power如下:
Private Function power(a As Integer,n As Integer)As Long Dim p As Long p=a
For k=1 To n p=p*a Next k power=p End Function
在调试时发现是错误的,例如Print power(5,4)的输出应该是625,但实际输出是3125。 程序需要修改。下面的修改方案中有3个是正确的,错误的一个是( )。 (A) 把For k=1 To n改为For k=2 To n (B) 把p=p*a改为p=p^n
(C) 把For k=1 To n改为For k=1 To n-1 (D)把p=a改为p=1
7. 以下关于过程及过程参数的描述中,错误的是( )。 (A)过程的参数可以是控件名称
(B)调用过程时使用的实参的个数应与过程形参的个数相同 (C)只有函数过程能够将过程中处理的信息返回到调用程序中 (D)窗体可以作为过程的参数
8. 以下关于局部变量的叙述中错误的是( )。
(A)在过程中用Dim语句或Static语句声明的变量是局部变量 (B)局部变量的作用域是它所在的过程
(C)在过程中用Static语句声明的变量是静态局部变量
(D)过程执行完毕,该过程中用Dim或Static语句声明的变量即被释放
9. 假定有以下函数过程:
Function Fun(S As String) As String
Dim s1 As String For i=1 To Len(S)
s1=LCase(Mid(S,i,1))+s1 Next i Fun=s1
End Function
在窗体上画一个命令按钮,然后编写如下事件过程: Private Sub Command1_Click()
Dim Str1 As String,Str2 As String Str1=InputBox(\请输入一个字符串\Str2=Fun(Str1) Print Str2 End Sub
程序运行后,单击命令按钮,如果在输入对话框中输入字符串\,则单击\确 定\按钮后在窗体上的输出结果为( )。
(A) ABCDEFG (B)abcdefg (C)GFEDCBA (D) gfedcba
10. 设有以下函数过程
Private Function Fun(a()As Integer,b As String)As Integer ...
End Function 若已有变量声明:
Dim x(5)As Integer,n As Integer,ch As String 则下面正确的过程调用语句是( )。
(A)x(0)=Fun(x,\ (B)n=Fun(n,ch) (C)Call Fun x,\ (D)n=Fun(x(5),ch)
11. 设在名称为Myform的窗体上只有1个名称为C1的命令按钮,下面叙述中正确的是( )。
(A)窗体的Click事件过程的过程名是Myform_Click (B)命令按钮的Click事件过程的过程名是C1_Click
(C)命令按钮的Click事件过程的过程名是Command1_Click (D)上述3种过程名称都是错误的
12.计算n!(0 Private Function fun(n As Integer)As Long Dim p As Long p=1 For k=n-1 To 2 Step-1 p=p*k Next k fun=p End Function 在调试时发现该函数过程产生的结果是错误的,程序需要修改。下面的修改方案中错误 的方案是( )。 (A) 把p=1改为p=n (B) 把For k=n-1 To 2 Step-1改为For k=1 To n-1 (C) 把For k=n-1 To 2 Step-1改为For k=1 To n (D)把For k=n-1 To 2 Step-1改为For k=2 To n 13. 关于变量的作用域,正确的描述是( )。 (A)在模块内定义的变量,其作用域必定为所在模块。 (B)同一模块中不同级的变量不能同名。 (C)一模块中所有在过程之外用Dim定义的变量为全局变量。 (D)不同模块中定义的变量名字可以相同。 14. 在过程的形式参数的前面加上关键字( ),则该参数说明为传址参数。 (A) Val (B) Ref (C)ByRef (D)ByVal 15. 下面的程序执行后,显示的结果是( )。 Private Sub Command1_click() Dim a%, b% a = 8: b = 3 Call test(a, b + 1) Print a; b End Sub Private Sub test(y%, z%) y = 4: z = 9 End Sub (A) 4 3 (B) 8 3 (C)8 8 (D)8 9 16. 有如下过程代码: Sub var_dim() Static numa As Integer Dim numb As Integer numa=numa+2 : numb=numb+1 print numa;mumb End Sub 连续3次调用var_dim过程,第3次调用时的输出是( )。 (A)2 1 (B)2 3 (C)6 1 (D)6 3 17. 在过程体中退出子过程的语句是( )。 (A) Exit Do (B)Exit For (C) Exit Sub (D) Exit Function 18. 窗体上有一个名为Command1的命令按钮,并有如下程序: Private Sub Command1_Click() Dim a As Integer,b As Integer a=8 : b=12 Print Fun(a,b);a;b End Sub Private Function Fun(ByVal a As Integer,b As Integer)As Integer a=a Mod 5 : b=b\\5 Fun=a End Function 程序运行时,单击命令按钮,则输出结果是( )。 (A)3 3 2 (B)3 8 2 (C)8 8 12 (D)3 8 12 19. 在过程中可以用( )语句定义变量。 (A)Dim、Private (B)Dim、Static (C)Dim、Public (D)Dim、Static、Private 20. 以下有关过程的说法中,错误的是( )。 (A)在Sub或Function过程中不能再定义其他Sub或Function过程 (B)在调用过程时,与使用ByRef说明的形参对应的实参只能按地址传递方式结合 (C)过程既可以是Function过程,也可以是Sub过程 (D)在调用过程时,形参为数组的参数对应的实参只能是数组 21. 某人编写了一个能够返回数组a中10个数中最大数的函数过程,代码如下: Function MaxValue(a()As Integer)As Integer Dim max%:max=1 For k=2 To 10 If a(k)>a(max)Then max=k Next k MaxValue=max End Function 程序运行时,发现函数过程的返回值是错的,需要修改,修改方案正确的是( )。 (A)语句max=1应改为 max=a(1) (B)语句For k=2 To 10应改为For k=1 To 10 (C)If 语句中的条件a(k)>a(max)应改为a(k)>max (D)语句MaxValue=max应改为MaxValue=a(max) 22. 在过程的形式参数的前面加上关键字( ),则该参数说明为传值参数。 (A) Val (B) Ref (C)ByRef (D)ByVal 23. 关于过程作用域,错误的描述是( )。 (A)全局级过程的作用域为整个工程。 (B)在某一窗体模块中定义的全局级过程,若被该模块外的模块所调用,必须在该过程名前加上窗体名称。 (C)在不同模块中定义的模块级过程可以同名。 (D)模块级过程与工程级过程不能同名。