VB电子教材02.docx
- 文档编号:5626557
- 上传时间:2022-12-29
- 格式:DOCX
- 页数:72
- 大小:318.93KB
VB电子教材02.docx
《VB电子教材02.docx》由会员分享,可在线阅读,更多相关《VB电子教材02.docx(72页珍藏版)》请在冰豆网上搜索。
VB电子教材02
第2章程序设计基础
通过上一章的学习,使我们对VB有了初步的认识。
读者可以参照例题,编写一些简单的应用程序。
完成应用程序的界面设计后,用户就需要编写事件过程代码,用来对用户事件和系统事件作出响应。
只有界面设计合理、过程代码编写正确的程序,才能实现具体的功能。
因此,掌握VB6.0的语法及其使用方法是开发应用程序的基础和关键。
VB包含数百条语句、函数和方法,其中很多与WindowsGUI有直接关系。
程序员可用其实现其他Windows编程语言的功能,初学者可用其编制简单的应用程序。
2.1数据类型、常量与变量
数据是程序的必要组成部分,也是程序处理的对象。
VB预定义了丰富的数据类型,不同数据类型体现了不同数据结构的特点,如表2-1所示。
表2-1VB6.0的常用数据类型
类型
名称
字节数
取值范围和有效位数
整型
Integer
2
精确表示-32768~32767范围内的整数
长整型
Long
4
精确表示-2147483648~2147483647范围内的整数
单精度浮点型
Single
4
-3.402823×1038~-1.401298×10-45
1.401298×10-45~3.402823×10387位有效位数
双精度浮点型
Double
8
-1.79769313486232×10308~-4.94065645841247×10-324
4.94065645841247×10-324~1.79769313486232×10308
15位有效位数
货币型
Currency
8
-922337203685477.5808~922337203685477.5807
字节型
Byte
1
0~255
变长字符串
String
每个字符占1个字节,每个字符串最多可存放约20亿个字符
定长字符串
String*size
size是小于65535的无符号整常数,为字符串长度。
逻辑型
Boolean
2
True或False
日期型
Date
8
100.1.1~9999.12.31
对象型
Object
4
任何对象的引用
变体型
Variant
若存放数值类型数据,占16个字节,最大可达Double的范围。
若存放字符串类型数据,字符串长度与变长字符串相同。
表2-1中,“名称”用以标识变量的类型,“字节数”表示该类型数据所占内存空间的大小。
在2.1.2节,我们将介绍如何声明变量的类型。
了解不同类型变量的取值范围和有效位数,便于我们在设计时根据实际需要正确地选择数据类型。
如:
声明变量a用于存放某个同学一学期各门功课的总分(一般不超过32767),可以声明“DimaAsInteger”,VB处理系统会为变量a分配2个字节的存储空间。
声明变量b用于存放某大学所有职工的工资总和(一般不小于32767),则应声明“DimaAsLong”,VB处理系统会为变量b分配4个字节的存储空间。
又如:
计算圆柱体的体积,并存入变量v,声明v为Single类型,半径和圆周率也采用Single类型,则结果v具有7位有效数字;如果要求计算结果具有更高的精确度,可以考虑采用Double类型。
不同类型的数值数据,其数值范围和有效位数的差别,或是由于所占用的存储空间大小不同、或是由于存储格式不同。
如:
VB用1个字节(8个2进制位)存储Byte类型的数据,其最大值为(11111111)2,因此该类型数据的最大值为255。
又如,VB用2个字节(16个2进制位)存储Integer类型的数据,首位为符号位(正数为0、负数为1),因此其最大值为(0111111111111111)2,即32767。
至此,读者应可理解,为什么Long类型数据的数值范围超过了Integer类型的数据。
Single类型数据占用4个字节内存,第一个二进制位表示该数的符号。
因为任何一个实数都可以表示为±2±J×Q的形式,VB将Single类型数据的后31位分成2段:
一段表示J的大小与符号,一段表示Q的数值。
Double类型数据比Single类型数据多出32位:
1位增加在表示J的段中,31位增加在表示Q的段中,因此Double类型数据比Single类型具有更大的数值范围、更多的有效位数。
特别要指出的是,VB的Single、Double类型数据,表示各自数值范围内的数据是有误差的。
读者可以做一个尝试:
将10进制数0.6转换为2进制数,会发现用2进制不可以将其精确表示。
事实上,计算机不可能用无限位数来表示一个实数,误差就是这样产生的。
2.1.1常量
常量是直接写在程序中的数据,常量的类型由它们的书写格式决定。
数值常量
VB中的整型数、长整型数、单精度浮点数、双精度浮点数、货币型数、字节型数又统称为数值型数据,在使用数值型数据时,应注意以下几点:
如果数据包含小数,则应使用Single、Double或Currency类型。
其中,Single类型的有效数字为7位,Double类型的有效数字为15位,Currency类型支持15位整数和四位小数,适用于货币计算。
在VB中,数值类型数据都有一个有效的取值范围,程序中的数如果超出这个范围,就会出现“溢出”(Overflow)错误。
VB中的常量一般采用十进制数,但有时也使用十六进制数(数值前加前缀&h)或八进制数(数值前加前缀&o)。
如:
赋值语句“d=&h1a2”的作用是,将418(10进制)送入变量d所在的存储单元。
又如:
赋值语句“d=&o216”的作用是,将142(10进制)送入变量d所在的存储单元。
字符串常量
字符串常量是用双引号括起来的一串字符,格式为:
"h1h2h3...hn"。
每个字符占1个字节;可以是任何合法字符,如:
"VB"、"123"、chr$(13)(回车符)、"无实数解",等等。
逻辑常量
逻辑常量只有两个值:
真(True)和假(False)。
当把数值常量转换为Boolean时,0为False,非0值为True;当把Boolean常量转换为数值时,False转换为0,True转换为-1。
日期常量
日期常量用来表示日期和时间,VB可以表示多种格式的日期和时间,输出格式由Windows设置的格式决定。
日期数据用两个“#”把表示日期和时间的值括起来,如:
#08/18/2001#、#08/18/200108:
10:
38AM#,等等。
符号常量
当程序中多次出现某个数据时,为便于程序修改和阅读,可以给它赋予一个名字,以后用到这个值时就用名字代表,这个名字就称为符号常量。
符号常量的定义格式如下:
Const<符号常量名>=<常量>
可以在窗体模块的任何地方(通用对象声明部分或事件过程中)定义。
例2-1符号常量的作用域及应用。
Constpi=3.14159'在通用对象声明部分声明数值符号常量
PrivateSubCommand1_Click()
Constpi=3.14
'事件过程与通用对象声明部分声明的符号常量同名,则事件过程内部引用的是内部
'声明的值,下列Print语句的输出结果是3.14而不是3.14159。
Printpi
EndSub
PrivateSubCommand2_Click()
'事件过程中未声明pi,此处pi是通用对象声明部分所声明的pi,输出3.14159。
Printpi
EndSub
2.1.2变量
常量的类型由书写格式决定,而变量的类型由类型声明决定。
变量的命名规则
变量名由首字符为英文字母、不超过255个字符的字母、数字、下划线符组成。
如Sum、a2、x_1都是VB的变量名。
变量命名的几点说明
不能使用VB的关键字作为变量名。
关键字是指VB系统中已经定义的词,如语句、函数、运算符的名称等,如Print、If等都不能用作变量名。
变量名不能与过程名或符号常量名相同。
VB不区分变量名的大小写。
即大小写是一样的,如X1与x1是同一变量。
变量取名尽量做到“见名知义”,以提高程序的可读性。
建议根据变量类型确定变量名的首字母。
这是一个小写字母,称为变量的数据类型代码标识符。
如:
y:
字节型n:
整型l:
长整型g:
单精度浮点型
d:
双精度浮点型s:
字符串型t:
日期型
这里关于变量名首字符如何确定,提出的只是建议,而不是规定。
根据变量名的首字母并不能确定变量的类型,譬如,仅仅从变量名为“gx1”不能确定变量gx1为单精度浮点型,变量的类型只能根据变量声明来确定。
变量声明
在程序中用到的变量,一般应声明其类型,由此决定变量的存取格式、取值范围、有效数位等。
而声明变量类型的方法有两种:
隐含声明和强制声明。
隐含声明
在变量名的后面加上特定字符(后缀字符),用于规定变量类型的方法称为隐含声明。
由变量后缀字符决定变量类型的具体规定如下:
①变量后缀字符为“%”,隐含声明该变量类型为整型。
②变量后缀字符为“&”,隐含声明该变量类型为长整型。
③变量后缀字符为“!
”,隐含声明该变量类型为单精度浮点型。
④变量后缀字符为“#”,隐含声明该变量类型为双精度浮点型。
⑤变量后缀字符为“$”,隐含声明该变量类型为字符串型。
强制声明
用Dim语句(类型强制声明语句)可以强制声明只能在本窗体中能使用的变量类型。
DimybAsByte,ycAsByte,nkAsInteger,kAsLong
DimgxAsSingle,dyAsDouble,snameAsString*10
以上语句声明yb、yc为字节变量,声明nk为整型变量,声明k为长整型变量,声明gx为单精度浮点型变量,声明dy为双精度浮点型变量,声明sname为最多10个字符的定长字符串型变量。
注意:
不可以将语句“DimmAsInteger,nAsInteger"写作“Dimm,nAsInteger",后者实际上将m声明为变体类型,增加了变量m的内存开销。
若强制声明了变量类型,则不可再为变量名加后缀字符。
一个变量如没有声明,则VB将其作为变体类型变量。
好的程序设计风格是声明每一个变量的类型,一方面可以提高程序的可读性,另一方面,可避免采用变体数值类型数据,以减少程序运行时的内存开销。
变量的初始值
在程序中声明了变量以后,VB自动将数值类型的变量赋初值0,变长字符串被初始化为零长度的字符串(""),定长字符串则用空格填充,而逻辑型的变量初始化为False。
同符号常量一样,可以在窗体模块的任何地方(通用对象声明部分或事件过程中)定义变量。
例2-2变量的作用域及应用。
DimsMystringasString'在通用对象声明部分声明字符串变量
PrivateSubForm_Load()
sMystring="欢迎使用VB6.0"
EndSub
PrivateSubForm_Click()
PrintsMystring
EndSub
程序运行时,单击窗体,在窗体中显示欢迎使用VB6.0。
如果不在通用对象声明部分声明字符串变量sMystring,或将其放在Form_Click或Form_Load事件过程中声明,则程序运行后什么也显示不出来。
2.2Print语句、赋值语句
2.2.1语句、命令的语法描述规则
为便于解释语句、方法和函数,本书在各语句、方法和函数的语法格式和功能说明中采用统一的符号约定。
DIM<变量名>[AS<数据类型>][,<变量名>[AS<数据类型>]...]
各语法描述符号及它们的含义如下:
·“<>”为必选参数项,尖括号中的中文提示说明,必须由使用者根据问题的需要提供具体的参数。
如果缺少必选参数,则发生语法错误。
·“[]”为可选参数项,方括号中的项目由使用者根据具体问题决定选与不选。
如省略,则为缺省值。
·“{}”和“|”,包含多中取一的各项,竖线分隔多个选择项,必须选择其中之一。
·“...”表示同类项目的重复出现。
注意:
在书写具体的命令时,不能出现这些语法描述符号。
2.2.2Print语句
使用Print语句可以在窗体上输出表达式的值,并可在其他图形对象或打印机上输出信息。
该语句格式为:
[<对象名称>.]Print[<输出项>[[{,|;}][<输出项>]]...]
其中,<对象名称>可以是窗体(Form)、图片框(PictureBox)或打印机(Printer)。
·输出项之间的分隔符“,”为分段格式,“;”为紧凑格式。
·语句末尾为分隔符“,”或“;”,则该语句最后的输出位置为下一条print语句输出的起始位置。
·若省略输出项,则输出一空行。
VB将一行分为若干段,每14列为1段,若两个输出项之间用逗号间隔,则第2个数据项的输出位置从下一段开始;若两个输出项之间用分号间隔,则第2个数据以“紧凑”格式输出。
例2-3Print语句的输出格式及应用。
PrivateSubForm_Click()
Print123,888,-456,3.14
Print123;888;-456;3.14
Print"123";"888";"abc",True;
Print123,888;-456;3.14
Print123,888,-456,3.14
EndSub
运行该程序时,在窗体上的输出结果如图2-1所示。
图2-1例2-3的输出结果
从例2-3的输出结果可知:
·无论是分段格式还是紧凑格式,数值数据输出后都会尾随一个空格,输出正数时正号不显示、输出一个空格。
这就是为什么图2-1第二行中的123和888之间有2个空格、而888与-456之间只有1个空格的原因。
·字符串数据原样显示引号内的内容,逻辑类型数据直接输出True或False。
2.2.3赋值语句
格式:
<变量名>=<表达式>或<控件名>.<属性名>=<表达式>
功能:
计算表达式值并转换为相同类型数据后为变量或控件属性赋值。
说明:
·为数值变量赋值时,表达式的值不得超过数值变量的数值范围,否则显示错误信息。
如执行语句“k%=1234567”与“f!
=1.34E39”都将出现赋值错误。
·值为浮点类型的表达式四舍五入后向整型变量赋值。
如执行语句“k&=5.76”后,k&被赋值6;执行语句“i%=-4.49”后,i%被赋值-4。
·任何类型表达式都可以向字符串变量赋值。
如执行语句“a$=123.45”后,字符串变量a$中存放了字符串"123.45"。
·赋值号不是数学中的等号。
如执行语句“a=a+8”的过程是,取变量a的值与8相加后的结果再赋值给变量a。
例2-4编写一个实现两个变量值交换的程序。
我们可以把两个变量A、B设想成分别装有牛奶和咖啡的两只杯子,现在要把牛奶倒到咖啡杯里,而将咖啡倒到牛奶杯里。
可以这样来做:
另取一只杯子(同类型变量)C,将A中的牛奶倒入杯子C,再将B中的咖啡倒入杯子A,最后将杯子C中的牛奶倒入杯子B。
程序如下:
PrivateSubForm_Click()
a%=5:
b%=8
Printa%,b%'显示交换前的值
c%=a%:
a%=b%:
b%=c%'交换
Printa%,b%'显示交换后的值
EndSub
显然,将交换的过程写作“a%=b%:
b%=a%”是错误的。
2.3运算符、表达式、常用内部函数
2.3.1算术运算符与算术表达式
算术运算符
如表2-2所示,VB共有7个算术运算符,除了负号是单目运算符,其他都是双目运算符。
表2-2算术运算符
运算符
名称
实例
^
乘方
2^3值为8,-2^3值为-8
*
乘法
5*8
/
除法
7/2
\
整除
7\2值为3,12.58\3.45值为4(两边先四舍五入再运算)
Mod
求余数
7mod2值为1,12.58Mod3.45值为1(两边先四舍五入再运算)
+
加法
1+2
-
减法、取负
5-8,-3
算术运算符的优先级
算术运算符之间的运算优先级从高到低如下所示,由此可知:
指数运算优先级最高,而加、减运算优先级最低。
指数运算^→取负-→乘、除→整除\→求余Mod→加、减
其中,整除和求余运算只能对整型数据(Byte、Integer、Long)进行,如果其两边的任一个操作数为实型(Single、Double),则VB自动将其四舍五入、再用四舍五入后的值作整除或求余运算。
乘、除和加、减分别为同级运算符,同级运算从左向右进行。
在表达式中加括号可以改变表达式的求值顺序。
算术表达式
常量、变量、函数是表达式,将它们加圆括号或用运算符作有意义的连接后也是表达式,书写VB的算术表达式,应注意与数学表达式在写法上的区别。
·不能漏写运算符,如3xy应写作3*x*y。
·VB算术表达式中使用的括号都是小括号。
例2-5由下列数学式写出相应的VB算术表达式。
写作:
1/(1+1/(1+x))
写作:
-(a*a+b*b*b)*y^4
写作:
(-a^(b^c)+b^0.5)*(a-b)^-0.5
变量k是一个两位整数,求其个位数与十位数之和的算术表达式为:
kmod10+k\10
2.3.2字符串运算符与字符串表达式
字符串运算符有两个:
“+”和“&”,均为双目运算符、用于连接两边的字符串表达式。
"ABCD"&"efg"计算后所得表达式的值为"ABCDefg"
"杭州"&"西湖"计算后所得表达式的值为"杭州西湖"
字符串连接符“&”具有自动将非字符串类型的数据转换成字符串后再进行连接的功能,而“+”则不能。
如:
"xyz"&123计算后所得表达式的值为"xyz123"
"xyz"+123出现类型不匹配错误
2.3.3关系运算符与关系表达式
关系运算符也称为比较运算符,包括<、<=、>、>=、=、<>六种,均为双目运算符,用于比较两边的表达式是否满足条件,运算结果为True或False。
在关系表达式求值时:
·数值数据比较大小,如3<=5为True;
·日期类型数据比较先后,如#11/18/1999#>#03/05/2001#为False;
·字符类型数据比较字符的ASCII码:
若两端首字符相同则比较第2个字符……直到比较出相应字符的ASCII值大小或两端所有字符比较结束。
如"ABCd">="ABCD"为True
"ABCd">="cd"为False
"ABCd"="ABCd"为True
两个字符串的“=”关系比较结果为True,它们必定是两个完全相同的字符串。
2.3.4逻辑运算符与逻辑表达式
常用的逻辑(布尔)运算符有三种,如表2-3所示。
逻辑运算符的优先级是:
先Not,次And,后Or。
算术运算符、关系运算符和逻辑运算符的优先级关系为:
算术运算符最高,其次是关系运算符,最后是逻辑运算符。
关系表达式的值为False或True,因此也是逻辑表达式;逻辑表达式用逻辑运算符正确地连接后也是逻辑表达式。
表2-3逻辑运算符
运算符
名称
实例说明
And
与
8Mod2=0And8Mod3=0,值为False。
只有当两个表达式的值都为真(True)时,结果才为真,否则为假(False)
Or
或
8Mod2=0Or8Mod3=0,值为True。
两个表达式中只要有一个为真(True)时,结果就为真;只有当两个表达式的值都为假(False)时,结果才为假(False)
Not
非
Not1>0,值为False,由真变假;
Not1<0,值为True,由假变真
例2-6由下列条件写出相应的VB逻辑表达式。
条件“-3 -3 判断变量a、b均不为0的逻辑表达式为: a*b<>0或a<>0andb<>0 判断变量a、b中必有且仅有1个为0的逻辑表达式为: a=0andb<>0ora<>0andb=0或a*b=0anda+b<>0 判断整型变量k是正的奇数的逻辑表达式为: k>0andkmod2=1 判断变量a、b、c是否等比数列中顺序的3项,逻辑表达式为: a/b=b/c 平面三点坐标为(x1,y1)、(x2,y2)、(x3,y3),且x1≠x2≠x3,判断它们是否共线的逻辑表达式为: (y3-y2)/(x3-x2)=(y2-y1)/(x2-x1) 2.3.5常用内部函数 VB的内部函数是系统预定义函数,可由用户直接调用。 VB函数的自变量必须用括号括起来,并满足一定的取值要求。 这里主要介绍一些常用内部函数,其他函数可参见VB的有关资料。 1.数学函数 下列函数的参数均为数值类型。 三角函数: Sin(x)、Cos(x)、Tan(x),反正切函数Atan(x) 以上函数分别返回正弦值、余弦值、正切值和反正切值; VB没有余切函数,求x弧度的余切值可以表示为1/Tan(x); 函数Sin、Cos、Tan的自变量必须是弧度,如数学式Sin30°,写作VB的表达式为Sin(30*3.1416/180); 其他反三角函数可以转换为等值的反正切函数,然后用VB的反正切函数Atan计算,如函数Atan(x/sqr(1-x*x))可以求sin-1x(不可以写作Asin(x),因为VB没有预定义反正弦函数Asin)。 Abs(x): 返回x的绝对值。 Exp(x): 返回e的指定次幂,即ex。 Log(x): 返回x的自然对数。 Sgn(x): 符号函数,当x>0时,Sgn(x)的值为1;当x=0时,Sgn(x)的值为0;x<0时,Sgn(x)的值为-1。 Sqr(x): 返回x的平方根,如Sqr(16)的值为4,Sqr(1.44)的值为1.2。 Int(x): 返回不大于x的最大整数,如Int(7.8)值为7,Int(-7.8)值为-8。 Fix(x): 返回x的整数部分,如Fix(7.8)值为7,Fix(-7.8)值为-7。 2.字符串函数 Ltrim(x): 返回删除字符串x前导空格符后的字符串。 如Ltrim("abc")的计算结果为字符串"abc"。 Rtrim(x): 返回删除字符串x尾随空格符后的字符串。 如Rtrim("abc")的计算结果为字符串"abc"。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VB 电子 教材 02
![提示](https://static.bdocx.com/images/bang_tan.gif)