文档库

最新最全的文档下载
当前位置:文档库 > VB上机作业4

VB上机作业4

选择题

(自测练习,提供参考答案及解答)

1. (自测练习,提供参考答案及解答)下列关于函数的说法正确的是()

A、函数名在过程中只能被赋值一次

B、如果在函数体内没有给函数名赋值,则该函数无返回值

C、如果在定义函数时没有说明函数的类型,则该函数是无类型的

D、利用Exit Function语句可以强制退出函数

解答:本题考察函数的概念及特点。选项A错误,函数名在过程中可以被赋值多次。选项B错误,如果在函数体内没有给函数名赋值,则数值函数返回0,字符函数返回一个空串。选项C错误,如果在定义函数时没有说明函数的类型,则该函数是变体类型。选项D正确,Exit Function语句可以强制退出函数。本题正确答案为 D。

2. (自测练习,提供参考答案及解答)在参数传递过程中,使用关键字来修饰参数,可以使之按值传递,此关键字是()。

A ByVal

B ByRef

C Value

D Reference

解答:在参数传递过程中,若在形参前面加上关键字Byval,则表示此形参与实参结合方式为传值。本题正确答案为 A。

3. (自测练习,提供参考答案及解答)如果在定义Sub过程时没有使用Private、Public 和Static关键字,则所定义的过程是()

A公有的 B 私有的 C 静态的 D 可能是公有的,也可能是私有的

解答:本题考察Sub过程的有效范围。一个过程有其作用域,不同的过程作用域不同。全局过程可以在程序的任何地方被调用,而局部过程只能在该过程所在的模块内被调用。Public关键字定义全局过程:Private关键字定义局部过程:Static关键字用于指定局部变量在内存中的存储方式。在定义过程时,如果缺省说明过程有效范围的关键字,则该过程为全局过程,即该过程是公有的。本题正确答案为 A。

4. (自测练习,提供参考答案及解答) Sub过程与Function过程最根本的区别是()

A Sub过程可以使用Call语句或直接使用过程名调用,而Function过程不可以

B Function过程可以有参数,Sub过程不可以

C Sub过程不能返回值,而Function过程能返回值

D 两种过程参数的传递方式不同

解答:在Visual Basic中有两类过程,一类是系统提供的内部函数过程和事件过程;另一类是用户根据自己需要定义,供事件过程多次调用的过程,而第二类过程中,我们现在涉及最多的是子过程,即Sub过程。它们的共同点都是完成某种特定功能的一组程序代码,不同的是函数过程(Function)是带有返回值的特殊过程,所以函数过程定义时有返回值的类型说明。本题正确答案为 C。

5. (自测练习,提供参考答案及解答)单击窗体时,下列程序代码的执行结果为()。

Private Sub Form_Click( )

Text 2

End Sub

Private Sub Text( x As Integer )

x = x * 2 + 1

If x < 6 Then

Call Text( x )

End If

x = x * 2 + 1

Print x;

End Sub

A 23 47

B 11 35

C 22 45

D 24 51

解答:本题在函数调用过程中采用了简单递归的方式,具体流程如下:主调过程调用Text过程,把实参2传递给Text过程中的形参x,由x = x * 2 + 1语句推出x = 5,此时满足Text过程体中判断语句的判断条件,执行Call Text( x )语句,第二次调用Text过程。由x = x * 2 + 1语句得到x值为11,判断条件11 < 6为假,故返回此调用过程,执行x = x * 2 + 1,得x = 23并输出,结束此次调用过程。由于两次调用Text过程,第二次仍返回调用时的断点语句,即执行x = x * 2 + 1,Print x输出x 的值为47,返回到主调过程,结束程序,两次输出为23, 47。本题正确答案为 A 。

6. (自测练习,提供参考答案及解答)编写如下通用过程:

Sub Proc(x As Single, y As Single)

t=x

x=t/y

y=t Mod y

End Sub

在窗体上画一个命令按钮,然后编写如下事件过程:

Private Sub Command I_Click()

Dim a As Single

Dim b As Single

a=5

b=4

Proc a, b

Print a, b

End Sub

程序运行后,如果单击命令按钮,则输出结果为

A. 5 4

B. 1.25 1

C.4 5

