第二章 Visual Basic语言基础
第二章 Visual Basic语言基础 2.1 Visual Basic 的基本数据类型 2.2 常量与变量 2.8 数组 2.9 程序举例
2.1 Visual Basic 的基本数据类型 定义: 1)数据:描述客观事物的数、字符以及所有能被输入到计算机程序加工处理的符号集合。 2)数据类型:指数据在计算机内部的表述和存储形式 VB有11种基本数据类型,一种用户自定义数据类型。
2.1.1 用于保存数值的数据类型 VB有6种 整型(Integer) 长整型(Long) 单精度型(Single) 双精度型(Double) 字节型(Byte) 货币型(Currency) 1、整型数据 整型:占两个字节 表示方式:±n[%] 长整型:占四个字节 表示方式: ±n& 2、浮点型数据 单精度(Single):指数E 精度7位 表示方式:! 双精度(Double):指数D 精度16位 表示方式:#
3、货币型 定点数或整数,用于计算货币的数量 最多保留小数点右边4位,左边15位。 4、字节型 用于存储一个字节的无符号整数。 取值范围:0~255
2.1.2 日期型数据(Date) 任何可以辨别的文本日期都可以赋值给日期数据变量 表示方式: 日期型数据前后必须添加符号“#”
2.1.3 字符串型数据(String) 用于表示连续的字符序列,专用于存放文字信息。用半角的” ”来界定。 定长字符串型:能包含的最大字符数是固定 的,并且可以指定。 所占内存:字符串本身的长度 变长字符串型:能包含的字符个数是可变的。 所占内存:10个字节+字符长度
2.1.4 逻辑型数据(Boolean) 用于表示逻辑量,占用两个字节。 取值: True(真) -1(整型数据) False(假) 0 (整型数据) 若其他类型数据转换成逻辑数据时: 非0数据 True 0 False
2.1.5 对象型数据(Object) 作用:可以被用来引用应用程序所能使识别的任何实际对象。 大小:占4个字节
2.1.6 变体型数据(Variant) 作用:是VB提供的一种特殊数据类型,是所有未声明变量的默认数据类型。
2.2 常量与变量 2.2.1 常量 定义:指在程序运行过程中其值始终保持不变的量。 分为: 直接常量 符号常量 系统常量
1、直接常量 简称常量。 又分为: 数值常量:数值、小数点、正负号 字符串常量:用半角” ”界定 日期常量:用# #界定 布尔常量:T F 无界定符号 2、符号常量 格式:Const 符号常量名 [as 数据类型]=表达式
3、系统常量 由VB提供的具有专门名称和作用的常量。 2.2.2 变量 1、定义:指在程序运行过程中可以改变其值的量。 2、特性: 名字、数据类型、作用范围、生存周期 3、变量形式: 属性变量、内存变量 1)变量命名规则 2)声明内存变量的形式: 显式声明、隐式声明
2.8 数 组 2.8.1 概 述 数组的概念:数组并不是一种数据类型,而是一组相同类型数据的集合。用一个统一的名字(数组名)代表逻辑上相关的一批数据,每个元素用下标变量来区分;下标变量代表元素在数组中的位置。 其表示形式: A(1),A(10) X(1,1), X1(1,10), X(2,10) Y(0,0,0), Y(1,2,5)
Visual Basic中的数组,按不同的方式可分为以下几类: 按数组的大小(元素个数)是否可以改变来分为:定长数组、动态(可变长)数组。 按元素的数据类型可分为:数值型数组、字符串数组、日期型数组、变体数组等。 按数组的维数可分为:一维数组、二维数组、多维数组。 对象数组:菜单对象数组、控件数组。
2.8.2 一维数组 形式: 2.8.2.1 一维数组的声明 (无隐式声明) Dim 数组名([<下界>to]<上界>)[As <数据类型>] 或: Dim 数组名[<数据类型符>]([<下界>to]<上界>) 例:Dim a(1 to 10) As Integer ‘ 声明了a数组有10个元素 与上面声明等价形式: Dim a%(1 to 10) 数组元数的数据类型 1是下标的下界 10是下标的上界
说明: 1.数组名的命名规则与变量的命名相同。 2.数组的元素个数:上界-下界+1。 3.缺省<下界>为0,若希望下标从1开始,可在模块的通用部分使用Option Base语句将设为1。其使用格式是: Option Base 0|1 ' 后面的参数只能取0或1 例如: Option Base 1 ' 将数组声明中缺省<下界>下标设为1 4.<下界>和<上界>不能使用变量,必须是常量,常量可以是直接常量、符号常量,一般是整型常量。
5.如果省略As子句,则数组的类型为变体类型。 6.数组中各元素在内存占一片连续的存储空间,一维数组在内存中存放的顺序是下标大小的顺序,如图5-1所示:
2.8.2.2 一维数组元素的引用 数组必须先定义后使用 使用形式: 数组名(下标) 其中:下标可以是整型变量、常量或表达式。 使用形式: 数组名(下标) 其中:下标可以是整型变量、常量或表达式。 例如: 设有下面的数组B(10) As Integer 则下面的语句都是正确的。 A(1)=A(2)+B(1)+5 ' 取数组元素运算 A(i)=B(i) ' 下标使用变量 B(i+1)=A(i+2) ' 下标使用表达式 引用不能下标越界,P113例
2.8.2.3 一维数组的基本操作 1. 可通过循环给数组元素的初值 For i = 1 To 10 'A数组的每个元素值为1 A(i)=1 Next i 2. 数组的输入 For i = 1 To 4 For j = 1 To 5 sc(i, j) = InputBox("输入sc(" &i & "," & j & ") 的值") Next j Next I
3. 数组的输出 输出如下图所示的下三角数据 Dim sc(5,5) As Integer,i%,j% For i = 1 To 5 For j = 1 To i sc(i, j) = i * 5 + j Print sc(i, j); " "; Next j Print ' 换行 Next I
4. 求数组中最大元素及所在下标 Dim Max As Integer,iMax As Integer Max=A(1):iMax=1 For i = 2 To 10 If A(i)>Max Then Max=A(i) iMax=i End If Next I 5. 将数组元素倒置 For i =1 To 10\2 t=A(i) A(i)=A(10-i+1) A(10-i+1)=t Next I 例5.1
2.8.2.4 一维数组的应用 一、分类统计 例5.2 在例5.1中如果还要统计0~9,10~19,20~20,….80~89,90~99分数段及100分的学生人。 则可另用数组bn来存各分数段的人数,并用bn(0)存0~9分的人数,bn(1)存10~19分的人数,…bn(9)存90~99分的人数,bn(10)存100分的人数。
二、 排序问题 1.选择法排序 算法思想: 1)对有n个数的序列(存放在数组a(n)中),从中选出最小(升序)或最大(降序)的数,与第1个数交换位置; 2)除第1 个数外,其余n-1个数中选最小或最大的数,与第2个数交换位置; 3)依次类推,选择了n-1次后,这个数列已按升序排列。
选择法排序(升序)的VB程序: For i = 1 To n - 1 p = i For j = i + 1 To n If a(p) > a(j) Then p = j Next j temp = a(i) a(i) = a(p) a(p) = temp Next i
2.冒泡法排序(递增) 算法思想:(将相邻两个数比较,小的调到前头) 1)有n个数(存放在数组a(n)中),第一趟将每相邻两个数比较,小的调到前头,经n-1次两两相邻比较后,最大的数已“沉底”,放在最后一个位置,小数上升“浮起”; 2)第二趟对余下的n-1个数(最大的数已“沉底”)按上法比较,经n-2次两两相邻比较后得次大的数; 3)依次类推,n个数共进行n-1趟比较,在第j 趟中要进行n-j次两两比较。
冒泡法排序(升序)的VB程序: For i = 1 To n - 1 For j = 1 To n-i If a(j) > a(j+1) Then temp=a(j) a(j)=a(j+1) a(j+1)=temp End if Next j Next i
例5.3 用随机函数产生50个[10,100 )的随机整数,并按照由小到大的顺序打印出来。 程序界面如下:
2.8.3 二维数组及多维数组 2.8.3.1 二维数组的声明 声明格式如下: 其中的参数与一维数组完全相同。 2.8.3 二维数组及多维数组 2.8.3.1 二维数组的声明 声明格式如下: Dim 数组名([<下界>] to <上界>,[<下界> to ]<上界>) [As <数据类型>] 其中的参数与一维数组完全相同。 例如:Dim a(2,3) As Single 二维数组在内存的存放顺序是“先行后列”。例如数组a的各元素在内存中的存放顺序是: a(0,0)→a(0,1)→a(0,2)→a(0,3)→a(1,0)→a(1,1)→a(1,2)→ a(1,3)→a(2,0)→(2,1)→a(2,2)→a(2,3)
2.8.3.2 二维数组的引用 2.8.3.3 二维数组的基本操作 引用形式: 数组名(下标1,下标2) 例如: a(1,2)=10 引用形式: 数组名(下标1,下标2) 例如: a(1,2)=10 a(i+2,j)=a(2,3)*2 在程序中常常通过二重循环来操作使用二维数组元素。 2.8.3.3 二维数组的基本操作 二维数组数据的输入 2. 求最大元素及其所在的行和列 3. 计算两矩阵相乘 4. 矩阵的转置
2.8.3.5 多维数组的声明和引用 定义多维数组的格式如下: 2.8.3.5 多维数组的声明和引用 定义多维数组的格式如下: Dim 数组名([<下界>] to <上界>,[<下界> to ]<上界>,……) [As <数据类型>] 例如: Dim a(5,5,5) As Integer 声明a是三维数组 Dim b(2,6,10,5) As Integer ' 声明b是四维数组
Preserve参数:保留数组中原来的数据 2.8.4 动态数组 动态数组:在声明时未给出数组的大小。定长数组是在程序编译时分配存储空间,而动态数组是在程序执行时分配存储空间。 2.8.4.1 动态数组的建立及使用 建立动态数组包括声明和大小说明两步: 1.在使用Dim、Private或Public语句声明括号内为空的数组。 格式:Dim | Private|Public 数组名()As 数据类型 例:Dim a() As Integer 2.在过程中用ReDim语句指明该数组的大小。 格式:ReDim [Preserve] 数组名(下标1[,下标2…]) 例:Redim A(10) Redim Preserve A(20) Preserve参数:保留数组中原来的数据
× 说明: (1)ReDim语句是一个可执行语句,只能出现在过程中,并且可以多次使用,改变数组的维数和大小。 例: Private Sub Form_Click() Dim N As Integer N=Val(InputBox(“输入N=?”)) Dim a(N) As Integer ……. End sub ×
例5.5 (3)在过程中可以多次使用ReDim来改变数组的大小,也可 改变数组的维数。 例:ReDim x(10) ReDim x(20) Print x(20) ReDim x(20, 5) x(20, 5) = 10 Print x(20, 5) (4)每次使用ReDim语句都会使原来数组中值丢失,可以在ReDim后加Preserve 参数来保留数组中的数据。但此时 只能改变最后一维的大小。 例5.5
2.8.4.2 与数组操作有关的几个函数 Aarry函数 Aarry函数可方便地对数组整体赋值,但它只能给声明Variant的变量或仅由括号括起的动态数组赋值。赋值后的数组大小由赋值的个数决定。 例如,要将1,2,3,4,5,6,7 这些值赋值给数组a,可使用下面的方法赋值。 Dim a() A=array(1,2,3,4,5,6,7) Dim a
2 求数组的上界Ubound( )函数、 下界 Lbound( )函数 分别用来确定数组某一维的上界和下界值。 使用形式如下: UBound(<数组名>[, <N>]) LBound(<数组名> [, <N>]) 其中: <数组名>:必需的。数组变量的名称,遵循标准变量命名约定。 <N> :可选的;一般是整型常量或变量。指定返回哪一维的上界。1 表示第一维,2 表示第二维,如此等等。如果省略默认是1。