1、第五章 VB语法基础,本章内容及要求: 1. 熟悉VB程序中代码和语句书写规则; 2. 掌握VB的数据类型; 3. 掌握VB的 运算符和表达式的使用;,本章重点:变量和常量的定义及使用、运算符和表达式的使用。,本章难点:数据类型。,5.1 VB语言字符集及编码规则,5.1.1 VB的字符集,l 字母:大写英文字母AZ;小写英文字母az。 l 数字:0一9; l 专用字符:共27个,P48表。,5.1.2 编码规则与约定,(一)编码规则 1VB代码中不区分字母的大小写。 2同一行上可以书写多条语句,但语句间要用冒号“:”分隔。 3若一个语句行不能写下全部语句,或在特别需要时,可以换行。换行时需在
2、本行后加入续行符,1个空格加下划线“_”。,4一行最多允许255个字符。5注释以Rem开头,也可以使用单引号“”,注释内容可直接出现在语句的后面。6在程序转向时需用到标号,标号是以字母开始而以冒号结束的字符串。,(二) 约定,1为了提高程序的可读性,对于VB中的关键字其首字母大写,其余字母小写 2. 注释有利于程序的维护和调试Rem开始 或 单撇 。 例如: This is a VBREM This is a VB在6.0中新增了“块注释/取消块注释”(视图/工具栏/编辑),3通常不使用行号 4对象名命名约定:每个对象的名字由3个小写字母组成的前缀(指明对象的类型)和表示该对象作用的缩写字母组
3、成 。如命令按钮前缀:cmd,5.2 数据类型,5.2.1 标准数据类型,5.2.2 自定义类型,在模块级别中使用,用于定义包含一个或多个元素的用户自定义的数据类型。使用形式:Type 自定义类型名元素名 (下标) As 类型名元素名 (下标) As 类型名. . .End Type 见下例,Type StudentXh As StingXm As StringXb As StringNl As Integer Score As SingleEnd Type,例如: 对于一个学生的“学号”、“姓名”、“性别”、“年龄”、“入学成绩”等数据,为了处理数据的方便,常常需要把这些数据定义成一个新的数
4、据类型(如Student类型)。,5.3 常量和变量,5.3.1 常 量在程序运行过程中,其值不能被改变的量称为常量。在VB中有三类常量:普通常量符号常量系统常量 一、普通常量 1 整型常量(1)整型(Integer):表示-32768至32767之间的整数例如:10 110 20(2)长整型(Long):表示-2,147,483,648至2,147,483,647之间的整数例如:长整型常数的书写: 23&,通常我们说的整型常量指的是十进制整数,但VB中可以使用八进制和十六进制形式的整型常数,因此整型常数有如下三种形式:,1)十进制整数。如125,0,-89。20 2)八进制整数。以&或&O(
5、字母O)开头的整数是八进制整数,如&O25表示八进制整数25,即(25)8 ,等于十进制数21。3)十六进制。以&H开头的整数是十六进制整数,如&H25表示十六进制整数25,即(25)16 ,等于十进制数37。VB中的颜色数据常常用十六进制整数表示。,2、实型常量 1) 单精度实型(Single):有效数为7位表示-3.37E+38至3.37E+38之间的实数 2)双精度实型(Double):有效数为15位 实型常量的表示: 1)十进制小数形式。它是由正负号(+,-)、数字(09)和小数点(.)或类型符号(!、#)组成,即n.n,n!或n#,其中n是09的数字。 例如0.123、.123、12
6、3.0、123!、123#等都是十进制小数形式。 2)指数形式。 nEm 或 n.nEm, nDm 或 n.nDm例:1.25E+3 和 1.25D+3相当于1250.0 或者1.25103。,3、字符串常量 在VB中字符串常量是用双引号“”括起的一串字符,例如“ABC“,“abcdefg“,“123“,“0“,“VB程序设计“等。 说明: (1)字符串中的字符可以是所有西文字符和汉字、标点符号等; (2)“表示空字符串,而“ “表示有一个空格的字符串; (3)若字符串中有双引号,例如ABD“XYZ,则用连续两个双引号表示,即:“ABD“XYZ“ 4、逻辑(Boolean)数据类型只有两个值T
7、rue,或False。将逻辑数据转换成整型时:True为-1,False为0;其它数据转换成逻辑数据时:非0为True, 0为False。,5、日期常量日期(Date)型数据按8字节的浮点数来存储,表示日期范围从公元100年1月1日9999年12月31日,而时间范围从0:00:0023:59:59。一种在字面上可被认作日期和时间的字符,只要用号码符“#”括起来,都可以作为日期型数值常量。例:#09/02/99#、#January 4,1989#,#2002-5-4 14:30:00 PM#都是合法的日期型常量。说明:当以数值表示日期数据时,整数部分代表日期,而小数部分代表时间;例如1表示189
8、9年12月31日。大于1的整数表示该日期以后的日期,0和小于0的整数表示该日期以前的日期。,二、符号常量在程序中,某个常量多次被使用,则可以使用一个符号来代替该常量,这样不仅在书写上方便,而且有效地改进了程序的可读性和可维护性。 VB中使用关键字Const 声明符号常量。其格式如下: Const 常量名 As 类型|类型符号=常数表达式 例如:Const PI#=3.1415926535 等价于:Const PI As Double=3.1415926535,三、系统常量VB系统提供了应用程序和控件的系统定义常数。它们存放于系统的对象库中,在“对象浏览器”中的 Visual Basic(VB)
9、 和 Visual Basic for applications(VBA)对象库中列举了 Visual Basic 的常数,例如,要将文本框Text1的前景颜色设置为红色,可以使用下面的语句:Text1.ForeColor=vbRed这里的vbRed就是系统常量。这比直接使用16进制数来设置要直观得多。又如,窗口状态属性WindowsState可取0,1,2三个值,对应三种不同状态。在程序中使用语句 Myform.WindowsState=vbMaxmized,将窗口极大化,显然要比使用语句Myform.WindowsState=2 易于阅读和理解。,一.变量和常量的命名规则1. 以字母或汉字
10、开头,后可跟字母、数字或下划线组成,长度小于等于40个字符;2. 不能使用VB中的关键字;3. VB中不区分变量名的大小写.4. 为了增加程序的可读性,可在变量名前加一个缩写的前缀来表明该变量的数据类型。例如:strAbc, (字符串变量) iCount, (整型变量) dblx, (双精度变量) sYz (单精度变量),5.3.2 变 量,二.变量声明1.用Dim语句显式声明变量形式:Dim 变量名 AS 类型Dim 变量名类型符例 Dim iCount As integer , sum As single等价于 Dim iCount%, sum! 2.隐式声明Visual Basic允许用
11、户在编写应用程序时,不声明变量而直接使用,系统临时为新变量分配存储空间并使用,这就是隐式声明。所有隐式声明的变量都是Variant数据类型。Visual Basic根据程序中赋予变量的值来自动调整变量的类型。 例如:,下面是一个很简单的程序,其使用的变量a, b, Sum都没有事先定义。 Private Sub Form_Click() Sum = 0 a = 10: b = 20 Sum = a + b Print “Sum=“; Sum End Sub,3强制显式声明Option Explicit语句,良好的编程习惯都应该是“先声明变量,后使用变量”,这样做可以提高程序的效率,同时也使程序
12、易于调试。Visual Basic 中可以强制显式声明,可以在窗体模块、标准模块和类模块的通用声明段中加入语句:Option Explicit,5.4 变量的作用域,概述:,在VB中,由于可以在过程中和模块中声明变量,根据定义变量的位置和定义变量的语句不同,变量可以分为: 局部变量(过程级变量) 窗体/模块级变量(私有的模块级变量,能被本模块的所有过程和函数使用) 全局级变量(公有的模块级变量)。,5.4.1 过程级变量局部变量,局部变量:在过程内用声明的变量,只能在本过程中使用。,在过程内部使用 Dim 或者 Static 关键字来声明的变量,只在声明它们的过程中才能被访问或改变该变量的值,
13、别的过程不可访问。所以可以在不同的过程中声明相同名字的局部变量而互不影响。,例: Private Sub Form_Load() Dim n% n= 10 End SubPrivate Sub From_Click() Dim n% Print “n=“;n End Sub,程序运行后单击窗体,其输出结果是什么?,5.4.2 窗体/模块级变量,窗体/模块级变量:在“通用声明”段中用Dim语句或用Private语句声明的变量,可被本窗体/模块的任何过程访问。但其他模块却不能访问该变量。例如:在“通用声明”段声明如下变量 Private s As String Dim a As Integer,b
14、 As Single,5.4.3 全局变量,全局变量也称公有的模块级变量,在窗体模块或标准模块的顶部的“通用”声明段用Public关键字声明,它的作用范围是整个应用程序,即可被本应用程序的任何过程或函数访问。例如:Public a As Integer,b As single,3种变量声明及使用规则如下表:,一、公用变量与局部变量同名在不同过程中定义同名变量,它们互不影响,但若在一过程中定义使用了与全局变量同名的变量,则就应注意。,5.4.4 关于多个变量同名,注意:在过程中,如果定义了与模块级变量(在通用部分使用Private或Dim声明的变量),则在该过程内不能引用同名的模块级变量。例如,
15、上面的例子中,如果将定义全局变量的语句Public Temp As Integer改为Private Temp As Integer 则在Command1的单击事件中就不使用模块级的Temp变量。,Public Temp As Integer 定义全局变量 Private Sub Form_Load() Temp = 1 将全局变量Temp 的值设置成 1 End Sub Private Sub Command1_Click() Dim Temp As Integer 定义局部变量 Temp = 2 将局部变量Temp 的值设置成 2Print “temp=“; Temp Print “tem
16、p=“; Form1.Temp End Sub Private Sub Command2_Click()Print “temp=“; Temp End Sub,二、全局变量同名如果不同模块中的全局变量使用同一名字,则通过同时引用模块名和变量名就可以在代码中区分它们。例如,如果有一个在 Form1 和 Module1 中都声明了公用的 Integer 变量 intX,则把它们作为 Module1.intX 和Form1.intX 来引用便得到正确值。也就是说如果不同模块中的全局变量使用同一名字,引用时就需要使用“模块名.变量名”的形式来区分它们。,5.4.5 静态变量,除作用域之外,变量还有存活
17、期,在这一期间变量能够保持它们的值。在应用程序的存活期内一直保持模块级变量和全局变量的值。但是,对于Dim声明的局部变量仅当过程执行期间存在,当一个过程执行完毕,它的局部变量的值就已经不存在,而且变量所占据的内存也被释放。当下一次执行该过程时,它的所有局部变量将重新初始化。,概念,局部变量的存活期由其定义的关键词来决定。,局部变量声明:Dim声明:随过程的调用而分配存贮单元,变量的初始化;过程体结束,变量的内容自动消失,存贮单元释放。Static声明,每次调用过程,变量保持上次调用结束时的值。声明形式:Static 变量名 AS 类型Static Function 函数过程名(参数列表) As
18、 类型Static Sub 子过程名(参数列表)注意:过程名前加Static,表示该过程内的局部变量都是静态变量。,例5.2 有一个人编了下面一段程序,想用变量n记录单击窗体的次数。 Private Sub Form_Click()Dim n As Integern = n + 1Print “已单击次数:“; n & “次“ End Sub,分析程序运行后多次单击窗体的输出结果:,要记录单击窗体次数,如何实现?并比较使用模块变量和静态变量的差别。,Private Sub Form_Click()Dim i% ,isum%For i = 1 To 5isum = sum(i)Print isu
19、m,Next iEnd Sub,Private Function sum(n As Integer)Dim j As Integer j = j + nsum = j End Function,1 2 3 4 5,Static j As Integer 结果如何?,补充例题:,5.5 运算符和表达式,一. 运算符5.5.1. 算术运算符(均是双目运算,ia=3) 例:5+10 mod 10 9 / 3 +2 2 结果是:,10,说明:计算时自动调整精度5.5.2. 字符串运算符与字符串表达式 字符串运算符有: 、+ 。 功能是字符串连接 例如:“ABCD“ + “EFGHI“ 结果为:ABCD
20、EFGHI “ VB ” & “程序设计教程” 结果为:VB程序设计教程 说明:当连接符两旁的操作量都为字符串时,上述两个连接符等价。它们区别是: +(连接运算):两个操作数均应为字符串类型;&(连接运算):两个操作数既可为字符型也可为数值型,当是数值型时,系统自动先将其转换为数字字符,然后进行连接操作。,例: “100“ + 123 结果为 223 “100“ + “123“ 结果为 100123 “ Abc“ + “123“ 出错 “ 100“ & 123 结果为 100123100 & 123 结果为 100123“ Abc“ & “123“ 结果为 Abc123 “ Abc“ & 12
21、3 结果为 Abc123,注意:使用运算符“&”时,变量与运算符“&”之间应加一个空格。这是因为符号“&”还是长整型的类型定义符,如果变量与符号“&”接在一起,VB系统先把它作为类型定义符处理,因而就会出现语法错误。,5.5.3 关系运算符与关系表达式,关系运算符都是双目运算,是用来比较两个运算量之间的关系,关系表达式的运算结果为逻辑量。若关系成立,结果为True,若关系不成立,结果为False。VB中的关系运算符如下表所示。,关系运算的规则如下:(1)当两个操作式均为数值型,按数值大小比较。(2)字符串比较,则按字符的ASCII码值从左到右一一比较,直到出现不同的字符为止.。例: “ ABC
22、DE “ “ ABRA “ 结果为 False,(3)数值型与可转换为数值型的数据比较,如:29“189“ ,按数值比较,结果为False。 (4)数值型与不能转换成数值型的字符型比较,如:77“ sdcd“ ,不能比较,系统出错。 (5)“Like”运算符是VB6.0新增加的。其使用格式为:str1 Like str2,5.5.4 逻辑运算符与逻辑表达式 Not 逻辑非为单目运算符(要求一个操作数),其它为双目运算符。条件表达式1 And 条件表达式2 条件表达式均为T 结果为T条件表达式1 Or 条件表达式2 条件表达式有一个T 结果为T,说明: (1)逻辑运算符的优先级不相同,Not(逻
23、辑非)最高,但它低于关系运算,Imp(逻辑蕴含)最低。 (2)VB中常用的逻辑运算符是Not、And和Or。它们用于将多个关系表达式进行逻辑判断。 例如,数学上表示某个数在某个区域时用表达式: 10X=10 And X20 (3)参与逻辑运算的量一般都应是逻辑型数据,如果参与逻辑运算的两操作数是数值量,则以数值的二进制值逐位进行逻辑运算(0当False,1当True)。关系表达式与逻辑表达式常常用在条件语句与循环语句中,作为条件控制程序的流程走向。,5.5.5 日期型表达式 日期型数据是一种特殊的数值型数据,只能有下面3种情况: 1一个日期型数据可以相减: DateB-DateA 结果是一个数
24、值型整数(两个日期相差的天数)。 例如:#05/08/2002# - #05/01/2002# 其结果为数值:7 2一个日期型数据(DateA)与一数值数据(N)可作加法运算:DateA+N 其结果仍是一个日期型数据。 例如:#05/01/2002# +7 其结果为日期型数据:#05/08/2002# 3一个日期型数据(DateA)与一数值数据(N)可作减法运算: DateA-N 其结果仍是一个日期型数据。 例如:#05/08/2002# - 7 其结果为日期型数据:#05/01/2002#,5.5.6 运算符的执行顺序,表达式中出现了多种不同类型的运算符时,其运算符优先级如下:算术运算符=字
25、符运算符关系运算符逻辑运算,说明:1当一个表达式中出现多种运算符时,首先进行算术运算符,接着处理字符串连接运算符,然后处理比较运算符,最后处理逻辑运算符,在各类运算中再按照相应的优先次序进行。2可以用括号改变优先顺序,强令表达式的某些部分优先运行。括号内的运算总是优先于括号外的运算。对于多重括号,总是由内到外。,. 表达式的书写中需注意的问题(1)运算符不能相邻。例a+-b是错误的。(2)乘号不能省略。例x 乘以y 应写成:x*y(3)括号必须成对出现,均使用圆括号。(4)表达式从左到右在同一基准并排书写,不能出现上下标(5)要注意各种运算符的优先级别,为保持运算顺序,在写表达式时需要适当添加括号(),若用到库函数必须按库函要求书写。 如: (b-sqr(b*b-4*a*c)/(2*a)(a+b)/(a-b),