vb第六章(过程)
VB教程 第六章 过程、模块与类

2.按地址传递参数 按地址传递参数使过程用变量的内存地址去访问实际变量 的内容。结果,将变量传递给过程时,通过过程可永远改 变变量值。按地址传递参数在 Visual Basic 中是缺省的。 例如: Sub PostAccounts (intAcctNum as Integer) . '这里放语句。 End Sub 3.使用可选的参数 4.提供可选参数的缺省值 5.使用不定数量的参数
下面分别对被调用过程在窗体模块、类模块和标准模块三种 情况说明: ① 窗体中的过程 ② 类模块中的过程 ③ 标准模块中的过程
一个很好的例子: 交通信号灯控制的例子
一个重要的思想(递归 一个重要的思想 递归) 递归
递归就是一个过程调用自己来完成某个特定的 任务。在递归过程中,一个过程的某一步要用 到其自身的上一步或几步的结果。递归分为两 种类型:直接递归和间接递归。Visual Basic的 过程具有递归调用功能。 递归可能会导致堆栈上溢。通常 Static 关键字 和递归过程不在一起使用。使用递归过程要特 别小心,不加控制的递归通常会引起溢出堆栈 空间错误信息。如下例:
作用域不同([Private | Public | Friend]) 生命期不同([Static]) 但是arglist语法较简单:可选的。代表在调用时要传递给 Function 过程的参数变量列表。多个变量应用逗号隔开。 一点注意:若 Function 过程会改变某个数学表达式中变 量的值,则应避免在此表达式中使用该函数。例如: I=2 J=3 X=(Sum (I,J)+1)/Sum(I,J) Function Sum (A As Integer, B As Integer) As String A=A+2 Sum=A+B End Function 结果如何?怎么修改?
《Visual Basic程序设计基础》教材习题参考答案第六章

第6章图形控件和图形方法一、判断题1.√2.×3.√4.×5.√6.×7.×8.×9.√10.√二、选择题1.C 2.B 3.C 4.A 5.A 6.C 7.A 8.C 9.C 10.B 11.A 12.B 13.B 14.C 15.C三、填空题1.Circle (ScaleLeft + ScaleWidth / 2, ScaleTop + ScaleHeight / 2), 8002.LoadPicture 3.AutoSize、Stretch、False、False 4.选中、属性5.形状、矩形6.Picture1.Picture=LodePicture("C:\Windows\Cloud.bmp")7.图片框、其他控件8.缇、SclaeMode 9.颜色10.颜色、圆弧起点处转角、圆弧终点处转角、椭圆纵轴与横轴长度之比四、程序阅读题程序1. 转动一条红色直线,其轨迹形成一个圆程序2. 在窗体上随机的位置、用随机的颜色、半径绘制1000个空心的圆。
程序3. 在图片框内绘制多个黄色边框矩形,填充样式在“实心”、“透明”间交替变换。
五、程序填空题1.(1)Combo1.ListIndex (2)Shape1.BorderStyle (3)Combo2.AddItem Str(i) 2.(1)Call pic (2)False (3)n = n + 1 (4)LoadPicture("c:\windows\1.bmp") (4)LoadPicture(fn)六、程序设计题程序1.界面设计略,过程设计如下:Private Sub Form_Load()Picture1.ScaleMode = 3End SubPrivate Sub Command1_Click()Dim x1 As Single, y1 As Single, x2 As Single, y2 As Singlex1 = InputBox("x1="): y1 = InputBox("y1=")x2 = InputBox("x2="): y2 = InputBox("y2=")Picture1.Line (x1, y1)-(x2, y2), , BEnd Sub程序2.界面设计略,过程设计如下:Private Sub Form_click()Dim r As Single, xo As Single, yo As SingleIf Form1.ScaleHeight < Form1.ScaleWidth Thenr = Form1.ScaleHeight / 3Elser = Form1.ScaleWidth / 3End Ifxo = Form1.ScaleLeft + Form1.ScaleWidth / 2yo = Form1.ScaleTop + Form1.ScaleHeight / 2Form1.FillStyle = 0: Form1.FillColor = vbBlueForm1.DrawWidth = 2: Form1.ScaleMode = 6Form1.Circle (xo, yo), r, vbYellowEnd Sub程序3.界面设计略,过程设计如下:Private Sub Form_Load()Dim i As IntegerFor i = 1 To 7: List1.AddItem i: Next iForm1.ScaleMode = 1End SubPrivate Sub List1_Click()Form1.Cls: Form1.ScaleMode = List1.TextForm1.Circle (Form1.ScaleLeft + Form1.ScaleWidth / 2, _ Form1.ScaleTop + Form1.ScaleHeight / 2), 50End Sub。
vb6

