1、Visual Basic6.0的数据类型变量、常量运算符和表达式,语法基础,Visual Basic的数据类型,在Visual Basic中,数据类型包括标准数据类型和由用户自己定义的数据类型。,1. 数值(Numeric)数据类型,(1)整型(Integer)和长整型(Long)用于表示整数,可以为正整数、负整数和0。 如: 100, 12345,-123,&H1A,&O123,Visual Basic的标准数据类型,(2)单精度浮点型(Single)最大正数值为3.402823E+38(即3.41038)。最多7位有效数字。 (3)双精度浮点型(Double)最大正数值为1.7976931
2、3486232D+308(即1.810308)。 最多15位有效数字。,用E则将该值作Single类型处理,用D则将该值作Double类型处理,3.1415926,123.01,-0.5,100.51E4,-2.3E2,2.3E-2,10D-3,10D3,(4)货币型(Currency)是一种专门为处理货币而设计的数据类型,是一种特殊的小数,保留小数点右边4位和小数点左边15位。,(5)字节型(Byte)用于存储二进制数。,2. 日期(Date)数据类型,日期型数据在计算机中按8个字节的浮点数存储,用于表示从公元100年1月1日到公元9999年12月31日的日期,时间范围则是0:00:0023
3、:59:59。,用数字序列表示日期型数据。字符序列必须用“#”括起来。,如:#2/17/2003# #2003-02-17#February 17,2003# #17 Feb 2003#2003-2-17 8:30:34#,均为合法的日期型数据,特别说明:若将一个数值型数据赋给一个日期型变量,则小数点左边的数字代表日期,右边的数字代表时间 0为午夜0点,0.5为中午12点;负数代表的是1899年12月31日之前的日期或时间。计算时以1899年12月30日为界。,如:定义变量Mydate为日期型变量,有以下赋值语句:Mydate=2.5 日期为1900年 1月1日,时间为12:00:00Myda
4、te=1.5 日期为1899年 12月31日,时间为12:00:00Mydate=1 日期为1899年 12月31日Mydate=0.5 日期为1899年 12月30日,时间为12:00:00Mydate=-1.5 日期为1899年 12月29日,时间为12:00:00Mydate=-1 日期为1899年 12月29日,程序举例,3. 逻辑(Boolean)数据类型,逻辑型数据用于逻辑判断,只有两个值“真”(True)和“假”(False)。若变量的值为“True/False”,“Yes/No”,“On/Off”信息时,则可将它申明为Boolean类型。Boolean型的默认值为False。,
5、逻辑型数据 整型数据:“真”转换为-1,“假”转换为0 其它类型数据逻辑型数据 :非0转换为 “真” ,0转换为“假”,4. 字符(String)数据类型,字符串型数据是一组由计算机字符组成的序列,一个字符占用一个字节(包括汉字)。在Visual Basic中字符串要用双引号括起来。在Visual Basic中有两种字符串:变长字符串(最大长度为231-1个字符)和定长字符串(最大长度为216-1个字符)。 注意:“”和“ ”的区别,如: “西南交通大学” “China is great!”contentoftext1$=Text1.Text,5. 对象(Object)数据类型,对象数据用4个
6、字节来存储,该32位地址可以引用应用程序中的对象,可以指定一个被申明为对象的变量去引用应用程序所识别的任何实际对象。,6. 变体(Variant)数据类型(VB对所有未定义的变量都赋予Variant类型),变体型数据是一种可以随时改变数据类型的数据,它为Visua Basic的数据处理增加了智能性(VB2中加入)。 变体型数据还包括四种特殊的数据: (1)空(Empty):没有指定确定的数据 (2)无效(Null):数据不合法 (3)出错(Error):说明过程中出现了一个错误条件 (4)无指向(Nothing):说明数据还没有指向一个具体对象,优点:可以不考虑存储数据的类型 缺点:1、降低运
7、算速度2、以下两种情况依靠机器转换会产生不可思议的结果:编程期间如果变量始终保持一种类型;如果要使程序中保存字符串和数值的变量不变时。 只有在要用变体的特殊性时才使用,转换应尽量掌握在程序员手中。,Visual Basic的基本数据类型,Visual Basic的用户自定义数据类型,在Visual Basic中,除了标准数据类型外,还允许用户自己定义数据类型,由若干个标准数据类型组成。当需要一个能包含几个相关信息的变量时,就可以使用自定义类型。,Type 自定义类型名元素名 As 类型名元素名 As 类型名End Type,自定义类型的定义语句的形式为:,自定义类型中的一个成员,该成员的标准数
8、据类型,如:定义一个班中学生的基本情况的数据类型为:,Type Students 说明Students是自定义类型名Name As String *8 Name是Students的成员之一,字符串型Age As Integer Age是Students的成员之一,整型Address As String *30 Address是Students的成员之一,字符串型Computer As Single Computer是Students的成员之一,单精度型English As SingleMath As SingleTotal As SingleAverage As Single End Type
9、,程序举例,(1)自定义类型必须在标准模块(.bas)中定义,默认是Public。 (2)自定义类型中的元素类型是字符串时,该字符串必须是定长字符串。 (3)要分清自定义类型名和具有该类型名的变量名。自定义类型名表示的是一种数据类型,同Integer,Single等是一样的;而变量名是一个具有某种类型的变量,VB根据变量的不同类型分配必要的存储空间。,注意:使用自定义类型时:,Visual Basic的枚举类型,Public | Private Enum 类型名成员名 =常数表达式成员名 =常数表达式 End Enum,枚举类型放在窗体模块、标准模块或公用模块中的声明部分,定义语句的形式为:,
10、枚举类型中的一个成员,为可选项,表示元素的值为Long类型,也可以是其它Enum类型,若某个变量的值只能是指定的若干个名字之一,则可定义为枚举类型。所谓枚举,指将变量的值一一列举出来,变量的值只限于列举出来的范围内。,(1)在Enum语句的格式中,“常数表达式”可以省略。在默认情况下,枚举中的第一个常数被初始化为0,其后的常数则初始化为比其前面的常数大1的数值。,使用枚举类型时的说明:,Public Enum Days 说明Days是枚举类型名Sunday 说明常数Sunday的值为0Monday 说明常数Monday的值为1Tuesday Wednesday ThursdayFridaySa
11、turday End Enum,(2)可以用赋值语句显式地给枚举类型中的成员赋值,即不省略“常数表达式”。所赋的值可以是任何长整型,也可以为负数。,Public Enum WorkDays 说明Days是枚举类型名Saturday 常数Saturday的值只能为0Sunday = 0 说明常数Sunday的值为0Monday 说明常数Monday的值为1Tuesday Wednesday ThursdayFridayInvalid = -1 End Enum,(3)Visual Basic将枚举中的成员的数值看做长整型。若将一个浮点数值赋给一个枚举中的成员,VB就会将该数值取整为最接近的长整型
12、。,(4)当对一个枚举类型中的成员赋值时,可以使用另一个枚举中的成员的数值。,(5)声明枚举类型后,就可以定义该枚举类型的变量,然后使用该变量存储枚举常量的数值。,枚举变量示例,与一般的程序设计语言一样,VB中使用常量和变量来存储各种类型的数据。变量用名字来表示其中存储的数据,用数据类型表示其中存储的数据的具体类型。而常量是用名字来表示某个数值,将无意义的单纯数字用有含义的符号来表示,方便用户使用。,Visual Basic中常量分为两类:一为普通常量(即数据本身);另一为符号常量(即用一个标识符表示的常量)。,普通常量,Visual Basic中的普通常量包括数值常量、字符串常量、逻辑常量、
13、日期常量等。,常量,在VB中,用常量表示在整个程序中事先设置的、始终不会改变数值的数据。对于程序中使用的常数,能够用常量表示的应尽可能用常量表示,以增强程序的可读性。,符号常量(用户声明常量),符号常量(自定义常量或用户声明常量):在程序中程序员用Const声明的常量。在声明一个常量后,我们就可用常量名来引用其代表的常数,如:,Const Pi=3.1415926 Dim x As Single x=Sin(Pi/4) 即x=Sin(3.1415926/4),符号常量即是用一个符号名来代替数值或字符串。,符号名必须以字母开头,由字母、数字、下划线组成的长度不大于40的字符串。,定义符号常量的格
14、式:Const 符号常量名 As 类型 = 表达式 即定义符号常量名为表达式的值。“表达式”可以是数值、字符串或由它们与运算符组合成的简单表达式,也可包含其它已定义的符号常量;但表达式中不能使用函数。,如:Const NAME As String=“张三”Const NUM As Integer=100*2Const PI As Double=3.14159265358979Const PII =3.1415926,可选项,用于说明常量的数据类型,PI为双精度型,PII为单精度型,不能用Visual Basic中的保留字,如Case、If等作为符号常量名。,符号常量名必须以字母开头。通常,为了
15、区别于其它变量,符号常量名一般用大写字母表示。,符号常量必须先定义后使用,在整个模块中只需要定义一次。,关于符号常量的一些说明:,符号常量在程序中代替的是具体的某值,不等同于变量,也不能对符号常量重新赋值。,变量,变量及变量名,变量名的命名规则:,(1)变量名必须以字母或汉字开头,后跟字母、汉字、数字或下划线组成的字符串。变量名中不允许使用空格。变量名不得超过255个字符。,(2)变量名不能和保留字(关键字)同名。,(3)在Visual Basic中变量名不区分大小字。但习惯上变量名首字母用大写表示。变量名在变量的有效范围内唯一。,变量是指在程序执行过程中其值可以改变的量,即变量是用于临时存储
16、数据的。每个不同的变量都用变量的标识符来区分,而变量的标识符就称为变量名。,关键字是Visual Basic 6.0保留下来作为程序中有固定含义的标识符,是VB内部使用的词,是该语句的组成部分。不能被重新定义以作它用。VB中的关键字有:,As Binary ByRef ByVal Date Else Empty Error False For Friend Get Input Is Len Let Lock Me Mid New Next Nothing Null On Option Optional Print ParamArray Private Property Public Resum
17、e Seek Set Static Step String Then Time To True WithEvents,变量的声明及类型,在Visual Basic中,使用变量前,要先声明变量名及其类型,以确定系统为它分配的存储单元。声明变量的方式有:,1. 用Dim,Static,Public关键字声明变量:显式声明变量,(1)Dim关键字:用于模块过程中或窗体级的通用过程中。,Dim声明变量的定义格式为:Dim 变量名 As 类型,为可选项。省略时,默认为变体类型。,使用Dim定义变量的一些说明:,1)对于字符串变量,根据其存放的字符串长度是否固定,有两种定义方式:,Dim Str1 As
18、StringDim Str2 As String *10,定义变量Str1为不定长字符串变量,定义变量Str2为定长字符串变量,长度为10,对于定义的字符串变量,当赋给的字符少于给定长度时,用空格填满不足部分;当赋给的字符大于给定长度时,自动截去超出部分的字符,2)一条Dim语句可以定义多个变量,但每个变量必须有自己的类型声明。,如:Dim Count1 As Integer, Count2 As Double,如:Dim Num1, Num2 As Single,Count1,Count2各自为指定类型,Num1为Variant类型,Num2为Single类型,3)用Dim定义变量的数据类型
19、时,也可用数据类型的类型符来代替As子句。注意:变量名与类型符间不能有空格。,如:Dim Number% 等价于 Dim Number As Integer,Private Sub Form_Click()Dim Str1 As StringDim Str2 As String*4Dim Str3 As String*2Str1=“中华人民共和国”Str2=“中华人民共和国”Str3=“中华人民共和国”Print Str1Print Str2Print Str3End Sub,例如:编写窗体的Click事件过程如下:,(2)Static关键字:用于过程中定义静态变量或静态数组。,用Static
20、和Dim定义变量的区别: 1)用Static定义的变量在该函数或过程执行结束后,其值能保存下来,当下一次执行时,该值为上一次保存下来的值,而不再是初始化时的值。故用static定义的变量称为静态变量。 2)用Dim语句定义的变量随过程的调用而分配存储单元,并进行变量的初始化。一旦过程或函数执行结束,变量的值自动被清除,占用的存储单元也被释放。故用Dim定义的变量,只要过程或函数被调用,变量都将重新初始化。,Static声明变量的定义格式为:Static 变量名 As 类型,Private Sub Form_Click()Dim Sum1 As IntegerPrint Sum1Sum1=Sum
21、1+1 End Sub,例4.1:在“代码”窗体中编写窗体的Click事件过程如下:,运行此程序,在窗体上单击数次,窗体上显示的数字始终是0,结果如图所示:,Private Sub Form_Click()Static Sum2 As IntegerPrint Sum2Sum2=Sum2+1 End Sub,将上述代码中的Dim换成Static,如下所示:,再次运行程序,则每单击一次窗体,窗体上显示的数字便加1,结果如图所示:,程序举例,2. 隐式声明变量,在Visual Basic中,也可以不事先声明而直接使用变量,这种方式称为隐式声明。所有隐式声明的变量都是变体型数据类型。,对于隐式声明的
22、变量,即在使用一个变量之前并不先声明此变量,而是直接用这个名字自动创建一个变量,使用此变量时,可以认为它就是显式声明的。虽然此法很方便,但若变量名拼错了的话,系统会认为它是一个新变量,从而会导致一个难以查找的错误。 因此对于隐式声明变量,应尽量少用;应先声明变量的数据类型,这样Visual Basic会以更高的效率处理此数据。,补充说明:,在Visual Basic中,为了避免因写错变量名而引起的麻烦,可 以在“代码”窗口的声明段中加入语句:Option Explicit 这样,在代码中只要遇到一个未经显式声明的名字,Visual Basic都会弹出错误警告。,加入语句:Option Expl
23、icit语句后,因此段代码只声明了变量s1,而没有声明变量s2,运行该程序,单击窗体,则弹出编译错误消息框。,另外,还可将系统定制为总要求显式声明变量。,执行“工具”菜单中的“选项”命令,打开“选项”对话框,在“编辑器”选项卡中选中“要求变量声明”选项。这样就在任何新建的模块中自动插入Option Explicit语句,但不会在已经建立起来的模块中自动插入。,变量的缺省值: 除了Object类型外,其他数据类型的变量都有缺省值。 数值型:0 Boolean型:False String型:长度为0的空字符串 Date型: 0:00:00,变量的作用域,一个变量声明后,并不是在任何地方都能使用它,
24、因每个变量都有自己的作用范围。变量的作用范围即称为变量的作用域。变量的声明方式和声明位置决定了它的作用域。,若一个变量是在一个过程内进行声明的,则此过程内的所有代码都可以访问到该变量,其作用域局限在这个过程内,这种变量称为局部变量。,若一个变量被声明后,整个应用程序内的代码都可以访问该变量,则该变量为全局变量。,补充说明:,在介绍变量的作用域之前,先了解一个应用程序的组成:,变量的作用作用域可分为三个层次:局部变量、模块级变量和全局变量。下表列出了变量的作用范围及使用规则:,注意:若不特别说明,模块是指对窗体模块与标准模块的统称。,1. 局部变量,局部变量是指在过程内使用Dim语句或Stati
25、c语句声明的变量。在过程内不加声明而直接使用的变量(即隐式声明的变量)也是局部变量。一个应用程序包含若干个模块,模块中又包含若干个过程。对于局部变量,只能在声明它的过程中使用,本模块的其它过程以及其它模块均不可访问。,说明:在不同的过程中可以声明相同名称的变量,它们相互独立,互不干扰。,2. 模块级变量,模块级变量是指在模块的任何过程之外,即在模块的声明部分使用Dim语句或Private语句声明的变量。模块级变量可被本模块的任何过程访问。,3. 全局变量,全局变量是指在模块的任何过程之外,即在模块的“通用声明”段使用Public语句声明的变量。可被本模块的任何过程访问。,说明:在窗体模块声明的
26、全局变量,在访问时需要在变量名前加窗体名;而在标准模块中声明的全局变量可以直接访问。,例如:在窗体模块中定义了四个变量A、B、C和D,如图。则A为全局变量,B为模块级变量,C和D为局部变量。,说明:在Visual Basic中,作用域不同的变量的名称可以相同,并且作用域小的变量的优先级高。,程序中对数据的操作,其实就是指对数据的各种运算。被运算的对象,如常数、常量和变量等称为操作数。运算符是用来对操作数进行各种运算的操作符号,如加号(+)、减号(-)等。,在高级语言中,通过运算符将操作数连接成的在意义的式子,即称为表达式。,Visual Basic中有丰富的运算符和表达式,可分为:,算术运算符
27、和算术表达式,关系运算符和关系表达式,逻辑运算符和逻辑表达式,字符串运算符和字符串表达式,赋值运算符,赋值运算符,在声明一个变量后,要先给变量赋上一个合适的值才能够使用。给变量赋值的格式为:,变量名 = 表达式,可以为普通的常量、变量或表达式及函数,如:一个变量X ,常用以下几种方式进行赋值:X=10X=YX=X+1,为一个已经赋过值的变量,算术运算符与算术表达式,算术运算符是用于进行算术运算的,其操作对象是数值型的数据,如整型、长整型、单精度浮点型、双精度浮点型及货币型数。,下表列出了Visual Basic中提供的算术运算符。其中取负运算符(-)只需一个操作数,称之为单目运算符;其它运算符
28、都需两个操作数,称之为双目运算符。,运算符的优先级表示当表达式中有多个运算符时,先执行哪个运算符。,算术运算符,整除运算()的结果是商的整数部分。如72表示整除,商为3.5,结果取整数部分3,不进行四舍五入。若参加整除的操作数为浮点数,则先按四舍五入的原则将其转换为整数,再执行整除运算。如:8.52,先将8.5变以9,商为4.5,结果为4。,算术运算符的一些说明:,执行除法运算(/)时,除非有一个操作数为Double,否则系统按Single的方式运算。,求余运算(Mod)是求两个整数相除后的余数。若参加运算的操作数为浮点数,则先按四舍五入的原则将它们变成整数,然后再执行求余运算。如8.5Mod
29、2.1,结果为1。,指数运算是计算乘方和求根式的运算。如36(1/2),结果为6。,关系运算符与关系表达式,关系运算符是双目运算符,是用来对两个操作数进行大小比较的,它们的优先级相同。关系运算的结果是一个逻辑值,即真(True)或假(False)。若关系成立,则结果为True,否则结果为False。在Visual Basic中,True用-1表示,False用0表示。,如:关系表达式54,显然不成立,因此,运算结果为False。,关系运算符,关系运算在进行比较时应注意的规则:,当两个操作数是数值型时,比较按数值的大小进行。,当两个操作数是字符型时,则按字符的ASCII码值从左到右逐个比较,即首
30、先比较两个字符串中的第一个字符,ASCII码值大的字符串大,若两个字符串的第一个字符相同,则比较第二个字符,依次类推,直到比较出大小为止,,关系运算符中的“=”与赋值语句中的“=”的作用截然不同,其作用是判断两边的值是否相等,表达式可以出现在“=”的两边。,关系运算符的优先级相同。,逻辑运算符与逻辑表达式,逻辑运算符的作用是对操作数进行逻辑运算。逻辑运算符中只有Not为单目运算符,其余均为双目运算符。逻辑运算的结果是一个逻辑值。,逻辑运算的操作数可以是逻辑值(True或False)或关系表达式,也可以对数值进行逻辑运算。若参加逻辑运算的操作数是数值,则以数值的二进制值逐位进行逻辑运算。如:10
31、 Or 7表示对1010与0111进行逻辑或运算,结果为二进制数1111,十进制数15。,注意:操作数与逻辑运算符间必须有空格,逻辑运算符,字符串运算符与字符串表达式,字符串运算符有两个:“&”和“+”,其作用是将两个字符串连接起来。“&”和“+”都是双目运算符。,例如: “Visual Basic”&“程序设计语言” 结果为 “Visual Basic程序设计语言” “电脑”+ “爱好者” 结果为 “电脑爱好者” Str$=“计算机” 声明变量Str为字符串型,且赋值“计算机” Str & “与网络” 结果为 “计算机与网络”,变量名和&之间一定要加一个空格。因&本身还是长整型的类型符,不加
32、空格易造成误会,比较“&”和“+”运算符:,“&”运算符会自动将非字符型的数据转换成字符串后再进行连接。,如:1234 & 5678 & “abcd” 结果为 “12345678abcd”,“+”运算符在连接字符串时不能自动转换。即“+”运算符两边的表达式应均为字符串型,运算结果也为字符串,是两个字符串连接起来而产生的新字符串。,注意:“+”运算符的两边表达式若都是数值型表达式,或一个为数值型,而另一个为数值字符串,则进行算术加操作;若一个为数值型表达式,一个为字符串型表达式,则错误。,如:12 & “34” 结果为 “1234”12 + “34” 结果为 4612 & “ab” 结果为 “1
33、2ab”12 + “ab” 类型不匹配,数据类型的转换,对于算术运算,若操作数具有不同的数据精度,则系统规定运算结果的数据类型以精度高的数据类型为准。即:,运算符的优先级,在一个表达式中进行多个运算时,每一部分都会按预先确定的顺序进行计算求解,这个顺序被称为运算符的优先级。,当表达式有多个运算符时,先处理算术运算符和字符串运算符,接着处理关系运算符,然后于处理逻辑运算符。即各种运算符的优先级为:,算术运算符字符串运算符关系运算符逻辑运算符,所有关系运算符有相同的优先级,即按它们出现的顺序从左到右进行处理。,算术运算符和逻辑运算符按它们各自的优先级进行处理,当乘法和除法同时出现在表达式中时,按从
34、左到右出现的顺序处理每个运算符;同样,当加法和减法同时出现在表达式中时,也按从左到右出现的顺序处理每个运算符。,括号可改变优先级的顺序,强制优先处理表达式的某部分。括号内的操作总是比括号外的操作先执行。但在括号内,仍保持正常的运算符优先级。,在书写表达式时,尽管有时括号不是必须的,但最好还是在表达式适当的地方添加一些括号,使得表达式的层次更分明,以增加程序的可读性。,如:选拔模特的基本标准是身高(T)要在175公分与185公分之间,同时,体重(W )要小于56公斤。不过,如果文化课成绩(S)在90分以上者,即使身高与体重不合格也可以破格录取。,描述以上选拔条件的表达式可以写成如下的形式:,17590,但如果适当地加上一些括号,则表达式的层次就一目了然了:,(17590),