VB程序设计(过程)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
过程(任务复杂时用)
一、程序设计的总思想
“自上而下、逐步细化”的模块化设计
二、自定义过程的分类
函数过程、Sub子过程……
三、Function过程(函数过程)
引例:歌德巴赫猜想:“任意一个大偶数(大于等于4)可以拆成两个素数之和。”
任意读入一个大于等于6的偶数,然后将其拆分成两个素数后,输出。
[分析:拆分、判断素数;主调过程完成输入、拆分、输出等任务;被调过程完成素数判断的任务。] Private Sub Command1_Click()
Dim x As Long, s1&, s2&
x = Text1
If x < 6 And x Mod 2 <> 0 Then End
s1 = 3 '为了一个不落,从最小的3开始拆
s2 = x - s1
Do While PDSS(s1) = False Or PDSS(s2) = False
's1、s2叫做实际参数,简称实参
'兰色的PDSS(s1)等被称做调用点
s1 = s1 + 2
s2 = s2 - 2
Loop
Text2 = s1: Text3 = s2
End Sub
Private Function PDSS(ByVal s As Long) As Boolean
's叫做形式参数,简称形参
Dim k As Long
For k = 2 To s - 1
If s Mod k = 0 Then Exit For
Next k
If k = s Then
PDSS = True
Else
PDSS = False
End If
End Function
Private Sub Command2_Click()
Text1 = ""
Text2 = ""
Text3 = ""
End Sub
Private Sub Command3_Click()
End
End Sub
1、定义
[Public|Private] Function 函数名([形参表])As 类型名定义部分
执行部分
End Function
2、说明
(1)[Public|Private]可以省,默认Private型
(2)[形参表]也可以省,此时称为无参函数;
各个参数之间用逗号分隔;每个参数的格式:
[ByVal|ByRef]形参名As 类型名
其中[]内的可以省,默认ByRef
(3)执行部分通常必须含有给函数名赋值的语句,函数名相当于一个同类型的变量使用。函数名可以带回一个值给主调过程的调用点。Function函数的调用格式同Sqr等系统函数。
3、执行
Click等事件过程通常做主调过程,而Function函数过程通常做被调过程,也可以调用别的函数过程或Sub子过程,甚至可以自己调用自己(递归)。程序的执行总是从事件过程开始。
4、实参与形参的关系(形参必须是变量或数组,实参可以是常量、变量、数组或表达式)
在“个数、类型、位置”上一一对应一致。
实参总是单向地给形参传值。
ByVal:值传递,即实参将自己的值复制一份给形参。凡是应该值传递最好加ByVal。
ByRef:地址传递,实参将地址传给形参,实参与形参公用一个存储单元。省略时默认ByRef
5、举例
例1:任意读入两个整数,调用函数过程求和,再由主调过程输出。
[分工:通常主调过程“有始有终”,输入→处理(调用)→输出。被调过程通常完成较难的一个(或多个)功能。]
Private Sub Command1_Click()
Dim x%, y%, he%
x = InputBox("x")
y = InputBox("y")
he = QH(x, y)
Print he
End Sub
Function QH(ByVal x%, ByVal y%) As Integer
'每个参数都是值传递时,每个前面都得加ByVal
QH = x + y
End Function
例2:任意读入两个整数,调用函数过程求和、积,再由主调过程输出。
Private Sub Command1_Click()
Dim x%, y%, he%, ji%
x = InputBox("x")
y = InputBox("y")
he = QH(x, y, ji)
Print he, ji
End Sub
Function QH(ByVal x%, ByVal y%, J%) As Integer
'每个参数都是值传递时,每个前面都得加ByVal
QH = x + y
J = x * y
End Function
地址传递就是想让形参的变化影响实参!
例3:任意读入10个数,调用函数求出最大值,再由主调过程输出。[数组做参数] Function PX(a() As Integer, ByVal n%) As Integer
'n记录数组元素的个数
Dim i%
PX = a(LBound(a))
For i = LBound(a) + 1 To UBound(a)
If (PX < a(i)) Then PX = a(i)
Next i
End Function
Private Sub Command1_Click()
Dim a%(1 To 10), i%
For i = 1 To 10
a(i) = InputBox(i)
Next i
Print PX(a, 10) '此题元素个数可以不传
End Sub
形参为数组时,()内的上下界省略。实参书写成数组名即可。且必须是地址传递,二者共用连续的内存空间。
例4:任意读入10个数,调用子过程按从小到大的顺序排列,再由主调过程输出。
[只有当被调过程带回一个值时,用Function函数过程最好,否则(不带回值、或带回多个值,用Sub子过程。] Option Base 1
Private Sub Command1_Click()
Dim a%(10), i%
For i = 1 To 10
a(i) = InputBox(":")
Next i
'不要Function返回值时
Call PX(a, 10)