vb程序设计教程第三版第5章
VB6.0理论第三版 第5章

2. 数组参数的传递 在VB中允许参数是数组,数组只能通过传址方式进行传递。 在传递数组时要注意以下事情: ☆ 在实参列表和形参列表中放入数组名,忽略维数的定义 ,但圆括号不能省略。 ☆ 如果被调过程不知道实参数组的上下界,可使用Lbound 和Ubound函数确定实参数组的上下界。 例li6-6:编一函数,求任意一维数组中各元素之积,再分 别调用该函数。求
计算机软件技术基础 Visual Basic 程序设计
例如,在下面一个标准模块文件中进行不同级的变量声明。 Public Pa As integer ' 全局变量 Private Mb As String*10 '窗体/模块级变量 Sub F1() Dim Fa As integer '局部变量 …… End Sub Sub F1() Dim Fb As Single '局部变量 …… End Sub 计算机软件技术基础 Visual Basic 程序设计
2. 函数过程的调用 函数过程的调用和标准函数的调用相同,形式如下: 变量 = 函数过程名([参数列表]) 注意:☆ 由于函数过程名返回一个值,故函数过程不能作为单 独的语句加以调用,必须作为表达式或表达式中的一部分,再 配以其他的语法成分构成语句。 ☆ “参数列表”称为实参或实元,它必须与形参保持 个数、类型与位置一一对应。实参可以是同类型的常数、变量 、数组元素或表达式。 ☆ 调用时把实参的值传递给形参,称为参数传递。其 中,值传递(形参前面有ByVal)时实参的值不随形参的值变 化而改变,而引用传递(又称地址传递)的实参的值随形参的 值一起变化。 ☆ 当参数是数组时,形参与实参在参数声明时应省略 其维数,但必须保留括号。 计算机软件技术基础 Visual Basic 程序设计
VB第5章 数组、结构与集合

其中的“变量名”表示一个用于依次存放各数组元素的变量, 其类型必须与数组元素的类型一致。在需要遍历所有数组元素时, 特别是在数组长度不易确定的环境中,使用这种For Each…Next语 句就很方便。
5.1 数组
5.1.1 声明和访问数组 3. 多维数组 下标数量大于等于2的数组称为“多维数组”。在多维数组中, 比较常用的是二维数组,其数据组织形式与常见的二维表格十分相 似。声明二维数组与声明一维数组的语法格式类似,例如: Dim ary1(3, 4) As Integer '声明一个4行5列的数组 '声明一个两索引最大值不确定的二维数组 Dim ary2(,) As Integer
第5章 数组、结构与集合
本章讲述的主要内容
5.1 数组数组
在现实生活中有着各种各样的数据,这些数据在所讨论的问 题中可分为两类:一类是仅与其取值有关,而与其所在的位置无 关;更常见的另一类是不仅与其取值有关,并且与其所在的位置 也密切相关,如二维表格中的数据与其所在行列坐标有着密切的 关系。 前面我们所讲过的变量都是简单变量,利用简单变量可以解 决不少问题,但是如果在程序设计中仅使用简单变量,势必受到 简单变量单独性和无序性的限制,而难于或无力解决那些数据不 仅与取值有关,而且与其所在位置也有关的较复杂的问题,如学 生成绩就隐含着名次和成绩。要想方便地解决这些问题,通常需 要借助于复杂数据类型即数组。数组是一些具有相同类型的数据 按一定顺序组成的序列,数组中的每一个数据都可以通过数组名 及唯一索引号(下标)来存取。
声明多维数组时,用逗号表示维数,一个逗号表示二维数组, 两个逗号表示三维数组,依次类推。
5.1 数组
5.1.2 Array类 Visual Studio提供的Array类中包含了一些适用于数组常用操 作的方法,使用这些方法能完成数组清零、复制、排序、反转等常 用操作。Array类的常用方法见表5-2。
VB程序设计第五章 数组

