1、1实 验 报 告 四课 程 VB 程序设计 实验项目 VB 过程与函数设计(6 学时) 成 绩专业班级 石油工程 2017姓 名 万佳宁 学 号 201731011301 实验日期 6.6实验目的(1)掌握 Function 过程和 Sub 过程的定义与调用(2)理解参数按址传递和按值传递的本质(3)理解变量和过程的作用域(4)能熟练运用 Function 过程和 Sub 过程解决实际问题、简化程序实验内容【实验 1】 编写 Function 函数程序 实现计算 n!。程序界面如下图所示。 (5 分)掌握函数过程的定义及使用实验结果:【实验 1 代码】Private Sub Command1_
2、Click()n = Val(Text1.Text)Text2.Text = jiecheng(n)End SubPrivate Function jiecheng(a)t = 1For i = 1 To at = t * iNext i2jiecheng = tEnd FunctionPrivate Sub Command2_Click()EndEnd Sub【实验 1 典型结果】【实验 2】 编写 Sub 子函数过程实现计算 n!。程序界面同上题。 (5 分)掌握 Sub 子过程的定义及使用实验结果:【实验 2 代码】Private Sub Command1_Click()3n = Val
3、(Text1.Text)Call jiecheng(n, t)Text2.Text = tEnd SubSub jiecheng(a, t)t = 1For j = 1 To at = t * jNext jEnd SubPrivate Sub Command2_Click()EndEnd Sub【实验 2 典型结果】4【实验 3】 编写计算 n! 的函数过程,调用该过程,计算 1!+2!+3!+10!之和(5分)掌握使用 Function 过程简化多重循环的方法,即把具有单一功能的内循环放到函数内部函数的作用是简化程序,不要把双重循环都放到函数内,无法达到简化程序的目的实验结果:【实验 3
4、代码】Private Sub Form_Click()n = Val(InputBox(1)For j = 1 To nb = b + jiecheng(j)5Next jPrint bEnd SubFunction jiecheng(a)t = 1For i = 1 To at = t * iNext ijiecheng = tEnd Function【实验 3 典型结果】【实验 4】 编写计算 n! 的子过程,调用该过程,计算 1!+2!+3!+10!之和(5 分)掌握使用 Sub 过程简化多重循环的方法,即把具有单一功能的内循环放到函数内部6函数的作用是简化程序,不要把双重循环都放到函数
5、内,无法达到简化程序的目的实验结果:【实验 4 代码】Private Sub Form_Click()n = Val(InputBox(1)For i = 1 To nCall jiecheng(i, b)c = c + bNext iPrint cEnd SubSub jiecheng(a, b)t = 1For j = 1 To at = t * jNext jb = tEnd Sub【实验 4 典型结果】7【实验 5】 编写计算 xn/n! 的函数过程,调用该过程,计算 ex的近似值(10 分)ex=1+x/1! +x2/2!+x3/3!+ +xn/n!要求:1)x 的值用 InputB
6、ox 函数输入2)要求精度:x n/n! n - 1 Thenflag = 1Elseflag = 0End Ifsushu = flagEnd Function【实验 6 典型结果】11【实验 7】 编写程序验证 100 以内数的哥德巴赫猜想(任意一个大于 6 的偶数可以表示成两个素数之和) ,要求素数判断用函数过程实现。 (10 分)掌握使用函数过程简化多重循环的方法实验结果:【实验 7 代码】Private Sub Command1_Click()List2.ClearList1.Clearn = Val(Text1)For i = 2 To n - 2If sushu(i) = 1 A
7、nd sushu(n - i) = 1 ThenList1.AddItem iList2.AddItem n - iEnd IfNext iEnd SubFunction sushu(a)For j = 2 To a - 1If a Mod j = 0 Then Exit ForNext jIf j a - 1 Thensushu = 1Elsesushu = 0End IfEnd Function【实验 7 典型结果】12【实验 8】 编写一个通用的 Function 函数过程,求出数组中的最大值。已知数组中的数据为(101,52,38 ,96 ,182,100 ,25,78,66,89)
8、,程序界面设计如下图所示。 (10 分)掌握 Function 过程中数组作为参数传递的方法实验结果:【实验 8 代码】Private Sub Command1_Click()Dim num()num = Array(101, 52, 38, 96, 182, 100, 25, 78, 66, 89)13Text1 = max(num()End SubFunction max(num()t = num(0)For i = 0 To UBound(num) - 1If num(i) t Then t = num(i)Next imax = tEnd Function【实验 8 典型结果】【实验
9、8 问题】请总结一下哪些情况使用 Function 过程更加合适、哪些情况使用 sub 过程更加合适。需要返回值用 function不需要返回值时用 sub 更合适【实验 9】 分别编写按地址传递交换、按值传递交换两个数的过程子程序代码swap1()和 swap2() 。程序界面设计如下图所示。 (10 分)14掌握 Sub 过程参数传递方法实验结果:【实验 9 代码】Private Sub Command1_Click()a = 10: b = 20huan1 a, bPrint “按址传递前:“; “a=10“; “b=20“Print “按址传递后:“; “a=“; a; “b=“; b
10、End SubSub huan1(a, b)t = aa = bb = tEnd SubPrivate Sub Command2_Click()a = 10: b = 20huan2 a, bPrint “按值传递前:“; “a=10“; “b=20“Print “按值传递后:“; “a=“; a; “b=“; bEnd SubSub huan2(ByVal a, ByVal b)t = aa = bb = tEnd Sub15【实验 9 典型结果】【实验 10】 编写程序,利用 sub 过程,输出由字符组成的菱形,通过三次调用输出三个不同字符组成的菱形。 (10 分)灵活运用函数过程和子过程
11、解决实际问题16实验结果:【实验 10 代码】Sub lingxing(a As String)For i = 1 To 5Print Tab(10 - i);For j = 1 To i * 2 - 1Print a;Next jPrintNext iFor i = 4 To 1 Step -1Print Tab(10 - i);For j = 1 To i * 2 - 1Print a;Next jPrintNext iPrintEnd SubPrivate Sub Command1_Click()17lingxing yuansulingxing yuansulingxing yuans
12、uEnd SubFunction yuansu() As Stringyuansu = InputBox(“字符“)End Function【实验 10 典型结果】18【实验 11】 编写程序,利用 Sub 过程实现将任意一个十进制数 n 分别转换成 2 进制、8 进制和 16 进制数。要求:在文本框中得到要转换的十进制数 n,在事件过程中调用 Sub 过程得到转换后的3 个结果,在窗体上打印出结果。 (10 分)综合案例实验结果:【实验 11 代码】【实验 11 典型结果】【实验 12】 编写程序,利用 Function 函数过程的递归调用方式计算 n!。程序界面19如下图所示。 (10 分
13、)掌握 Function 过程的递归调用实验结果:【实验 12 代码】Private Sub Command1_Click()n = Val(Text1)Text2 = jiecheng(n)End SubFunction jiecheng(a)If a = 1 Thenjiecheng = 1Elsejiecheng = jiecheng(a - 1) * aEnd IfEnd FunctionPrivate Sub Command2_Click()EndEnd Sub【实验 12 典型结果】20【选做 1】编写程序,利用 Sub 子程序递归调用方式计算两个数 M、N 的最大公约数,其中 M
14、N,且 N0。程序界面如下图所示。 (+10 分,总分最高 100)掌握 Sub 过程的递归调用实验结果:【选做 1 代码】Private Sub Command1_Click()m = Text121n = Text2Text3 = yue(m, n)End SubFunction yue(a, b)r = a Mod bIf r = 0 Thenyue = bElseyue = yue(b, r)End IfEnd FunctionPrivate Sub Command2_Click()EndEnd Sub【选做 1 典型结果】22【选做 2】将超级玛丽的砖块、怪兽改为控件数组、将吃蘑菇功能、变大功能、变小功能封装成子过程,将前进、后退、发射子弹、跳的功能使用键盘事件完成。实验结果:【选做 2 代码】【选做 2 典型结果】实验小结1. 遇到的问题:函数的定义有时候会出问题2. 对课程的建议:习题课的时间可以近一点