实验十四 过程(一) 【实验目的】 1、 理解自定义函数过程的定义和调用方法; 2、 掌握自定义子过程的定义和调用方法; 3、 掌握子过程与函数过程的使用差别; 4、 掌握形参和实参使用方法; 5、 掌握值传递和地址传递的使用方法。 【实验内容】 (任选3题) 1、 编写一子过程ProcMin,求一维数组a中的最小值,子过程的形参自己确定。主调程序随机产生10个100到200之间的整数,调用ProcMin子过程,显示最小值。
14.1 用子过程求数组的最小值 Option Base 1 Private Sub Command1_Click() Dim i%, n% Dim a(10) As Integer Randomize For i = 1 To 10 a(i) = Int(Rnd * 101 + 400) Print "a(" & i & ")=" & a(i) Next i ProcMin a() End Sub Sub ProcMin(b() As Integer) Dim i%, min% min = b(LBound(b)) For i = LBound(b) + 1 To UBound(b) If b(i) < min Then min = b(i) Next i Print "数组中最小值为:" & min End Sub 2、 编写一函数过程Max( a( ) ),求一维数组a中的最大值。主调程序随机产生10个400到500之间的整数,调用Max函数,显示最大值。
Option Base 1 Private Sub Command1_Click() Dim i%, n%, da! Dim a(10) As Single Randomize For i = 1 To 10 a(i) = Int(Rnd * 101 + 100) Print "a(" & i & ")=" & a(i) Next i da = max(a()) Print "数组中最大值为:"; da End Sub
Function max(b() As Single) As Single Dim i% max = b(LBound(b)) For i = LBound(b) + 1 To UBound(b) If b(i) > max Then max = b(i) Next i End Function 3、 编写一子过程Delestr(s1,s2),将字符串s1中出现s2子字符串删去,结果仍旧存放于s1中。 【提示】 (1)在S1字符串中找S2的子字符串,可利用Instr( )函数,要考虑到S1中可能存在多少或不存在S2字符串,用Do while Instr(s1,s2)>0循环结构来实现。 (2)若在S1中找到S2字符串,首先确定S1 字符串,首先要确定S1字符串的长度,因S1字符串在进行多次删除时,长度在变化。然后通过Left()、Mid()函数或Right()函数的调用达到删除S1中存在的S2字符串。
Option Explicit Sub DeleStr(s1$, ByVal s2$) Dim i%, L2% i = InStr(s1, s2) L2 = Len(s2) Do While i > 0 s1 = Left(s1, i - 1) + Mid(s1, i + L2) i = InStr(s1, s2) Loop End Sub
Private Sub Command1_Click() Dim s1$, s2$ s1 = Text1 s2 = Text2 DeleStr s1, s2 Text3 = s1 End Sub 4、 编写一函数过程Maxlength(s),在已知的字符串S中,找出最长的单词。假定字符串s 中只函数字母和空格,空格是用于分隔不同的单词。 【提示】 (1)首先求出输入的字符串长度,然后从字符串中分离出单词,即对每个字符判断:若不为空格,将每个字符连接到当前单词的字符串变量,当前单词长度计数器加1;若为空格,表示一个单词的结束,将当前单词长度与最长单词长度比较,若长,当前单词替代最长单词。当前单词置空,当前单词长度计数器清除为0. (2)注意当前单词、当前单词长度、最长单词、最长单词长度。
Private Sub Command1_Click() Dim s$ s = Text1.Text Text2.Text = MaxLength(s) End Sub
Function MaxLength(s$) As String Dim w$, maxW$, L%, maxL$, c$, i% w = "": maxW = "": L = 0: maxL = 0 If Right(s, 1) <> " " Then s = s + " " For i = 1 To Len(s) c = Mid(s, i, 1) If c = " " Then If L > maxL Then maxW = w maxL = L End If w = "": L = 0 Else w = w + c L = L + 1 End If Next MaxLength = maxW End Function
5、 编写一函数过程IsH(n),对于已知正整数n,判断改数是否为回文数,函数的返回值类型为布尔型。主调程序每输入一个数,调用IsH函数过程,然后在图形框显示输入的数,对于回文数显示一个“★”,如左下图所示。
Private Sub Text1_KeyPress(KeyAscii As Integer) Dim s$ If KeyAscii = 13 Then s = Text1.Text If IsH(s) = True Then Picture1.Print s & " ★" Else Picture1.Print s End If End If End Sub
Function IsH(x$) As Boolean Dim i%, L% IsH = True L = Len(x) For i = 1 To Int(L / 2) If Mid(x, i, 1) <> Mid(x, L - i + 1, 1) Then IsH = False Exit For End If Next End Function 6、 编写一函数过程IsZ(n),对于已知正整数n,判断改数是否为质数(也称素数,指除了1和自己外不能被其他数整除的数,如2, 3, 5, 7, 11, 13...),函数的返回值类型为布尔型。主调程序每输入一个数,调用IsZ函数过程,然后在图形框显示输入的数,对于质数显示一个“★”,如右上图所示。
Private Sub Text1_KeyPress(KeyAscii As Integer) Dim s% If KeyAscii = 13 Then s = Val(Text1.Text) If IsZ(s) = True Then Picture1.Print s & " ★" Else Picture1.Print Trim(s) End If Text1.SelStart = 0 Text1.SelLength = Len(Text1) End If End Sub
Function IsZ(x%) As Boolean Dim i% IsZ = True For i = 2 To Sqr(x) If x Mod i = 0 Then IsZ = False Exit For End If Next End Function
7、 在文本框Text1中输入多个英文语句,单击“转换”按钮,将文本框Text1中的内容做如下转换:遇到句号时,将Text1中的每句的开头字母大写,每段的开头字母也大写,在文本框Text2中重新显示。 8 、 编写一个将N进制转换成十进制的调用程序。 |
|