3.想想Max参数的作用和传递方式。 4.学习掌握数组作为参数的传递方法。 【实验步骤】
1.在代码窗口中编写ProMax(a() As Integer,Max As Integer)过程。 2.用窗体的Click事件过程作为主调程序,调用ProMax(a(),Max)过程。
提示:产生300~400之间(包括300和400)随机整数的算法为:Int(Rnd*101+300) 实验5.4 编一函数过程,对已知数m判断其是否为“完数”。并求1000以内的所有“完数”。所谓“完数”即该数等于所有能够整除它的因子之和。如:6=1+2+3,6就是“完数”。
【实验要求】
1.“完数”作为一个单独的函数进行编写,其函数形式为: Function WS(m As Integer) as Boolean
2.当用户按下“完数”命令按钮后,在窗体上显示1~1000之间的“完数”。 3. 掌握函数的调用,考虑参数m是用值传递还是地址传递。运行界面如图5-4所示。
图5-4 实验5.4的运行界面
【实验步骤】
1.按图5-4设计用户界面,包括一个标签、一个命令按钮和一个图形框。 2. 在代码窗口中编写函数WS(m)。
3.用命令按钮的Click事件过程作为主调程序调用该函数,并在窗体上显示1~1000之间的“完数”。
提示:
1.判断一个数m是否为“完数”的算法步骤为:
(1)将m与I=1,2,…,int(m/2)依次取余数,余数为0,I为因子,累加求和,算得所有的因子之和sum。
(2)将sum与m比较,如果相等,m为“完数”。 2.在调用WS函数时用循环语句逐次调用。
实验5.5 编一个选择法排序子过程,对已知的若干个整数按递增次序排序。 【实验要求】
1.子过程形式为:sub Sort1(a%()),学习掌握数组作为参数的传递方法。
2.在键盘上任意的输入若干个数,调用选择排序子过程Sort后,这些整数按递增次序
- 21 -
排序,并将排好序的整数依次显示在窗体中。
【实验步骤】
1. 在代码窗口中编写子过程sub Sort1(a%())。
2.在窗体的Click事件过程中定义一个数组,并用Inputbox函数依次从键盘中输入整数存放在数组中,然后以该数组作参数调用Sort1子过程。
提示:
选择排序法原理:用两个循环嵌套语句实现,在每一轮排序都是找出当前最小数的下标,出了内循环,再将最小数交换到正确的位置。
选择排序法算法的实现步骤(假定为n个数的序列):
(1)从n个数中选出最小数的下标,然后将最小数与第1个数交换位置。
(2)除第1个数外,其余n-1个数再按步骤(1)的方法选出次小的数,与第2个数交换位置。
(3)重复步骤(1)n-1遍,最后构成递增序列。
实验5.6 在实验5.5的基础上,编一个二分查找子过程。 【实验要求】
利用二分查找算法查找某数,找到返回该数在数组中的下标位置,找不到返回值为-1。 【实验步骤】
1. 在代码窗口中分别编写排序子过程和二分查找子过程。
2.在窗体的Click事件过程中定义一个数组,并用Inputbox函数依次从键盘中输入整数存放在数组中,然后以该数组作参数依次调用排序子过程和二分查找子过程。 提示:
二分查找算法思想:在一个按升序排列好的数组中,设low和high分别为查找范围的上界与下界,将要查找的关键值key同查找范围的中间mid项元素比较,如果:
Key
Key>a(mid) low=mid+1 查找区域缩小一半,继续查找,直到找到或查找区域
中 无元素(-1)。
算法步骤:
(1)将low和high的初值分别设置为数组下标的下界与上界。
(2)mid=(low+high)/2,如果key=a(mid),查找结束,如果low>high,数组中没该查找数,查找结束。
(3)如果key>a(mid),low = mid-1,否则high = mid+1。 (4)重复步骤(2)、(3),直到找到或查找数组中无该元素。
实验5.7 定义一个同标准函数Replace一样的MyReplace(S,OldS,NewS)函数过程。 【实验要求】
1.用NewS新子串替换S字符串中的所有与OldS相同的旧子串,返回一个包含替换结果的字符串。
2.想一想,MyReplace函数的各参数传递是用值传递还是地址传递?
- 22 -
图5-5 实验5.7的运行界面
【实验步骤】
1. 设计用户界面如图5-5所示,包括4个标签、4个文本框和一个命令按钮。 2.在代码窗口中编写MyReplace(S, Olds,NewS)函数过程。
3.在命令按钮的Click事件过程中定义三个字符串变量S(存放替换前的内容)、OldS(存放被替换的子字符串)和NewS(存放用来替换前的子字符串),并依次用三个文本框给它们赋值,然后以它们作参数调用MyReplace(S, Olds,NewS)函数过程,最后将该函数过程的返回结果显示在一个文本框中。
提示:MyReplace(S, Olds,NewS)函数过程的算法为: (1)分别取字符串S与子串OldS的长度。
(2)使用函数InStr(S,OldS),在字符串S中查找首个OldS子串出现的位置,如果函数返回值非0表示找到,运行下一步。
(3)在S字符串中,用NewS字符子串替换OldS字符子串。设S字符串长度为Len1,OldS子串长度为len2, OldS子串在S字符串的位置为n,则该替换可使用以下语句实现:
S = Left(S, n - 1) + Trim(NewS) + Right(S, len1 - n - len2 + 1)
(4)重复步骤(2)和(3),直到所有旧子串OldS都被新子串NewS代替(函数InStr返回值为0)。
实验5.8 求自然对数e的近似值。其近似公式为:
?m111111e?1????...?? ... ???1??1!2!3!i!i?0i!i?1i!【实验要求】
1.在计算e的过程中,最后一个累加项为小于或等于10。
2.分别用子过程和函数过程编写,并分别调用。区分子过程和函数过程的异同,掌握它们的调用方法和转换方式。
【实验步骤】
1. 在代码窗口中分别编写计算e的子过程和函数过程。
- 23 -
-7
2.在窗体的Click事件过程中分别调用计算e的子过程和函数过程。 提示:
1.该题先求连乘I!,再对1/I!进行累加。循环次数预先未知,根据累加项1/I!的值是否达到精度决定循环与否。算法流程图如图5-6所示。
图5-6 实验5.8的流程图
2.在对同一问题定义两种过程时,只要抓住函数过程和子过程的区别,即函数名有一个值、子过程名无值的特点。这样当定义好函数过程后,要改为子过程,只要将函数过程名改为子过程的形参,另外再增加一个子过程名即可。反之,将子过程改为函数过程时,只要将有返回值的一个形参改为对函数过程名赋值。
实验5.9 定义一个用递归方法求组合数Cnm的函数过程。 【实验要求】
掌握递归过程的编写,理解构成递归的两个重要条件: 1.递归结束条件及结束时的值。
2.待求结果能用递归形式表示,并且递归向结束条件发展。 【实验步骤】
1.在代码窗口中编写用递归方法求组合数的函数过程。
2.在窗体的Click事件过程中使用Inputbox函数依次从键盘中输入求组合数的两个参数,然后调用求组合数的函数过程。
【提示】
nnn-11.对于Cnm有如下递归形式:Cm=Cm-1+Cm-1
2.递归条件:
?C0m=1, n=0?1?Cm?m, n=1 ?nm?n?Cm?Cm, n>m/2 - 24 -
实验六 常用控件
一、实验目的
1.掌握窗体及常用标准控件的常用属性、方法与事件。
2.掌握构建具有指定功能界面的方法,即运用窗体及常用控件的属性、方法、事件构建所需界面。
3.掌握鼠标、键盘与对象拖放等高级事件过程。
二、 实验内容
控件实验的一般设计方法:在Visual Basic 的应用程序设计中,首先根据要求规划好界面的元素和布局,然后对将要使用的窗体与控件,决定应更改哪些属性,调用哪些方法,对哪些事件作出响应,从而得到希望的外观和行为,使得窗口及控件能正确响应用户的交互操作。
实验6.1 密码处理,如图6-1所示。
图6-1 密码处理 【实验要求】
1.窗口上部的文本框名称为InputPassword,下部的文本框名称为DisplayPassword。 2.初始时,在InputPassword文本框中输入的字符都显示为“*”。
3.单击“显示密码”按钮,则InputPassword文本框改为显示实际输入的字符。 4.单击“隐藏密码”按钮,则InputPassword中的字符都还原为显示“*”。
5. 单击“复制密码”按钮,则把InputPassword文本框的实际内容复制到DisplayPassword文本框中。
【实验步骤】
1.按照图6-1在窗体上生成需要的控件。部分控件的部分属性初始值按表6.1进行设置。
- 25 -