1、Visual Basic 编码规则,4.1 数据类型,4.2 变量与常量,4.5 运算符和表达式,第4章 Visual Basic程序设计语言基础,4.4 常用内部函数(含字符串函数),4.3 变量的作用域,编码规则,(1)VB代码不区分字符的大小写,但关键字将会自动转换 为大写字母开头,后续字母为小写字母。 (2)一行可以书写多条语句,各语句之间用冒号“:”分隔。 (3)一行书写不完的语句,可以在该行后加上续行符(由空格+下划线_组成),然后换行书写。 (4)一行最多为255个字符,一条语句最多含1023个字符。 (5)用户自定义的变量、过程名等,VB以第一次定义为准,其后的输入自动转换。
2、(6)程序中可以使用标号用于程序的转向,标号为以字母开头、冒号结尾的字符串。,(7)注释行以Rem 或撇号“”开头,但是只有用撇号引导的注释可以出现在语句之后。可以使用“编辑”工具栏中的“设置注释块”命令将选定的若干行语句或文字设置为注释项,也可以使用“解除注释块”命令将选定的若干行解除注释。 (8)对象名命名约定:每个对象名由三个小写字母组成前缀和表示该对象作用的缩写字母组成,前缀表明对象的类型,如cmdExit为一个退出按钮,cmdEnter为一个确认命令按钮。,4.1 数据类型,表4-1 Visual Basic 的标准数据类型,1数值型数据(Numeric),数值型数据一般分为整型数和
3、浮点数两类。整型数分为整数(Integer)和长整数(Long),浮点数分为单精度浮点数(Single)和双精度浮点数(Double)。有时也把货币型数据(Currency)和字节型数据(Byte)划归数值型数据。,1)整数(Integer),整数是不带小数点和指数符号的数,在机器内部以2字节(双八位)二进制码形式表示。VB中用n%来表示整数,其中%为整数的类型符,可以省略。如-123%、123%都表示整数。,2)长整数(Long) 整数的最大值为32767,大于此数,程序运行时就会因为溢出产生中断。此时可使用长整数。 长整数用4字节(四个八位)二进制数存储,可以表示更大的整数,其取值范围为-
4、21474836482147483647。VB中用n&来表示长整数,其中&为长整数的类型符。如-1234&、987654&都表示长整数。3)浮点数 浮点数也称为实型数或实数,由符号、指数和尾数组成,分单精度浮点数(Single)和双精度浮点数(Double),其指数部分分别用“E”(或“e”)和“D”(或“d”)表示。,4)货币型(Currency) 货币型属于定点实数或整数,用8个字节(八个八位)存储小数点前有15位,小数点后有4位,其余的数字被舍去,其表示形式为在数字后加上“”。5)字节型(Byte) 字节型数据用1个字节的无符号二进制数存储,取值范围为0255。,2.日期型数据(Date
5、),日期型数据按IEEE64位浮点数值存储,表示的日期从公元100年1月1日9999年12月31日,时间范围为0:00:0023:59:59。,任何在字面上可以被认作日期的文本,都可以赋值给日期变量,且日期文字必须用符号“#”括起来,如#January 15,2002#,#1985-10-1 9:45:00 PM# 都是合法的日期型数据。,3.逻辑型数据(Boolean),逻辑型数据只有两个值:真(True)和假(False),用2字节二进制数存储,经常用来表示逻辑判断的结果。,当把数值型数据转换为逻辑型数据时,0会转换为Flase,其它非0值转换为 True。反之,当把逻辑型数据转换为数值型
6、时,Flase转换为0,True转换为-1。,4.字符型数据(string),字符型数据是指一切可打印的字符和字符串,它是用双引号括起来的一串字符。一个西文字符占一个字节,一个汉字或全角字符占两个字节。在VB中有两种类型字符串:变长字符串和定长字符串。变长字符串的长度不确定,可以是0231个范围内的字符,而定长字符串长度一定,可以是0231个范围内的字符,注意:空字符串用“表示,而“ “则表示有一个空格的字符串;另外在字符串中必须用两个连续的双引号来表示字符串有一个双引号。如字符串:abc“计算机“abc,在VB中表示为“abc“计算机“abc“。,5.对象(Object)类型的数据 对象类型
7、的数据主要用来表示图形、OLE对象、或其它对象。它是以变量形式存在的,Object变量通过32位(4字节)来存储,该地址可以引用应用程序中的对象。利用Set语句,声明为Object的变量可以被赋值并被任何对象所引用。6.变体(Variant)数据类型 Variant数据类型又称为万用数据类型,它是一种特殊的、可以表示所有系统定义类型的数据类型。变体数据类型对数据的处理可以根据上下文的变化而变化,除了定长的string数据及用户自定义的数据类型之外,可以处理任何类型的数据而不必进行数据类型的转换,如上所述的数值型、日期型、对象型、字符型的数据类型。Variant数据类型是VB对所有未定义的变量的
8、缺省数据类型的定义。通过VarType函数可以检测Variant型变量中保存的具体的数据类型。,4.1.1 用户自定义数据类型,除了上述数据类型外,在VB中,用户可以根据需要利用Type语句定义自己的数据类型,其格式如下:,Type 数据类型名 数据类型元素名 As 类型名数据类型元素名 As 类型名 End Type,其中,数据类型名的命名规则同变量名的命名规则,数据类型元素名也遵守同样的规则,类型名可以为任何基本类型名或为用户定义数据类型名。,例题:定义一个有关职工信息的自定义类型:,Type Date_Recordryear as Integerrmonth as String*3rda
9、y as Integer End Type 我们将该类型称为“记录类型” 注意: (1) “记录类型”的定义必须在标准模块或窗体模块的声明部分定义,在标准模块中定义时默认为全局变量(Public)。在窗体模块定义时在关键字Type前必须加上关键字Private。,(2) “记录类型” 中的元素如果有字符串,可以是定长字符串也可以是变长字符串,但在随机文件中使用时,则必须是定长字符串,即应该使用形式为: strName As String*常数其中: “常数”指明定长字符串的长度 (3) 在记录类型中,不能使用动态数组 (4) 在随机文件操作中记录类型数据有着重要的作用,4.1.2枚举类型,当一
10、个变量的取值有几种可能性时,可以使用枚举的方法将变量的值一一列举出来,变量的值就仅限制在列出的几种值中。采用这样的方法定义的变量类型称为枚举类型。,枚举可以通过窗体模块、标准模块或公用类模块中的声明部分用 Enum 语句声明一个枚举类型来创建。其格式为:,Private|Public Enum 类型名称,成员名=常数表达式,End Enum,4.2 变量与常量,4.2.1 常量 Visual Basic中的常量分为两种,一种是文字常量,一种是符号常量。我们还可以将字符串常量、数值常量、布尔常量、日期常量称为直接常量。 1直接常量直接常量:在程序代码中,以直接明显的形式给出的数据。(1)字符串常
11、量由字符串组成(2)数值常量共有四种表示方式,即:整型数、长整型数、货币型数和浮点数。(3)布尔常量由True、False组成。(4)日期常量由日期信息组成。,2符号常量,(1)系统内部定义的常量 内部或系统定义的常量是VB和控件提供的。这些常量可与应用程序的对象、方法和属性一起使用,在代码中可以直接使用它们。 (2)用户定义的符号常量 用户可以使用Const语句来定义常量( 用来代替数值和字符串) 一般格式为: Public|PrivateConst As= 其中:符号常量名按变量的命名规则命名,还可添加类型说明符.表达式由文字常量、算术运算符(指数运算符除外)、逻辑运算符组成。,注意(1)
12、可以在变量名后面加上类型说明符。例:Const one&=1 (2)在程序中引用符号常量时,通常省略类型说明符。例:Const one=1(常量的类型取决于Const语句中表达式的类型)(3)类型说明符不是符号常量的一部分。例:声明了Const one=1 ,则one!,one&, one%, one#, one不能再用作变量名或常量名了。,4.2.2 变量 变量:程序运行过程中其值可以改变的量称为变量 。在Visual Basic中,一个有名称的内存位置称为变量。每个对象都有一个名字和相应的数据类型,通过名字来引用一个变量,而数据类型则决定了该变量的存贮类型。 变量的形式分为:属性变量和内存
13、变量。 1变量的命名规则 (1)VB变量名只能用字母、数字和下划线组成,变量名中不能包含小数点。 (2)VB变量名的第一个字符必须是字母或汉字,最后一个字符可以是类型说明符,且组成变量名的字符数不得超过255个字符。,(3)不得使用VB的保留名或保留名后加上类型说明符来作为变量名。 (4)变量名在同一个范围内必须是唯一的。且不区分大小写。 (5)为了增加程序的可读性,一般在变量名前加上一个表示该变量数据类型的前缀。例:Dim ab as Integer,2变量声明 (1)用类型说明符来标识将类型说明符放在变量名的尾部,可以表示不同的变量,如 %表示整型、&表示长整型、!表示单精度型、#表示双精
14、度型、表示货币型,$表示字符串型。,例如:strName$ dblNum% curWage (2)用声明语句定义变量的类型用声明语句定义变量类型的语法为:Dim|Private|Static|Public|RedimAs ,其中: Dim 用来在标准模块、窗体模块或过程中定义变量或数组。Private主要用来定义模块级变量。Static 用来在过程中定义静态变量和数组变量。Public 用来在标准模块中定义全局变量或数组。Redim 主要用来重新定义数组。,(3)用DefType语句定义用DefType语句可以在标准模块、窗体模块的声明部分定义变量。格式:DefType 字母范围其中:Def是
15、保留字, Type是类型标志。可以是Int、Lng、Sng、Dbl、Cur、Str、Byte、Bool、Date、Obj、Var,分别表示整型、长整型、单精度实型、双精度实型、货币型、字符串型、字节型、布尔型、日期型、对象型、变体型。且在Def和Type之间不留空格。DefType语句通常放在模块的开头,当模块中的变量全部使用整型数时,可以写成DefInt A-D 再如:DefDbl A-D 表示A-D 中的任一字母组成的变量名(无论大小写)或以该母开头的的变量名都表示双精度实型变量., 如果一个变量未被显式定义, 末尾也没有类型说明符, 则被隐含地说明为变体类型(Variant)变量. 用D
16、efType语句定义的变量只对它所在的模块起作用. 类型说明符(%、 如果所要求的精度不高, 则应使用单精度变量, 这样不仅节省内存空间, 而且可以提高处理速度. 用类型说明符定义的变量, 在使用时可以省略类型说明符. 例如, 用 Dim aStr$ 定义了一个字符串变量aStr$, 则即可以用aStr$, 也可以用aStr$来引用这个变量 . 部分类型变量的类型说明符、As子句中的类型名及存储要求见表4.2,3. 记录类型变量记录类型变量的定义与基本数据类型变量的定义没有什么区别, 但在引用时 有所不同. 例如, 假定有如下的记录类型: Type TypeDemoNum1 As Double
17、Num2 As IntegerVar1 As String*8 End Type 则可用下面的语句定义TypeDemo的变量: Static Genvar As TypeDemo 以后就可以用 “变量.元素”的格式引用记录中的各个成员. 例如: Genvar. Num1 Genvar. Num2 Genvar. Var1这种格式与前一章讲过的“对象.属性” 格式类似, 要注意区分.注意, 在一般情况下, 记录类型应在标准模块中定义; 如果在窗体模块中定义, 则必须在“Type”关键字前面加上“Private”.,例如, 当在窗体模块中定义上面的记录类型时, 应改为: Private Type
18、TypeDemoGenvar. Num1Genvar. Num2Genvar. Var End Type4.3 变量的作用域 变量的作用域指的是变量的有效范围, 即变量的“可见性”. 定义了一个变量后, 为了能正确地使用变量值, 应当明确可以在程序的什么地方访问该变量. 4.3.1 局部变量与全局变量 如前所述, Visual Basic应用程序由3种模块组成, 即窗体模块(Form)、标准模块(Module)和类模块(Class). 本书不介绍类模块, 因此应用程序通常由窗体模块和标准模块组成. 窗体模块包括事件过程(Event Procedure)、通用过程(General Procedu
19、re)和声明部分; 而标准模块由通用过程和声明部分组成. 如同4.3所示.,图4.3 Visual Basic应用程序的构成根据变量的定义位置和所使用的变量定义语句的不同, Visual Basic中的变量可以分为3类, 即局部(Local)变量、模块(Module) 变量及全局(Public) 变量, 其中模块变量包括窗体模块变量和标准模块变量. 各种变量位于不同的层次.,声明部分(Declaration)窗体模块 通用过程(General Procedure)(Form)事件过程(Event Procedure)应用程序 (Applicayion) 声明部分标准模块(Module) 通用过
20、程,1. 局部变量在过程(事件过程或通用过程)内定义的变量叫做局部变量, 其作用域是它所在的过程. 局部变量通常用来存放中间结果或用作临时变量. 某一过程的执行只对该过程内的变量产生作用, 对其他过程中相同名字的局部变量没有任何影响. 因此, 在不同的过程中可以定义相同名字的局部变量, 它们之间没有任何关系. 如果需要, 则可以通过“过程名.变量名”的形式分别引用不同过程中相同名字的变量. 局部变量在过程内用Dim、Static定义, 例如: Sub Commandl_Click( ) Dim Tempnum As Integer Static Total As Double End Sub
21、在上面过程中, 定义了两个局部变量, 即整型变量Tempnum和双精度静态变量Total.,2. 模块变量(窗体变量和标准模块变量)窗体变量可用于该窗体内的所有过程., 一个窗体可以含有若干个过程(事件过程或通用过程), 这些过程连同窗体一起存入窗体文件(.frm)中. 当同一窗体内的不同过程使用相同的变量时, 必须定义窗体层变量.在使用窗体层变量前, 必须先声明, 也就是说, 窗体层变量不能默认声明. 其方法是, 在程序代码窗口“对象”框中选择“通用”, 并在“过程”框中选择“声明”, 然后就可以在程序代码窗口中声明窗体层变量.标准模块中模块层变量的声明和使用与窗体模块中窗体层变量类似.标准
22、模块是只含有程序代码的应用程序文件, 其扩展名为.bas. 在默认情况下, 模块级变量对该模块中的所有过程都是可见的, 但对其他模块中的代码不可见, 模块级变量在模块的声明部分用Private或Dim声明. 例如: Private intTemp As Intege 或 Dim intTemp As Intege,在声明模块级变量时, Private和Dim没有什么区别, 但Private更好些, 因为可以把它和声明全局变量的Public区别开来, 使代码更容易理解.3. 全局变量全局变量也称全程变量, 其作用域最大, 可以在工程的每个模块、每个过程中使用. 和模块级变量类似, 全局变量也在标
23、准模块的声明部分中声明. 所不同的是, 全局变量必须用Public语句声明, 不能用Dim语句声明, 更不能用Private语句声明; 同时, 全局变量只能在标准模块中声明, 不能在过程或窗体模块中声明.,4.3.2 默认声明用Dim和Public语句可以定义局部变量、模块级变量和全局变量. 对于局部变量来说, 也可以在需要时直接给出变量名. 变量的类型可以用类型说明符(%、&、!、#、$、)来标识. 如果没有类型说明符, Visual Basic把该变量指定为变体数据类型. 例如, 假定在窗体上建立了一个命令按钮, 定义单击(Click)的事件过程如下: Sub Commandl_Click
24、( )Answer=InputBox$( “Are you student?”)If Answer= “Yes” thenMsgBox “He is a student”ElseMsgBox “He is not a student”End if End Sub 这里的InputBox$和MsgBox是Visual Basic中的函数和语句, 将在下一章介绍它们的用法.在上面的事件过程中, 变量Answer没有用Dim语句定义, 而是默认定义为局部变量.,默认定义的变量不需要使用Dim语句, 因而比较方便, 并能节省代码, 但有可能带来麻烦, 使程序出现无法预料的结果, 而且较难查出错误. 为
25、了安全起见, 最好能显式地声明程序中使用的所有变量.默认声明一般只适用于局部变量, 模块级变量和全局变量必须在代码窗口中用Dim或Public语句显式声明.Visual Basic不是强制类型语言, 但提供了强制用户对变量进行显式声明的措施, 这可以通过 “选项”对话框来实现. 其操作是, 执行 “工具”菜单中的 “选项”命令, 打开“选项”对话框, 选择该对话框中的 “编辑器”选项卡, 在该对话框中选择 “要求变量声明”项, 如图4.4所示, 然后单击 “确定”按钮.,4.4.1数学运算函数,表 数学函数,(2)求ASC码值Asc 函数用来求一个字符串中首字符的ASC码值. 语法格式为:As
26、c(string)参数string可以是任何有效的字符串表达式。如果 string 没有包含任 何字符,则在运行时会产生错误。 (3)求ASC码字符Chr$函数求一个ASC码值所对应的ASC码字符 。其语法格式 为:Chr$(charcode)参数charcode是一个用来识别某字符的 Long型数。charcode 的正 常范围为 0 255。0 到 31 之间的数字与标准的非打印 ASCII 代码相 同。例如,Chr(10) 可以返回换行字符。,(4)字符串转换为数值Val 函数的作用是返回包含于字符串内的数字,字符串中 是一个适当类型的数值。语法格式为:Val(string) (5)数值
27、转换为字符串Str$ 函数的作用是将一个数值表达式转换为一个字符串,且表达式 的类型不变。其语法格式为:Str$(number) 参数number为一 Long型数值表达式,其中可包含任何有效的数值表达式。 当一数字转成字符串时,总会在前头保留一空位来表示正负。如果 number 为正,返回的字符串包含一前导空格暗示有一正号。 使用 Format 函数可将数值转成必要的格式,如日期、时间、货币或其他用户自定义格式。与 Str$ 不同的是,Format 函数不包含前导空格来放置 number 的正负号。,2. 取整函数Int和Fix,Int和Fix函数的作用都是返回参数的整数部分.其语法格式为:
28、Int(number)Fix(number)参数number是 Double 或任何有效的数值表达式.如果 number 包 含 Null,则返回 Null。二者的区别在于,Fix函数去掉一个浮点数的小数部分,保留其整数 部分.而Int函数求不大于自变量的最大整数.,3. 数制转换函数,Hex$ 函数的作用是将一个十进制数转换成一个十六进制数. Oct$ 函数的作用是将一个十进制数转换成一个八进制数。 语法格式为:Hex$(number)Oct$(number) 说明: 参数number为任何有效的数值表达式或字符串表达式; 如果 number 不是一个整数,那么在执行前会先被四舍五入成最接近
29、的整数。,1.算术运算符,算术运算符用于数学计算,VB有8个算术运算符(其中减号运算符和取负运算符形式相同),在这8个算术运算符中,只有取负“”是单目运算符,其它均为双目(需要两个运算量)运算符。表3-3按优先级别的高低列出了算术运算符。,表 算术运算符,2.字符串运算符,字符串运算符只有“&”和“+”两个,如表3-4所示,表 字符串运算符,3.关系运算符,关系运算符属于双目运算符,用来对两个表达式的值进行比较,比较的结果为逻辑值,即若关系成立则返回True,否则返回False。在VB中,分别用-1和0表示True和False。表3-5列出了VB中的关系运算符。,表 关系运算符,4.逻辑运算符
30、,逻辑运算符的作用是将操作数进行逻辑运算,结果是逻辑值True 或False。逻辑运算符中,除Not为单目运算符外,其它都为双目运算符。,表 逻辑运算符,4.5.2 表达式 1表达式概念 表达式是由变量、常量、运算符、函数和圆括号,按一定的规则组成的式子,表达式运算结果的类型由参与运算的数据类型和运算符共同决定。 2表达式的种类 根据表达式中运算符的类别,可以将表达式分为算术表达式、字符串表达式、日期表达式、关系表达式和逻辑表达式等。 3表达式的书写规则 (1)每个符号占1格,所有符号都必须并排写在同一行上,不能出现上标和下标。 (2)不能按常规习惯省略乘号(*),如:2x要写成2*x。 (3
31、)只能使用小括号(),且必须配对。 (4)不能出现非法的字符,如。,4表达式中不同数据类型的转换,5运算符的优先级,如果表达式中操作数具有不同的数据精度,则将较低精度转换为操作数中精度最高的数据精度,即按Integer、Long、Single、Double、Currency的顺序转换,且Long型数据和Single型数据进行运算时,结果总是Double型数据。,当表达式中存在多种运算符共存时,按如下由高到低的顺序进行运算: (1)首先计算函数 (2)然后进行算术运算:幂运算负数乘除整除取模加减字符串连接 (3)再进行关系运算(=, , , =) (4)最后进行逻辑运算NotAnd OrXorEqvImp,