D.1.25 5

解答:该例中的Proc过程有两个参数,均为单精度类型;由于没有ByVal关键字,参数使用的是引用(即传地址)方式。也就是说,实参a, b与形参x, y使用的是相同的地址。因此,由过程Proc计算出来的x, y的值实际上与实参a, b的值相同。在事件过程中,执行Proc a, b语句后,就把a(值为5), b(值为4)的值分别传送给过程Proc中的x, y,使得x=5, y=4.

在过程中,首先把x的值赋给t,即t的值为5,然后执行:x=t/y=5/4=1.25, y=t mod y=5 Mod 4=1。本题正确答案为B

7. (自测练习,提供参考答案及解答)阅读程序:

Function func(n As Integer) As Integer

Sum=0

For i=1 To n

Sum=Sum+(i+1)*i

Next i

func=Sum

End Function

Private Sub Command I_Click()

Dim a As Integer

a=5

s=func(a)

Print s

End Sub

程序运行后,单击命令按钮,输出结果为____

A.80

B.60

C.70

D.15

[分析]该例调用一个Function过程Func,该过程只有一个参数,类型为整型,返回值也为整型。过程的调用十分简单,关键是要搞清楚过程func的功能。从循环

For i=1 To n

Sum=Sum+(i+1)*i

Next i

可以看出,该过程的功能是计算1*2+2*3+3*4+---+(n+l)*n。在调用过程时,实参a的值为5,即上式中的n=5。因此返回的值为:1*2+2*3+3*4+4*5+5*6=70。本题正确答案为C。

二、填空题

1. (自测练习,提供参考答案及解答)调用Sub过程的方式有两种:__________和

__________ 。

解答:调用过程引起过程的执行,即要执行一个过程,必须调用该过程。在Visual Basic 中, Sub过程的调用方式有两种:一种是把过程名作为一个语句来使用;另一种是把过程名放在一个Call语句中。假设有一个过程名为MySub,其参数为a和b,则第一种调用方式为:

Call MySub (a, b)第二种调用方式为:MySub a, b 。

答案为:把过程名作为一个语句来使用,用Call语句调用Sub过程。

2. (自测练习,提供参考答案及解答)在Visual Basic中,当用数组作为过程的参数时,使用的传值方式是__________ 。

解答:本题考察数组参数传送的特点。

当用数组作为过程的参数,Visual Basic把实际参数的起始地址传给过程,而不是把数组中的各个元素一一传送给过程。本题正确答案为:传地址。

3. (自测练习,提供参考答案及解答)如果两个或两个以上的标准模块中含有相同的过程名,则在调用时必须在过程名前加上_____________。

答案:模块名;解答:略

4. (自测练习,提供参考答案及解答)有一个如下的函数:

Function f (n As Integer)

f = 100

If n Mod 2 = 0 Then

Exit Function

End If

f = 200

End Function

当用语句x = f (100)调用后,x的值为__________。

解答:本题考察函数的使用。由于100是偶数,所以在语句“f = 200”之前,函数将退出,返回值是100。本题正确答案为 100。

5.(自测练习,提供参考答案及解答)在通用声明中定义a,再在窗体中添加一个命令按钮,编写如下程序代码。

Dim a

Sub test()

a = a + 1

b = b + 1

c = c + 1

Print "Sub:"; a; b; c

End Sub

Private Sub command1_Click()

a = 2:

b = 3:

c = 4

Call test

Print "Main:"; a; b; c

Call test

Print "Main:"; a; b; c

End Sub

程序运行后,窗体中显示四行分别是:

答案:

Sub:3 1 1

Main:3 3 4

Sub:4 1 1

Main:4 3 4

解析:

在通用声明中定义a,即a为全局变量,在模块级代码和过程中a代表同一个变量;而变量b和c未做任何声明,它们是局部变量,在模块级代码和过程中,b和c各代表不同的变量,在调用过程中,变量的值也不保留,每次调用均取初值0。

编程题

1. (提交练习,无参考答案及解答)编写程序,利用Function过程计算下式的值: y = (1+2+3+…+m)+(1+2+3+…+n) / (1+2+3+…+p) 。m、n、p的值由Inputbox函数输入。求和操作写成过程。(自行设计界面,提交窗体文件,保存名为f5)