Vb第六章编程题答案1.编写一个求3个数中最大值和最小值的VB程序,然后用这个过程分别求5个数和7个数的最大最小值.dim ssnum=val(inputbox ("输入要求的数的个数"))dim a(1 to num)for i=1 to numa(i)=texti.textnextfor m=num to 2for n=1 to m-1if a(n)>=a(n+1) thenss=a(n+1)a(n+1)=a(n)a(n)=ssend ifnextnextprint "MAX:" & a(num)print "MIN:" & a(1)2.编写程序,求S=A!+B!+C!,阶乘的计算分别用Sub过程和Function过程两种方法来实现方法一:(以前方法)Option Base 1Private Sub form_Click()Dim a(), s()Dim sum#, str$Dim m%m = Val(InputBox("输入要计算几个阶乘的数")): If m <= 0 Then MsgBox "请输入>=1的正数": Exit SubReDim a(1 To m)ReDim s(1 To m)For i = 1 To ma(i) = Val(InputBox("输入第" & i & "个需要计算阶乘的数")): If n < 0 Then Exit For Next iFor i = 1 To ms(i) = 1For j = 1 To a(i)s(i) = s(i) * jN ext jPrint a(i); "的阶乘数为:"; s(i)Next iFor i = 1 To msum = s(i) + sumNext iFor i = 1 To mIf i = m Thenstr = str & a(i) & "!"Elsestr = str & a(i) & "!" & "+"End IfN ext iPrint Tab(3); "所求的"; m; "个数的阶乘和为:"; str; "="; sumEnd Sub方法二:(sub过程1)Sub sub1(x As Long)Dim m%, i%m = 1For i = 1 To xm = m * iNextx = mEnd SubPrivate Sub Form_Click()Dim a&, b&, c&, i%, s#a = InputBox("1")b = InputBox("2")c = InputBox("3")sub1 asub1 bsub1 cs = a + b + cPrint sEnd Sub3.编写一个过程,以整形作为形参。
VB程序设计教程 第四版 第6章

a
10
执行过程体
x a
20 10
返回
返回
20 Integer a = = : y b10 的地址 b 10 = 20 : b 10 aCall = Swap 10 : y b 的地址 2(a, b 10 = b) 20 : 10 b Call a = Text Swap b
汉字的机内码最高位为1,Asc函数码值为小于0(补码)
西文字符的最高位为0,Asc函数求其码值为大于0
Function CountC%(ByVal s$) Dim i%, k% Dim c As Char For i = 1 To Len(s) c = Mid(s, i, 1) If Asc(c) < 0 Then k = k + 1 Next CountC = k End Function Sub Command1_Click() Dim c1% c1 = CountC(Text1.Text) 显示 Text1.Text 和 C 1 End Sub
Functioc Count%(st$) Dim i% Count = 0 i = InStr(st, “ the ") Do While (i > 0) Count = Count + 1 st = Mid(st, i + 1) i = InStr(st, “ the ") Loop VB 程序设计教程 End Function
Z←gcd
例6.2 设断点演示过程
调用形式:函数过程名([参数列表])
参数列表(称为实参或实元):必须与形参个数相同,位置与 类型一一对应。可以是同类型的常量、变量、表达式。
VB课件第6章Visual Basic 循环结构