5. 求数组中最大元素和所在下标及各元素之和
方法:先假设第一个元素及下标为所求结 果,然后依次比较。 利用循环结构进行
Dim Max As Integer, iMax As Integer, sum As Integer Max=iA(1):iMax=1: sum=iA(1) For i = 2 To 10 sum = sum + iA(i) If iA(i) > Max Then Max = iA(i) iMax = i End If 求最小值同样方法进行 Next i
(a) 利用Array()函数,可以直接给数组赋值; (b) 数组的声明必须是动态数组或者省略圆 括号,且其类型必须为 Variant (c) 数组的下界默认为0,也可以通过 Option Base 语句确定 (d) 上界由 Array() 函数括号内参数个数确定, 或者由 UBound() 函数确定。
赋值时注意: (1) 赋值号两边的上界类型必须一致 (2) 如果赋值号左边是一个动态数组,则赋值后数组 大小与右边一致。 (3) 如果左边是静态数组,则数组赋值出错!
4. 数组的输出
数组的输出,采用循环输出即可 例:输出方阵sC中的下三角元素
For i = 0 To 4
For j = 0 To i sc(i, j) = i * 5 + j Print sc(i, j); " "; Next j Print ' 换行 Next I (参见P93的代码。)
下标可以是整型的常数、变量、表达式, 也可以是又一个数组元素。 数组元素的使用规则和同类型的简单变量 相同。 一般情况下,数组元素类型必须相同。 但当数组类型定义为 “variant” 时,可以包 含不同类型的元素。
VB程序设计第3版第5章

使用块结构条件语句,按以上标准计算运费
14
分析:
第 五 章 选 择 结 构 程 序 设 计
设每公里每吨货物的基本运费为Price, 货物重为Weight, 运输距离为Distance, 折扣为Discount, 则总运费Freight的计算公式为:
Freight= Price * Weight * Distance *
5.1 单行结构条件语句
第 五 章 选 择 结 构 程 序 设 计
1. 格式 If 条件 Then [语句组1] [Else 语句组2] 2. 功能 如果“条件”成立(True),则执行“语句 组 1” T F 否则执行“语句组2”
条件 语句组1 语句组2
例:If x <= 0 Then y = abs(x) Else y = log(x)
1
引言
第 五 章 选 择 结 构 程 序 设 计 顺序结构程序的执行次序是按语句的先后排列 次序依次执行的,然而,计算机在处理实际问题 时,往往需要根据条件是否成立,决定程序的执 行方向,在不同的条件下,进行不同的处理。假 如遇到这样一个问题:
Y=
|x|
x≤0
lnx x>0
在输入变量x的值之后,需根据x的不同取值范 围做不同的处理,使用顺序结构的程序无法解决 这一问题的。本章将介绍解决此类问题的语句结 构。 2
23
第 五 章 选 择 结 构 程 序 设 计
【例 5-3】用多分支选择语句实现:输入年 份和月份,求该月的天数。 分析:
当月份为1、3、5、7、8、10、12时,天 数为31天; 当月份为4、6、9、11时,天数为30天; 当月份为2时,如果是闰年则天数为29天, 否则天数为28天。某年为闰年的条件是: 年份能被4整除,但不能被100整除,或 年份能被400整除。
vb第三版第五章试题及答案

vb第三版第五章试题及答案一、选择题(每题2分,共20分)1. 在VB中,以下哪个选项不是合法的变量名?A. MyVarB. _myVarC. 2MyVarD. myVar2答案:C2. VB中哪个关键字用于声明一个过程?A. FunctionB. SubC. ClassD. Dim答案:B3. 在VB中,以下哪个选项不是控制结构?A. If...Then...ElseB. For...NextC. Do...LoopD. Dim答案:D4. VB中的单精度浮点数类型是?A. IntegerB. SingleC. DoubleD. Currency答案:B5. 在VB中,以下哪个选项用于声明一个数组?A. Dim arr(5) As IntegerB. Dim arr As IntegerC. Dim arr(5)D. Dim arr As New Integer(5)答案:A6. VB中用于结束一个过程的关键字是?A. EndB. ExitC. ReturnD. Stop答案:A7. 在VB中,以下哪个选项不是事件驱动的?A. ClickB. LoadC. KeyPressD. Sub答案:D8. VB中用于获取当前日期的函数是?A. NowB. DateC. TimeD. Today答案:D9. VB中用于声明一个类模块的关键字是?A. ClassB. ModuleC. InterfaceD. Structure答案:A10. 在VB中,以下哪个选项不是文件访问模式?A. Open For InputB. Open For RandomC. Open For BinaryD. Open For Append答案:B二、填空题(每题2分,共20分)1. VB中的________关键字用于声明一个常量。
答案:Const2. VB中,________关键字用于声明一个对象变量。
答案:Dim3. VB中,________关键字用于声明一个函数。
VB程序设计教程(高等教育出版社)第4-6章