【参考答案】

程序代码设计:

Private Sub Form_Click()

m = Val(InputBox("输入m:"))

n = Val(InputBox("输入n:"))

p = Val(InputBox("输入p:"))

y = (sum(m) + sum(n)) / sum(p)

Print "sum="; y

End Sub

Private Function sum(n as Integer)

s = 0

For i = 1 To n

s = s + i

Next i

sum = s

End Function

分析:sum函数有一个形参n,利用函数可以求出1—n的和,返回主调过程。

2. (提交练习,无参考答案及解答)编写程序,利用Sub过程计算下式的值: s=a!+b!+c! 。a,b,c的值由键盘输入(自行设计界面,提交窗体文件,保存名为f6)

【参考答案】

Private Sub Form_Click()

Dim s As Integer, n As Integer

For i = 1 To 3

n = InputBox("n=")

Call fact(n, f)

s = s + f

Next i

Print "s="; s

End Sub

Private Sub fact(n, f)

f = 1

For i = 1 To n

f = f * i

Next i

End Sub

分析:fact过程有两个参数n接收要求阶乘的数,结果存放在f中,传递给Form_Click事件过程中的实参f 。然后加入和s中。

3. (提交练习,无参考答案及解答)编写两个Function过程,分别计算40,16,34,26,52的最大公约数和最小公倍数。(自行设计界面,提交窗体文件,保存名为f7)

【参考答案】

Private Sub Form_Click()

Dim a(1 To 5) As Integer

a(1) = 40: a(2) = 16: a(3) = 34: a(4) = 26:a(5) = 52

a1 = a(1)

a2 = a(2)

b = gcd(a1, a2)

d = b

c = a(1) * a(2) / b

For i = 3 To 5

a1 = c

a2 = a(i)

b = gcd(a1, a2)

c = c * a(i) / b

Next i

Print "最小公倍数为:"; c

For i = 3 To 5

d = gcd(d, a(i))

Next i

Print "最大公约数为:"; d

End Sub

Private Function gcd(x, y)

If x < y Then

t = x

x = y

y = t

End If

r = x Mod y

Do While r < > 0

x = y

y = r

r = x Mod y

Loop

gcd = y

End Function

分析:求多个数的最大公约数可以先求其中两个数的最大公约数,然后再求这个数和下一个数的最大公约数,直到求完。最小公倍数的求法类似。

4. (提交练习,无参考答案及解答)用随机数函数Rnd生成一个8行8列的数组(各元素值在100以内),然后找出某个指定行内值最大的元素所在的列号。要求:查找指定行内值最大的元素所在列号的操作,通过一个过程来实现。指定的行用InputBox函数输入。(自行设计界面,提交窗体文件,保存名为f8)

解答:

Function Max(b() As Integer, row As Integer)

m=b(row, 1)

col=1

For i=2 To UBound(b, 2)

If b(row, i)>m Then

Let m=b(row, i)

col=i

End If

Next i

Max=col

End Function

Private Sub Form_Click()

Randomize

Dim A(1 To 8, 1 To 8) As Integer

Dim row As Integer

For i=1 To 8

For j=1 To 8

A(i, j)=Int(Rnd*100)

Next j

Next i

Print “所生成的数组为:”

For i=1 To 8

For j=1 To 8

Print A(i,j);

Next j

Print

Next i

Do

row = InputBox("请输入指定的行号:”)

Loop Until row>=1 And row<=8

col=Max(A(), row)

Print

Print”第”;row;”行中最大元素所在列号为:"; col

End Sub

【分析】求某一指定行中值最大的元素所在列号的过程为Max过程:该过程有两个参数,其中第一个参数是数组,第二个参数是数组中指定行的行号。在这个过程中,首先把指定行的第一列的值赋给一个变量,其列号为1,然后把该值与其后各列的值进行比较,如果比该值大,则用较大的值取代,同时记下其列号。窗体的Click事件过程首先用随机数函数Rnd 生成一个8行8列的数组,然后要求输入一个行号,程序将输出该行中最大值所在的列号。程序运行后,单击窗体,在输入对话框中输入一个行号,程序将输出该行中值最大的元素所在的列号。