Do Until i = 100
例6-3:求 1+22+32+……n2大于1000的最小值。
选Do … Loop语句: 不知道要加到第几项,但知道累加和大于 1000,并且,第一次超过1000时就不再累 加了,所以选Do … Loop语句。
求项数(计数i): i=0(初值) ,i=i+1(重复执行)
例: 利用随机函数10个产生[20,90]的整数, 求其平均值.
界面设计: 单击窗体, 显
示结果如图.
例: 利用随机函数10个产生[20,90]的整数, 求其平均值.
分析: 产生数X 求和s
求平均a
产生一个X: X=Int(Rnd*71+20)
显示产生的值: Print x
计算和: s=s+x
重复10次 求得这10 个数的和s
Private Sub Form_Click( ) Dim i As Integer i=0 Do While i < 100 i=i+1 Print i; If i Mod 10 = 0 Then Print Loop
End Sub
用Do Until … Loop循环来编制 例6-2的程序
Private Sub Form_Click() Dim i As Integer i=0 Do While i < 100 i=i+1 Print i; If i Mod 10 = 0 Then Print Loop
If Max <= x Then Max = x Next i Print Print “最大值为:”; Max End Sub
6.4 循环嵌套
循环嵌套:在一个循环语句的循环体中又包含有另一 循环语句。 VB的三种循环可以自身嵌套与相互嵌套 要求:内层结构一定包含在外层结构中,不能交叉
VB-第6章 数组与自定义类型

数组的概念
数组并不是一种数据类型,而是一组相同类型数据的 集合。用一个统一的名字(数组名)代表逻辑上相 关的一批数据,每个元素用下标变量来区分;下标 变量代表元素在数组中的位置。 其表示形式: A(1),A(10) X(1,1), X1(1,10), X(2,10) Y(0,0,0), Y(1,2,5) Dim mark(1 to 100) as integer
4 4
若要求一个班100个学生的平均成绩,然后 统计高于平均分的人数。
aver = 0 :sum = 0 For i = 1 To 100 mark = InputBox("输入" + i + "位学生的成绩") sum = sum + mark Next i aver = sum / 100
mark是一个简单变量,存放的是最后一个学生的成绩。 已有知识解决方法:再重复输入成绩,带来两个问题: (1)输入数据的工作量成倍增加; (2)若本次输入的成绩与上次不同,则统计的结果不正确。 解决此问题的根本方法,引入数组,始终保持输入的数据, 一次输入,多次使用。
7 7
数组的概念
Visual Basic中的数组,按不同的方式分为以下几类:
按数组的大小(元素个数)是否可以改变来分为: 静态(定长)数组、动态(可变长)数组。 按元素的数据类型可分为: 数值型数组、字符串数组、日期型数组、变体数组等。 按数组的维数可分为: 一维数组、二维数组、多维数组。 对象数组:菜单对象数组、控件数组。
Preserve参数:保留数组中原来的数据
24
24
说明
(1)ReDim语句是一个可执行语句,只能出现在过程中,并且 可以多次使用,改变数组的维数和大小。 (2)定长数组声时中的下标只能是常量,而动态数组ReDim 语 句中的下标是常量,也可以是有了确定值的变量。 例: Private Sub Form_Click() dim a() Dim N As Integer N=Val(InputBox(“输入N=?”)) reDim a(N) As Integer „„. End sub
VB应用程序的开发过程

第六章第1、2讲
可视化编程
程序设计语言与程序设计
人们想用计算机解决一个问题,必须事先设计 好计算机处理信息的步骤,把这些步骤用计算 机能够识别的指令编写出来并送入计算机执行, 计算机才能按照人的意图完成指定的工作。我 们把计算机能执行的指令序列称为程序,而编 写程序的过程称为程序设计。
学习版<专业版<企业版
三、启动 Visual Basic
步骤:
1. 单击任务条上的“启动”。 2. 选择“程序”,接着选取“Microsoft Visual Basic 6.0 中文版”。 3. 双击 Visual Basic 6.0的 快捷键图标。 4. 使用“Windows 资源管理器”寻找 Visual Basic 可执行文件。
在设计模式中,通过双击窗体或窗体上任何对象或通过 “工程资源管理器”窗口中的“查看代码”按钮来打开代码编 辑器窗口。代码编辑器是输入应用程序代码的编辑器。
4. 属性(properties)窗 口 属性是指对象的特征,如大小、标题或颜色等
数据。在Visual Basic6.0设计模式中,属性窗口列出 了当前选定窗体或控件的属性的值,用户可以对这
Visual Basic的功能与特点
面向对象的可视化程序设计。 事件驱动的程序设计和运行机制。 易学易用的应用程序集成开发环境。 结构化的程序设计语言。 强大的数据库访问功能。 支持DDE、DLL、OLE等技术。 完备的联机帮助功能。
9
3.VB中的类和对象
第六章vb计算机