25
Select Case语句例
将例4.7 改用 Select Case 语句实现: Select Case ch Case "a" To "z","A" To "Z" MsgBox( ch + "是字母字符") Case "0" To "9" MsgBox (ch +"是数字字符") Case Else MsgBox( ch + "是其他字符") End Select 多分支结构,用Select Case语句比If…Then…ElseIf 语句直观,程序可读性强。但不是所有的多分支结构 均可用Select Case语句代替If…Then…ElseIf语句。
3
4 5 16 32 48 64 0 56 512
是、否、取消按钮
是、否按钮 重试、取消按钮 关键信息图标 询问信息图标 警告信息图标 信息图标 第1个按钮为默认 第2个按钮为默认 第3个按钮为默认 13
图标 类型 默认 按钮
VBQuestion VBExclamation VBInformation VBDefaultButton1 VBDefaultButton2 VBDefaultButton3
'左边是表达式(函数)
„ 左边是常量 „ 左边是表达式
本章目录
8
赋值语句的两个常见形式
(1)累加 sum=sum+x (2)计数 n=n+1
VB程序设计教程(第3版)
9
4.1.2 数据的输入和输出
vb程序设计第三版-第5章
5.3.2二维数组的引用 引用形式:数组名(下标1,下标2) 说明:引用时的每一位下标可以是整型常量、变量或表 达式,但其范围小于数组声明时该维下标的上界, 大于等于数组声明时该维下标的下界,不得越界。 5.3.3 二维数组的基本操作
计算机科学与工程学院
《VB程序设计》
1.输入数组元素的值 For i=1 to n for j=1 to m a(i,j)=1 next j Next I 2.输出数组元素的值 For i=1 to n for j=1 to m print a(i,j); next j Next I
计算机科学与工程学院
《VB程序设计》
Private Sub Form_click() Dim a(1 To 10) As Integer For i = 1 To 10 Do x = Int(Rnd * 20) yes= 0 For j = 1 To i - 1 If x = a(j) Then yes = 1: Exit For Next j Loop While yes = 1 a(i) = x Next i Print "未排序前10个数的顺序 是:" For i = 1 To 10 Print a(i); Next i
计算机科学与工程学院
《VB程序设计》
1.统计输入10个学生的成绩,并按每行5个数据在窗体上显示,求平均成绩和高出平均成绩的人数。
Private Sub Form_Click() Dim a(1 To 10) As Integer Dim i%, sum%, aver#, count% sum = 0 For i = 1 To 10 a(i) = Val(InputBox("请输 入第" & i & "学生成绩:")) Next I For i = 1 To 10 Print a(i); If i Mod 5 = 0 Then Print ' 若本行已输出5个数,则换行 sum = sum + a(i) Next i aver = sum / 10 count = 0 For i = 1 To 10 If a(i) > aver Then count = count + 1 Next i Print "平均成绩为:"; aver, "高于平均成绩的人数为 :"; count End Sub
VB第五章理论课件
这个程序的执行过程是:
S=0 For i=1 to 8 step 3 S=s+3 Next i Print s
第三次循环后:
S=0
i=1
判断i>8?
否
10>8?
是
S=9 i=10 运行结果:9
S=s+3 i=i+3
Print s
S=0 For i=1 to 8 step 3 S=s+3 Next i Print s
Print ―************‖
Print ―************‖ End Sub
循环结构基本概念
循环结构: 指在程序设计中,将一些重复执行的程序块放入一 定的语句中,使计算机自动地重复执行这些程序块。 特点:简化程序、节约内存、提高效率。 VB 提供了三种不同风格的循环语句 :
1、 For …Next 循环(指定循环次数,使用计数器重复运行语句。) 2、While……Wend 循环 3 、 Do …… Loop循环
具体执行过程为: 判断次数 1 2 3
循环变量i的值
进行判断 i < 10 i < 10 i < 10
执行 循环体 循环体 循环体
1 3 5
4 5
6
7 9
11
i < 10 i < 10
i > 10
循环体 循环体
Next后面的语句
在第6次进行判断时,循环变量i的值为11,超过
了终值10,所以结束循环,执行Next后面的语句。
Next I (循环次数4)
2.For…Next语句 执行过程 循环变量=初值 Y
循环变量是否超过终值
N
执行循环体
visual basic (vb)第5章_2(循环语句)解析
Visual Basic 程序设计
1 为什么要使用循环结构? 使用循环结构,上述程序可以修改为: Private Sub Form_Click() For I = 1 To 6 Print "**********" Next I End Sub 与前面的程序相比,循环结构使得程序更加 清晰,功能更加强大,修改也更加方便。
VB 程序设计基础课件 Visual Basic 程序设计
例题3 计算S=1!+2!+……+20!
Private Dim Dim S = For Sub Form_Click() S As Single, temp As Single I As Integer, J As Integer 0 I = 1 To 20 temp = 1 For J = 1 To I temp = temp * J Next J S = S + temp Next I Print "1!+2!+……20!=", S End Sub
例题5 输出乘法口诀—2
Private Sub form_Click() For I = 1 To 9 For J = 1 To I Print I;"*"; J; "="; I * J; ' 不换行 Next J Print ' 换行 Next I End Sub
Visual Basic 程序设计
例6 输出图形
Visual Basic 程序设计
Private Sub picture1_Click() Picture1.Cls ' 清除图片框 n = Val(InputBox("请输入行数")) For i = 1 To n Picture1.Print Tab(n + 1 - i); ' 控制打印起点 For j = 1 To 2 * i - 1 Picture1.Print "*"; Next j Picture1.Print For j = 1 To n - i Next i Picture1.Print Spc(1); End Sub
vb第5章循环结构程序设计
输入m,n
大数放m,小数放n 除数d=1
当d<=n 如果m、n都能 被d整除, 则max ← d d=d+1 输出max
求两个正整数的最大公约数。
分析:求最大公约数可以用
[例5.4]输入两个正整数,递减法求最 大公约数。 输入m,n
大数放m,小数放n 除数d=n
当d>=1
如果m、n都能被d 整除,则max ← d, 退出循环
输入m,n 大数放m,小数放n 求得m对n的余数r 当r<>0 m←n n ←r 求m对n的余数r 输出n
求两个正整数的最大公约数。
分析:求最大公约数可以用
[例5.4]输入两个正整数,递增法求最 大公约数。 输入m,n
大数放m,小数放n 除数d=1
当d<=n 如果m、n都能 被d整除, 则max ← d d=d+1 输出max
步长为正时,超过—循环变量大于终值使循环结束 步长为负时,超过—循环变量小于终值使循环结束 5、一般在循环体中不对循环变量重新赋值, 否则影响循环的次数控制。
步长为负时
0
1.5
3
初值送循环变量
For I = 3 To 0 Step -1.5 Print I Next Print "After For :"; I For I = 0 To 3 Step -1.5 Print I Next Print "After For :"; I
说明: (l)条件为True ,(循环体语句列)将被重复执行
作业:
例题 5-1、5-4 ~ 5-6 选做5-2、5-3 5.6习题
xt5-1 ~xt5-4 选做xt5-5
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
或地址)传送给Sub或Function过程与其对应的形参变量。
实参可由常量、表达式、有效的变量名、数组名(后加左、 右括号,如A( ))组成,实参表中各参数用逗号分隔。
5.3.2 参数传递(虚实结合)
参数传递指主调过程的实参(调用时已有确定值和内存
地址的参数)传递给被调过程的形参,参数的传递有两种方 式:按值传递、按地址传递。形参前加“ByVal”关键字的 是按值传递,缺省或加“ByRef”关键字的为按地址传递。
5.2.1 函数过程(Function过程)的定义
[Public|Private][Static]Function 函数名([<参数 列表>])[As<类型>] <局部变量或常数定义> <语句块> [函数名=返回值] 函数体 [Exit Function] <语句块> [函数名=返回值] End Function
程序调用执行过程:
值传递的执行过程如下图:
通过地址传递数据的执行过程
数据传递的几点说明: 1.参数的数据类型 2.按值传递参数 形参是实参的一个副本 3.按地址传递参数 形参实参公用内存单元 4.子过程执行一系列操作,函数过程返回一个值 注意:如果实参是常量(系统常量、符号常量)或者表达式, 则无论定义时使用值传递还是地址传递,都是按值传递将 常量或者表达式的计算值传递给形参。
子过程的定义形式如下: [Public|Private][Static] Sub 子过程名([形参表]) <局部变量或常数定义> <语句组> [Exit Sub] <语句组> End Sub 说明:
(1)子过程名:命名规则与变量名规则相同。子过程名不 返回值,而是通过形参与实参的传递得到结果,调用时可 返回多个值。
传址与传值
传址: 形参得到的是实参的地址,当形参值的改变同
时也改变实参的值。 传值: 形参得到的是实参的值,形参值的改变不会影 响实参的值。
例 Sub Swap1(ByVal x%, ByVal y%) Sub Swap2(x%, y%) Dim Temp% Dim Temp% Temp = x: x = y: y = Temp Temp = x: x = y: y = Temp End Sub End Sub
5.1 Sub过程
在VB中,的Sub子过程分为:事件过程和通用过程
5.1.1 事件过程
(1)窗体事件的语法 Private Sub Form_事件名(参数列表) <语句组> End Sub (2)控件事件的语法 Private Sub 控件名_事件名(参数列表) <语句组> End Sub
5.1.2 通用过程(Sub过程)的定义
Private Sub Swap(x%,y%) Dim temp% Temp=X X=Y
Y=Temp
End Sub
End Sub
例:我们创建这样一个应用程序,它包含一个按钮,当用户在 窗体上单击时,计算机的喇叭会发出3声“嘟”的声音;如果 用户在按钮上单击,喇叭响五下.
我们定义一个控制计算机操作的过程,命名为BeepSound, 喇叭的次数作为参数有调入者传入,参数命名为n.
5.3.4
数组作过程的参数
Visual Basic允许把数组作为实参传送到过程中。数组作 参数是通过传地址方式传送。在传送数组时,除遵守参数 传送的一般规则外,还应注意以下几点:
1.把一个数组的全部元素传送给一个过程,应将数组名分 别写入形参列表中,并略去数组的上下界,但括号不能省 略。 Private Sub Sort( a() As single)
5.1.4 过程的调用
1 子过程的调用
子过程名 [参数列表]
或 Call 子过程名(参数列表)
说明: (1)参数列表称为实参或实元,它必须与形参保持个数相 同,位置与类型一一对应。 (2)调用时把实参值传递给对应的形参。其中值传递(形 参前有ByVal说明)时实参的值不随形参的值变化而改变。 而地址传递时实参的值随形参值的改变而改变。
5.4
过程的嵌套和递归调用
5.4.1 过程的嵌套
在程序中调用一子过程,而在子过程中又调用另外的子过 程,这种程序结构称为过程的嵌套。过程的嵌套调用执行过 程如下图:
5.4.2 过程的递归调用
用自身的结构来描述自身,称递归。例如,对阶乘的定义:
n! n (n 1)! (n 1)! (n 1) (n 2)!
(2)形式参数列表:形式参数通常简称“形参”,仅表示 形参的类型、个数、位置,定义时是无值的,只有在 过程被调用时,虚实参结合后才获得相应的值。 (3)过程可以无形式参数,但括号不能省。 (4)参数的定义形式: [ByVal|ByRef]变量名[( )][As 类型][,…], ByVal表示当该过程被调用时,参数是按值传递的; 缺省或ByRef表示当该过程被调用时,参数是按地址 传递的。
a(7)
b(8)
a(8)
参数为数组时虚实结合示意图
例:编写判断一个整数是不是素数写函数过程。如果给定的整 数是素数,则返回逻辑值True,否则返回False
Private Function Prime(n As Integer) As Boolean Dim k%,Yes As Boolean Yes=True For k=2 to n\2 IF n mod k =0 then Yes=False : Exit For Next k Prime=Yes ‘ 给函数名赋值,作为函的返回值 End Function
Private Sub CmdOK_Click() a% = 10: b% = 20: Swap1 a, b Print "A1="; a, "B1="; b a = 10: b = 20: Swap2 a, b Print "A2="; a, "B2="; b End Sub '传地址 „传 值
我们可以通过此图来了解这一操作: 调用 返回 通用过程 BeepSound 调用 事件过程 Form_Click
事件过程 Command1_Click
返回
由上可知,子过程分为两种:通用过程和事件过程
5.2 Function过程
Visual Basic函数分为内部函数和外部函数,外部函数 是用户根据需要用Function关键字定义的函数过程,与子 过程不同的是函数过程将返回一个值 。
过程BeepSound如下:
Sub BeepSound(n As Interger) Dim i As Integer, j As Long For i= 1 to n Beep For j= 0 to 1000000 Next Next End Sub
我们可以用 Call BeepSound(5) 或BeepSound 5 调用 BeepSound,所以我们可以在窗体Form1和按钮 Command1的Click事件过程中调用BeepSound过程 (如下:) Private Sub Command1_click( ) Call BeepSound(5) End Sub Private Sub Form_Click() BeepSound 3 End Sub
Visual Basic允许在一个Sub子过程和Function过程的定 义内部调用自己,即递归Sub子过程和递归Function函数。
例
编求阶乘fac(n)=n! 的递归函数
Private Function fac(n As Integer) As Integer
5.2.2 函数的调用
调用形式如下:
变量=函数名(实参列表)
说明:
在调用时实参和形参的数据类型、顺序、个数
必须匹配。函数调用只能出现在表达式中,其功 能是求得函数的返回值。
5.3 过程之间参数的传递
Visual Basic中不同模块(过程)之间数据的传递有两种 方式: 通过过程调用实参与形参的结合实现;
调用时形参数组a和实参数组b虚实结合,共用一段内存单元,
如下所示。因此在Sort()过程中改变数组a的各元素值,也就 相当于改变了实参数组b中对应的元素的值,当调用结束时, 形参数组a成为无定义。
b(1)
a(1)
b(2)
a(2)
b(3)
a(3)
b(4)a(4)Fra bibliotekb(5)
a(5)
b(6)
a(6)
b(7)
(3)当参数是数组时,形参与实参在参数声明时应省略其维数, 但括号不能省。 (4)调用子过程的形式有两种,用Call关键字时,实参必须加 圆括号括起,反之则实参之间用“,”分隔。
例:调用上面定义的Sawp子过程的形式:
Swap a,b
Call Swap(a,b)
过程调用的执行过程:
Private Sub CmdOK() …… Call Swap(a,b) …… Swap a,b
例:编一个交换两个整型变量值的子过程。 Private Sub Swap( X As Integer, Y As Integer) Dim temp As Integer Temp=X : X=Y : Y=Temp End Sub
5.1.3 子过程的建立
通过 “工具”菜单中的“添加过程”命令,出现“添加过 程”对话框(见图),选择过程类型(子过程、函数、属性、 事件)及作用范围(公有的Public、私有的Private),单击 确定后得到一个过程或函数定义的结构框架(模板),如: Public Sub Sort( ) …… End Sub
说明: (1)函数名:命名规则与变量名规则相同。但不能与系统 的内部函数或其它通用子过程同名,也不能与已定义的全 局变量和本模块中模块级变量同名。 (2)在函数体内,函数名可以当变量使用,函数的返回值 就是通过对函数名的赋值语句来实现的,在函数过程中至 少要对函数名赋值一次。 (3)AS类型:是指函数返回值的类型,若省略,则函数返 回变体类型值(Variant)。 (4)Exit Function:表示退出函数过程,常常是与选择结 构(If或Select Case语句)联用,即当满足一定条件时, 退出函数过程。 (5)形参数列表:形参的定义与子过程完全相同。