第六章 过 程
6.1 6.2 6.3 6.4 6.5 函数过程的定义与调用 子过程的定义与调用 参数传递 递归 变量、 变量、过程的作用域
6.6 综合应用 6.7 重点和难点
2011年9月21日星期三
Visual Basic程序设计
6.1 函数过程的定义
6.1.1 引例已知多边形的各条边的长度,计算 引例已知多边形的各条边的长度 已知多边形的各条边的长度, 多边形的面积。 多边形的面积。 计算多边形面积, 计算多边形面积, 可将多边形分解成若干个 三角形。 三角形。 计算三角形面积的公式如下: 计算三角形面积的公式如下:
2011年9月21日星期三
Visual Basic程序设计
6.2.4子过程与函数过程区别 子过程与函数过程区别 (1)函数过程名有值,有类型,在函数体内至少赋值一次; 函数过程名有值,有类型,在函数体内至少赋值一次; 函数过程名有值 子过程名无值,无类型,在子过程体内不能对子过程名赋值。 子过程名无值,无类型,在子过程体内不能对子过程名赋值。 (2)调用时,子过程调用是一句独立的语句; 调用时,子过程调用是一句独立的语句; 调用时 函数过程不能作为单独的语句加以调用,必须参与表达式运算。 函数过程不能作为单独的语句加以调用,必须参与表达式运算。 (3)一般当过程有一个返回值,使用函数过程较直观;反之若过程无返回值, 一般当过程有一个返回值,使用函数过程较直观;反之若过程无返回值, 一般当过程有一个返回值 或有多个返回值,使用子过程较直观。把某功能定义成函数或是过程, 或有多个返回值,使用子过程较直观。把某功能定义成函数或是过程, 没有严格的规定。但只要能用函数定义的,就肯定能用过程定义, 没有严格的规定。但只要能用函数定义的,就肯定能用过程定义,反之 不一定。 不一定。 6.2.5形参个数的确定 形参个数的确定 (1)形参是过程与主程序交互的接口,从主程序获得初值,或将计算结果返 形参是过程与主程序交互的接口,从主程序获得初值, 形参是过程与主程序交互的接口 回给主调程序。不要将过程中所有使用过的变量均作为形参。 回给主调程序。不要将过程中所有使用过的变量均作为形参。若只在过 程内部使用,则声明为局部变量。 程内部使用,则声明为局部变量。 (2)形参没有具体的值,只代表了参数的个数、位置、类型;只能是简单变 形参没有具体的值,只代表了参数的个数、位置、类型; 形参没有具体的值 数组名,不能是常量、数组元素、表达式。 量、数组名,不能是常量、数组元素、表达式。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、过程与模块的概念 二、Sub子过程的定义Байду номын сангаас调用 Sub子过程的定义和调用 三、Function函数过程的定义和调用 Function函数过程的定义和调用 四、参数的传递 五、变量与过程的作用域 六、过程的递归调用 七、常用算法 八、多重窗体
一、过程与模块的概念
1. 过程 独立功能的子程序。 独立功能的子程序。 两类:系统提供的内部 两类:系统提供的内部函数过程和事件过程; 用户根据自己需要定义的通用过程。 用户根据自己需要定义的通用过程。 通用过程作用: 通用过程作用: • 程序模块化,结构清晰,易于修改和维护。 程序模块化,结构清晰,易于修改和维护。 • 可用于在程序中多处调用。 可用于在程序中多处调用。
参数列表: 称为实参或实在参数 实参或实在参数, 参数列表: 称为实参或实在参数,它必须与 形参保持个数相同,位置与类型一一对应。 形参保持个数相同,位置与类型一一对应。 个数相同 一一对应 参数传递:调用时把实参的值或地址传递给形参; 调用时把实参的值或地址传递给形参; 多个参数间用逗号分隔。 多个参数间用逗号分隔。
通用过程
函数过程 (Function) • 通用过程 子过程 (Sub) (有返回值) 有返回值) (没有返回值) 没有返回值)
属性过程 (Property) 事件过程 (Event)
按作用域分通用过程: 按作用域分通用过程: 公有过程(Public): 公有过程(Public):可被应用程序任意过程调用 私有过程(Private): 私有过程(Private):只能被同一模块中的过程调用
2、Function函数过程的调用: Function函数过程的调用: 函数过程的调用 调用格式: 调用格式:
变量名=函数过程名([参数列表]) 变量名=函数过程名([参数列表]) ([参数列表 注意: 注意:必须给实参加括号
如无实参, 如无实参,括号也可省略
例如: 例如: 调用例6 调用例6-3,求两个圆面积之和 Sum=Cir(20)+Cir(30)
:
• 参数列表形式: 参数列表形式:
[ ByVal ] 变量名 [ ( ) ] [ As 类型 ] _ [ , [ByVal] 变量名 [ ( ) ] [ As 类型 ] … ]
参数也称为形参 无参过程名后的( )不可缺省 也称为形参, 无参过程名后的 不可缺省 形参 ByVal 参数是值传递(Passed By Value), 参数是值传递( ) 缺省ByVal:引用传递(ByRef),即地址传递 :引用传递( ),即地址传递 缺省 ), • Sub子过程不能嵌套定义 Sub子过程不能嵌套定义
2、建立Sub子过程(有两种方法): 建立Sub子过程( Sub子过程
• 在VB中,利用“工具”菜单下的“添加过程” VB中 利用“工具”菜单下的“添加过程” 命令定义 • 利用代码窗口直接定义
在窗体/标准模块中:插入点放在现有过程之外, 在窗体/标准模块中:插入点放在现有过程之外, 之外 通用说明” 或在 “通用说明”处 键入: 过程名, 键入:Private Sub 过程名,回车
100之间的孪生素数 素数值相差2) 之间的孪生素数( 例6-5 求1-100之间的孪生素数(素数值相差2)
过程调用的执行: 过程调用的执行:
主调过程中执行到过程调用语句时,转去执行被调过程, 执行结束后,返回主调过程中本次调用的调用点,继续执行 调用点的后序语句。 被调过程1 …… 结束 主调过程 …… Call 过程1(参数列表) …… 结束 调用点
过程调用注意事项 过程调用注意事项: 注意事项
•
例6-2 求圆面积的函数过程: 求圆面积的函数过程:
Private Function Cir(ByVal r As Single) As Single Const PI = 3.1415926 Cir = PI * r * r End Function
例6-3 求N阶乘的函数过程: 阶乘的函数过程:
(Passed By Reference) )
例如: 例如:
Private Sub swap(x As Integer, y As Integer) Dim temp As Integer If x < y Then temp = x:x = y:y = temp : : End If End Sub Private Sub exl(ByVal x As Integer, y As Integer) x=x+2 y=y+x*2 Print x, y End Sub
实在参数
或
参数列表) CALL 子过程名(参数列表)
举例 . 输入两个整数,按从大到小输出。 输入两个整数,按从大到小输出。
Private Sub swap(x As Integer, y As Integer) Dim temp As Integer If x < y Then temp = x:x = y:y = temp : : End If End Sub Private Sub Command1_Click() Dim a As Integer, b As Integer a=Val(Text1.Text): b=Val(Text2.Text) If a<b Then call swap(a,b) End If Print a,b End Sub ‘过程的调用, 或swap a,b 过程的调用, 调用点 (主调过程 (主调过程) 主调过程) ‘过程定义 交换两个变量值 过程定义,交换两个变量值 过程定义 (被调过程 被调过程) 被调过程
注意: 注意:
建立Function函数过程的方法与建立Sub子过程相同 建立Function函数过程的方法与建立Sub子过程相同 例 Function函数过程的方法与建立Sub
3、Sub子过程的调用(主调过程) Sub子过程的调用(主调过程) 子过程的调用 调用格式: 调用格式:
参数列表] 子过程名 [参数列表]
Private Function Fact(ByVal N As Integer) As Long Dim k As Integer Fact = 1 If N = 0 Or N = 1 Then Exit Function Else For k = 1 To N Fact = Fact * k Next End If End Function
2. 模块 将不同类型的代码组织到一起而提供的一种结构。 将不同类型的代码组织到一起而提供的一种结构。 (1)窗体模块(.frm): 每个窗体对应一个窗体模块 窗体模块(.frm) (2)标准模块(.bas):多窗体中共享的代码 标准模块(.bas):多窗体中共享的代码 ):
可保存通用过程、相关说明(全局变量、 可保存通用过程、相关说明(全局变量、 模块级变量) 模块级变量) 工程”+“添加模块 添加模块” “ 工程”+“添加模块”
被调过程2 被调过程1 Call 过程2(参数列表) 2 结束 主调过程 …… Call 过程1(参数列表) …… 结束 调用点 …… 结束
例6-1,求组合数
m! C = n !( m − n )!
n m
'定义求阶乘的 定义求阶乘的Sub子过程 子过程fac 定义求阶乘的 子过程 Private Sub fac(ByVal n As Integer, f As Long) ‘过程定义 过程定义 Dim i As Integer f=1 For i = 1 To n f=f*i Next i End Sub
• •
过程调用注意事项 过程调用注意事项:
• 调用子过程的形式有两种: 调用子过程的形式有两种: Call关键字 若用Call关键字时 实参必须用圆括号括起, 若用Call关键字时,实参必须用圆括号括起,且左括号 与过程名间不能有空格;若实参为空,则可省略括号。 与过程名间不能有空格;若实参为空,则可省略括号。 若用过程名则无( ), 过程名则无 若用过程名则无( ),且第一个参数与过程名间要有 空格。 空格。 例:swap a,b call swap(a,b)
三. Function函数过程的定义及其调用 Function函数过程的定义及其调用
函数过程是带有返回值的特殊过程。 函数过程是带有返回值的特殊过程。 带有返回值的特殊过程
1、定义
[Public|Private][Static] Function 函数名([参数列表]) [AS 类型] Public|Private][Static] 局部变量或常数定义 语句块 函数名= 函数名=表达式 [Exit Function ] 语句块 函数名= 函数名=表达式
例如:调用例6 求阶乘的函数过程, 例如:调用例6-3求阶乘的函数过程,求例 6-1中的组合数。 中的组合数。 Private Sub Command1_Click() Dim m As Long Dim n as Integer m = Val(txtm) n= Val(txtn) txtResult = Fact(m) / (Fact(n) * Fact(m - n)) End Sub
(3)类模块(.cls):创建新的对象类的属性、 类模块(.cls):创建新的对象类的属性、 ):创建新的对象类的属性 事件、方法等 事件、
VB应用程序的结构
二. Sub 子过程的定义及其调用
1、定义Sub子过程 (被调过程) 定义Sub子过程 被调过程) Sub
局部变量或常数定义 语句块 [Exit Sub ] 语句块
比较函数过程与Sub 比较函数过程与Sub子过程 Sub子过程 • 不同之处: 不同之处: 函数过程通过函数名有返回值, 函数过程通过函数名有返回值,因 此定义时有返回值的类型说明。 此定义时有返回值的类型说明。 Sub子过程通过变量返回值 Sub子过程通过变量返回值 • 相同点: 相同点: 完成某种特定功能的一组程序代码。 完成某种特定功能的一组程序代码。