1、第4章 Visual Basic程序设计基础,本章主要内容,Visual Basic语言字符集及编码规则 数据类型 常量和变量 运算符和表达式 常用内部函数,学习重点,清楚各种常用数据类型,掌握其表示以及各类数据在内存中的存放形式,了解自定义数据类型 理解常量和变量的概念、掌握其定义和使用 掌握各类运算符、表达式和常用内部函数的功能和使用方法,4.1.1 Visual Basic语言字符集,VB语言字符集与其他高级程序设计语言的字符集类似,包含字母、数字和专用字符三大类,共计89个字符: 字母:大写英文字母AZ;小写英文字母az 数字:09 专用字符:共计27个,见表4-1,4.1.2 编码规
2、则与约定,1.编码规则 Visual Basic中的语句是执行具体操作的指令,每条语句以回车键结束。在一般情况下,输入程序时要求按行书写,一行上书写一条语句,一句一行。 Visual Basic允许使用复合语句行,即在同一行上书写多条语句,则各语句间必须用冒号“:”隔开;注意:一个语句行的长度最多不能超过1023个字符,且在一行的实际文本之前最多只能有256个前导空格。 Visual Basic允许一条较长的语句分多行书写,但必须在续行的行末加入续行符“ _”(一个空格和下划线),表示下一行与该行属于同一个语句行;一个逻辑行最多只能有25个后续行。,4.1.2 编码规则与约定,1.编码规则 V
3、B代码不区分字母的大小写。 VB代码中必须使用西文标点。 VB标识符的命名规则: 必须以字母或汉字开头,由字母、汉字、数字或下划线组成 字符必须并排书写,不能出现上下标形式 长度小于等于255个字符 不可以是系统关键字 不能包含空格、西文标点符号和类型说明符%、&、!、#、$ 在作用域范围内必须唯一 注意:虽然VB中可以使用汉字进行标识符命名,但是为了书写方便,一般不使用汉字。,4.1.2 编码规则与约定,1.编码规则 使用注释增加程序的可读性。VB中提供了两种格式的注释语句。 格式1:Rem 注释内容 格式2: 注释内容 说明:注释语句是非执行语句,仅仅对相应位置上的代码起到注释作用。格式1
4、中的关键字Rem和注释内容之间必须用空格隔开;注释内容中可以包含任意字符(西文、中文等);格式1是以单独注释语句形式出现;格式2在使用时较格式1更加灵活,可以以单独注释语句形式出现,也可直接出现在某行语句后面进行注释,但是续行符后面不能加注释。,4.2 数 据 类 型,4.2.1 数值数据类型 4.2.2 字符数据类型String 4.2.3 逻辑数据类型Boolean 4.2.4 日期数据类型Date 4.2.5 对象数据类型Object 4.2.6 变体数据类型Variant,1Integer和Long,用于保存带有符号的、不带小数点和指数符号的整数,存放整数的字节最高位是符号位。整数运算
5、速度快、精确,但表示数的范围小。 在Visual Basic中整数的表示形式为n% 或 n&。 当表示Integer型整数时,n是-32768+32767范围内的整数,%是整型的类型说明符,可省略; 当表示Long型整数时,n是-2147483648 ,2147483647范围内的整数,&是长整型的类型说明符。 356、+356、-356、356%合法Integer型常量 35689、-1246978、356&合法的Long型常量,2Single、Double,用于保存浮点实数(带有小数部分的数值),浮点实数表示数的范围大,但有误差,且运算速度慢。 Visual Basic中规定单精度浮点数精
6、度为7位,双精度浮点数精度为1516位。 单精度型和双精度型常量有两种表示形式,即小数形式和指数形式。指数形式由符号、指数和尾数3部分组成;单精度浮点数和双精度浮点数的指数分别用“E”(或“e”)和“D”(或“d”)来表示,含义为“乘以10的幂次”。,2Single、Double,单精度型的合法表达形式:n!、nEm、n.nEm 双精度型的合法表达形式:n.n、n#、nDm、n.nDm 其中,n、m是无符号整数 -2.15!、0.123!、0.34625E+3、2.34E8、123.4E-3表示合法的单精度数 -346.25、1234567.89、90.3#、3D10、1.2D-6、0.346
7、25E+3#表示合法的双精度数,2Single、Double,单精度型和双精度型常量的小数形式若超出有效位数,进行小数部分的截取;若整数部分超出有效位数,自动转为指数形式表示。 当幂为正数时,正号可以省略。即2.34E8等价于2.34E+8,3D10等价于3D+10 同一个实数有多种表示形式,例如,-346.25可以表示为-3.4625D+2、-0.34625D+3、-34.625D+1、-3462.5D-1、-34625.D-2等。一般将-3.4625D+2称为“规格化指数形式” Visual Basic系统默认情况的直接实型常数都是双精度类型,即-346.25与-346.25#是等价的双精
8、度类型常数。,3Currency,货币数据类型是为表示钱款而设置的,是定点实数或整数,精确到小数点后4位和小数点前15位,用于货币运算。 表示形式在数字后加符号,例如,-346.25、2346、0.1234都是合法的货币数据形式。 Visual Basic规定在数值型常数后加类型说明符可以改变数据的类型,从而改变数据在内存中的存储空间大小。因此3456%、3456&、3456!(或0.3456E+4)、3456#(或3456.0、0.3456D+4、0.3456E+4#)、3456都表示与3456同值的数据,但是类型不同在计算机内存中所占用的空间不同。,4Byte,字节实际上是一种数值类型,以
9、1个字节的无符号二进制数存储。,4.2.2 字符数据类型String,字符串是字符序列,由西文字符、汉字和标点符号组成,在Visual Basic中字符串常量两端用双引号“括起,例如:“456“、“VB程序设计“、“01/02/2008,PM-12:30:24“等。 说明: (1)“是长度为0(既不含任何字符)的字符串,称为空字符串(或空串)。 (2)若字符串中有双引号,可用连续的两个双引号“”表示字符串中的“,示例如下: “学习“VB“课程“ 表示字符串:学习“VB“课程 (3) Visual Basic中的字符串变量有定长和变长两种,在定义时是有区别的。,4.2.3 逻辑数据类型Boole
10、an,逻辑数据类型又称布尔类型,用于逻辑判断,只有True和False两种取值,描述“真/假”、“对/错”、“是/否”、“开/关”等两种状态信息。之前章节中介绍的Enabled、Visible、FontBold等就是取值为True或False的逻辑型属性,因此常常与条件判断语句配合,获取对象的状态信息。,4.2.4 日期数据类型Date,日期型数据以8个字节的浮点数值表示,可以表示的日期范围为公元100年1月1日9999年12月31日,时间范围为0:00:0023:59:59。 日期型数据有两种表示法:一种是任何在字面上表示日期和时间的字符,两端用“#”括起来,如#3/8/2008#、#3-8
11、-2008#、#March 8 2008#、#2008-3-8 20:20:20 PM#;另一种是用数值表示,数值的整数部分表示距离1899年12月30日的天数,小数部分表示时间,0为午夜,0.5为中午12点,负数代表的是1899年12月31日之前的日期和时间。,4.2.5 对象数据类型Object,对象型数据用来表示图形、OLE对象或其他对象,也可以使用对象型数据的属性和方法。,4.2.6 变体数据类型Variant,变体数据类型是一种可变的数据类型,可以表示任何值,包括数值、字符串、日期/时间等。变量如果不加类型说明,系统默认为变体型(Variant),可使用VarType函数检测变体型变
12、量中保存的数值究竟是何类型。Variant类型的变量还可以包含Empty(未赋值)、Null(未知或缺少的值,常见于数据库)和Error(出现错误时的值)3个特殊值,读者可以使用IsEmpty函数来测试一个Variant变量是否被赋过值,使用IsNull函数来测试一个Variant变量是否具有Null值。,4.3 常量和变量,4.3.1 数据的存储 程序运行时,使用的各种类型数据都是存放在内存单元中,并且给内存单元取名,计算机就是通过内存单元名来访问其中的数据。内存中的存储单元按照数据的存取特性分为静态存储区和动态存储区。 静态存储区中的存储单元一旦分配,要到应用程序结束时才释放空间;动态存储
13、区中的单元则可以在应用程序执行中释放,数据也可以被多次更新。 Visual Basic中的各类数据都有常量和变量形式。常量是存放在静态存储区的常量区中的数据。常量区一旦放入数据就不允许用户修改,即常量在程序执行期间,其值是不发生变化的,直到数据单元被释放。变量是存储单元的代号,对应于存放在动态存储区的单元或静态存储区的非常量区;程序执行过程中,使用变量来暂时存放程序中有用的数据,变量的内容可以允许多次更新(存入新的数据)。,4.3.2 常量,根据表示形式可以将常量分为直接常量和符号常量。 1直接常量(字面常量) 直接常量可从形式上判断其类型和大小,如123、345%为Integer类型常量、2
14、30.0为Double型常量、“asdf”、“230.0”为字符串常量等,也可以在常量值后加类型说明符(%、&、!、#、)来说明常数的数据类型。 在Visual Basic中的整型常量中,默认是用十进制表示的数值,还有八进制、十六进制。八进制常数在数值前加&O,如&O567,&O777等;十六进制常数在数值前加&H,如&H189,&HFFFF等。Visual Basic中的颜色数据常用十六进制整数表示,如&H0000FF00表示绿色。,2符号常量,日常学习时经常会遇到一些常数值被反复使用,也会用到一些较难记住的数据,通常是约定一个特定的符号来替代该数据,例如,约定表示圆周率3.14159253
15、5。在计算机语言中同样也沿用此方法,使用符号常量(一个有意义的名字),取代值不变的常数。Visual Basic中的符号常量分为用户自定义符号常量和系统符号常量。,(1)用户自定义符号常量,在Visual Basic中,允许用户用Const语句定义符号常量来代替指定的值,其格式如下: Private | Public Const 常量名 As 类型名=表达式, 常量名2=表达式2 Const PI As Double=3.1415926535 声明PI为双精度符号常量,值为3.1415926535 Const NATIONALDAY As Date=#10/1/1949# 声明NATIONAL
16、DAY为日期常量,值为1949年10月1日,格式说明, Public选项只能用在标准模块的通用部分,表示该符号常量可以在整个应用程序中使用,Private选项则可用在模块(包括窗体模块和标准模块)的通用部分,表示该符号常量可以在该模块范围内使用。默认情况为Private。 常量名的命名遵循Visual Basic标识符的命名规则,符号常量名常常使用大写字母。 As类型名:说明该符号常量的数据类型,若默认该项,则由其右侧表达式的数据类型决定。 用户也可以在常量名后加类型说明符,定义该常量的类型,示例如下。 Const PI#=3.1415926535 声明PI为双精度符号常量,值为3.14159
17、26535,格式说明, 表达式可以由运算符、常量(直接常量和已定义的符号常量)组成,必须具有一个确定的值;注意,该表达式中绝对不允许使用变量、函数。示例如下。 Const TAXMIN!=0.05 Const TAXMAX!=10 * TAXMIN 符号常量一旦声明,在之后的代码中只能引用,不能再次定义或赋值。,(2)系统符号常量,Visual Basic系统本身提供了一些符号常量,存放于系统的对象库中。如vbOK、vbRed、vbYes等,用户可以在“对象浏览器”中查看 此外,如Visual Basic for Applications(VBA)、ActiveX控件、Microsoft Ex
18、cel和Microsoft Project等提供对象库的应用程序也提供了符号常量,这些符号常量可与应用程序的对象、方法和属性一起使用。 为避免不同对象中同名变量的混淆,在引用时可使用2个小写字母前缀,区分引用哪个对象库中符号常量。示例如下: vb表示引用VB和VBA中的符号常量。 xl表示引用Excel中的符号常量。 db表示引用Data Access Object中的符号常量。,(2)系统符号常量,在使用时既可以使用系统符号常量,也可以直接使用系统符号常量对应的数值。示例如下。 Form1.BackColor=vbRed Form1.BackColor=255 Form1.BackColor
19、=&HFF 以上3条语句执行时都能将窗体的背景色更新为红色,显然使用系统符号常量vbRed,程序代码的可读性更强。,4.3.3 变量,在程序运行过程中,内存单元中数据值可以改变的称为变量。一个变量必须有一个名字和相应的数据类型,通过名字来引用一个变量,而数据类型则决定了该变量的存储方式和在内存中占据存储单元的大小。 变量名实际上是一个符号地址,程序编译连接时,由系统给每一个变量分配一个内存地址,在该地址的存储单元中存放变量的值。在程序中从变量中取值,实际上是通过变量名找到相应的内存地址,从其存储单元中取数据。注意变量名和变量值这两个概念的区别。,4.3.3 变量,在Visual Basic中,
20、变量有两种形式,即对象的属性变量和内存变量。创建对象时,Visual Basic系统会自动为它创建一组变量即属性变量,并为每一个属性变量设置其默认值。这类变量可供程序员直接使用,如引用其值或赋予新值。内存变量就是下面通常所讲的变量,它是用户根据需要所声明的。,1变量的声明(显式声明),与符号常量一样,要求变量“先声明,后使用”。声明变量就是定义变量名和变量数据类型,从而决定系统为它分配多少存储单元存放数据。 (1)在定义变量时指定其数据类型。 格式:Declare 变量名 As 类型名 说明: Declare可以是Dim、Public、Private、Static或Redim。 Dim用于在模
21、块的通用部分定义模块级变量以及在过程中定义过程级变量。 Private用于在模块的通用部分定义模块级变量。 Public用于在模块的通用部分定义全局变量。 Static用于过程中定义过程级静态变量。 Redim用于重新定义动态数组的大小。,(1)在定义变量时指定其数据类型,格式:Declare 变量名 As 类型名 说明: 提示:仅在某个过程中使用的变量,就在该过程中用Dim声明定义,若要在多个过程中使用公共变量,则必须在模块的通用部分用Dim、Private、Public声明定义此变量。 变量名遵循Visual Basic标识符的命名规则。命名时应尽量有意义,做到“顾名思义”。如Sum、Av
22、e_Score、PersonId等都是合法的变量名。可在变量名前加一个缩写的前缀来表明该变量的数据类型。示例如下。 intSum、sngAveScore、strPersonId,(1)在定义变量时指定其数据类型,格式:Declare 变量名 As 类型名 说明: As类型名:类型名可以是基本数据类型和用户定义的类型,也可以省略,省略后变量为默认数据类型(默认情况下为变体型),但变体型占用内存空间较多,执行效率低。示例如下。 Public a As Integer 定义一个Integer型全局变量a Dim d定义一个变体型变量d,等价Dim d As Variant,(1)在定义变量时指定其数
23、据类型,格式:Declare 变量名 As 类型名 说明: 定义字符串类型的变量的方法: Dim 字符串变量名 As String 变长字符串变量 Dim 字符串变量名 As String * 字符数 定长字符串变量 定长字符串变量的长度,由*号后面的字符数决定,若赋予定长字符串变量的字符数少于指定的字符数,则尾部用空格补足;若超过指定的字符数,系统自动截去尾部超出部分的字符。示例如下: Dim strExpress1 As String 定义变长字符串变量strExpress1 Dim strStuId As String * 8 定义定长字符串变量strStuId存放8个字符,(1)在定义
24、变量时指定其数据类型,格式:Declare 变量名 As 类型名 说明: 一条声明语句可将多个声明组合起来,在这种格式下,即使几个变量的类型一致,也必须分别用“As 类型名”声明各自的类型。示例如下: Dim i As Long, j As Double Dim YourName As String * 20, BillsPaid As Currency Private a, b, c As Integer 这里a和b为Varient型,c为Integer型,(2)用类型说明符定义变量,对于具有类型说明符的数据类型,可以采用如下简单格式定义变量: Declare 变量名类型说明符 说明: De
25、clare可以是Dim、Public、Private、Static或Redim中的任意关键字。 基本类型的类型说明符(%、&、!、#、)在表4-2类型说明符列中列举出。 变量名与类型说明符之间没有空格。示例如下。 Dim i&, J#, K! 定义长整型变量i,双精度变量J,单精度变量K,2变量的默认声明(隐式声明),Visual Basic系统允许用户不作声明而直接使用变量,这样的变量是过程级的变体型变量,只能在过程中使用。 以下事件过程中的变量a未经声明定义。 Private Sub Form_Click() a=Val(Text1.Text) Print a End Sub 上述代码等价
26、于: Private Sub Form_Click() Dim a As Variant a=Val(Text1.Text) Print a End Sub,3 Option Explicit强制显式声明,Visual Basic系统提供了强制用户对变量进行强制显式声明的措施: 在模块代码窗口的通用部分开头直接输入Option Explicit语句 或者执行“工具”菜单的“选项”命令,在“编辑器”选项卡中,选中“要求变量声明”复选框,Visual Basic系统就自动生成语句Option Explicit,并加到模块的声明部分。 通过对变量进行强制显式声明,凡是发现程序中使用未经显式声明的变量
27、,系统将自动显示一个“变量未定义”错误警告信息框。,4变量默认数据类型的设置,在声明变量中没有说明数据类型,则变量的默认数据类型为Variant。Visual Basic系统允许用户在声明变量前,自行设置或修改变量默认的数据类型。 格式:DefType 字母范围 说明: (1)DefType语句放在模块声明部分的开头,设置指定字母范围开头的变量的默认数据类型 (2)Def是系统关键字,Type是基本数据类型标志,用以下格式分别表示各基本类型:Byte、Int、Lng、Sng、Dbl、Cur、Str、Bool、Date、Obj、Var。注意,在Def和类型标志之间不能有空格 (3)字母范围采用“
28、字母-字母”的形式表示,其中字母可以是AZ中的任何一个(大小写均可)。语句中说明的字母可以作为该类型的变量名,而且以该字母开头的变量名也是那种类型的变量。,4变量默认数据类型的设置,(4)DefType语句不允许重复定义。示例如下。 DefSng C-F 该语句定义后,CF以及凡是用CF开头命名的变量默认类型是单精度型 Dim a As Integer, b, c As Double, d, f 定义a为整型变量,b为变体型变量,c为双精度型变量,d和f均为单精度型变量 又如,若要将模块中的变量的默认类型全部设置为单精度型,可以在模块的通用部分按如下方法定义: DefSng A-Z Dim a
29、 As Integer, b, c As Double, d, f 定义a为整型变量, c为双精度型变量,b、d和f均为单精度型变量,5变量的赋值,给变量赋值实际就是将数据放入指定变量的内存空间。使用声明语句定义一个变量后,Visual Basic系统会自动给变量赋予一个默认的初始值。 (1)数值类型变量的初值为0。 (2)字符串型变量的初值为空串(“”)。 (3)布尔类型变量的初值为False。 (4)日期类型变量的初值为#1899-12-30 0:00:00#。 (5)变体类型变量的初值为Empty。,赋值语句,格式: 变量名=表达式 Let变量名=表达式 作用:将赋值运算符“=”右侧表达
30、式的值赋给左侧的变量。 说明: (1)两种格式完全等价,通常采用第1种格式。 (2)左侧的变量包括属性变量和内存变量。 (3)表达式包括常量(直接常量和已定义的符号常量)、变量、对象属性、函数形式以及由它们与运算符的组合形式。,赋值注意以下问题,(1)给变量赋值的语句兼有计算和赋值双重功能,即先完成赋值号右侧表达式的计算,然后将计算好的表达式的值赋给左侧的变量。示例代码如下。 a=12.4 + 56.12 先计算右侧表达式,后将计算结果赋给左侧的变量a (2)在某一个时刻,变量的内存单元只能存放一个数据,要修改数据则采用赋值的方法实现。注意,变量总是按语句执行次序,存放最近一次赋值的数据。,赋
31、值注意以下问题,(3)一般要求赋值号两边的数据类型一致,这样才能完成正确的赋值,即赋值号左侧的数据一般情况下只能接收与它类型相同的表达式的值。当赋值时表达式的值的类型并不完全和变量类型相同时,系统根据自动转换的原则将值转换成与变量相同的类型后赋值,一旦自动转换失败,则赋值也失败,系统出错,赋值注意以下问题,(4)Variant数据类型可在不同场合代表不同数据类型。当指定变量为Variant变量时,Visual Basic会自动完成各种必要的类型转换。 (5)区分赋值号和关系运算符中的判等号。在Visual Basic中,系统会根据等号所处的位置来区分是赋值号还是判等号:仅在赋值语句最左端的等号
32、是赋值号,其余的均为判等号。判等号所在的表达式一般不能单独以语句的形式出现,而赋值号则是以赋值语句形式出现;赋值号两边的数据是不能随便相互交换的,否则可能运行出错或产生逻辑上的错误,而判等号两边的数据是可以相互交换的。,4.4 运算符和表达式,碰到具体问题时,不光是要表示待处理的数据,而且还要运用有效的方案处理数据、解决问题。例如,已知三边,求三角形的面积。与数学中一样,计算机语言中,对数据的加工处理称为运算(即操作);被运算的对象,即数据,称为操作数(或运算量);用运算符或操作符来描述最基本的运算形式。因此合理地运用运算符描述对哪些数据、以何种顺序、进行什么样的操作,是本节学习的关键。 Vi
33、sual Basic中定义了丰富的运算符,包括算术运算符、字符串运算符、关系运算符和逻辑运算符和对应的表达式。,4.4.1 算术运算符和表达式,1算术运算符+ 加 - 减(负号) * 乘 / 除 整除(取商的整数部分、要求操作数为整型数据) Mod 取余运算 (要求操作数为整型数据) 乘方运算符 & 字符串连接运算,4.4.1 算术运算符说明,(1)幂运算用来计算乘方和方根 5 2 5的平方 125 (1 / 3) 125的立方根 注意,由于幂运算的运算优先级最高,当指数部分是一个表达式,必须加上括号,否则上述表达式125 1 / 3,将先完成125 1运算,后进行除3运算,即改变了原运算顺序
34、。,4.4.1 算术运算符说明,(2)整除和取余运算。 整除()运算是整数之间的除运算,其结果是商的整数部分(即普通除运算结果的整数部分),所以又称为商取整除法。 8 5 8整除5,结果为1 取余(Mod)运算是整数之间的取余运算,结果为第1个操作数整除第2个操作数后所得的余数部分。取余运算结果的正负号始终与第一个操作数的符号相同。 8 Mod 5 结果为3 8 Mod - 5 结果为3 - 8 Mod 5 结果为- 3 - 8 Mod - 5 结果为- 3,注意问题,(1)算术运算符要求参与运算的操作数是数值型,运算结果也是数值型;若操作数是表示数值的字符串或逻辑型,则按自动转换的原则转换成
35、数值类型后参与运算。 2 * “3.14” * 3 数值字符串3.14“转换为3.14参与算术运算,结果是18.84 “3D2” + 20 5 数值字符串3D2“转换为300.0参与算术运算,结果是315.0 False + 10 True 逻辑值False转换为0、True转换为-1参与算术运算,结果是11,注意问题,(2)除-(取相反数)为单目运算符外,其余的算术运算符均为双目运算符。 (3)在算术运算中若操作数的数据类型相同,则运算结果的数据类型也为该类型;若数据类型不一致,具有不同的数据精度,则Visual Basic根据精度大小(数值型数据按精度大小从小到大排序为IntegerLon
36、gSingleDoubleCurrency),将精度低的数据转换成精度高的数据类型后进行运算,规定运算结果的数据类型以精度高的数据类型为准,,注意问题,但以下几种特殊情况除外: 当Long型数据与Single型数据运算时,结果为Double型数据。 除法和幂运算的结果总是Double型,与操作数类型无关。 整除()和取余(Mod)运算时,若操作数为实数,则先对其进行四舍六入五成双的取整,然后完成整除或取余,结果仍为整型或长整型。 256 + 890 加号两侧操作数均为Integer型,运算结果也是Integer型 483 * 12.3! 乘号左侧操作数为Integer型,右侧为Single型,
37、运算结果以精度高的Single型为准 4 3 幂运算的结果是Double型 8.5 5.56 先将操作数8.5和5.56进行四舍六入五成双的取整,分别得到8和6,整除结果是1,2算术表达式,由算术运算符、圆括号、函数、常量和变量组成的式子称为算术表达式,算术表达式的值是数值型的。 0.5 * g * t 2 + v0 * t (x% Mod 10 ) * 10 + x% 10 算术表达式的值是有类型的,所以也存在着值的溢出(超出取值范围)现象,运算时要注意。 235 + 32760 出错“溢出”,表达式的值也是Integer型,32995超出了整型数据的范围,3日期型表达式,日期型数据是一种特
38、殊的数值型数据,它们之间只能进行加(+)、减()算术运算。日期型表达式由算术运算符“+”、“”、算术表达式、日期型常量和变量、函数组成。一般有以下3种情况: (1)两个日期型数据进行减法运算,结果是一个数值型数据(两个日期相差的天数)。 #05/09/2008# - #05/01/2008# 表达式值为8 (2)一个日期型数据与一数值型数据进行加法运算,结果是一个日期型数据。 #05/01/2008# + 8 值为日期型数据#05/09/2008# (3)一个日期型数据与一数值型数据进行减法运算,结果是一个日期型数据。 #05/09/2008# - 8 表达式值为日期型数据#05/01/200
39、8#,4.4.2 字符串运算符和字符串表达式,Visual Basic中的字符串运算符主要用来将两个字符串连接成一个字符串,Visual Basic提供了两个字符串的连接符,即“&”和“+”。 “&”和“+”是双目运算符,用来将两个字符串首尾连接的,连接结果仍为字符串类型。优先级相同,但低于算术运算符。 “江南大学” & “信息工程学院” 连接结果为“江南大学信息工程学院“ “江南大学” + “信息工程学院” 连接结果为“江南大学信息工程学院“ “字符串变量a中存放的内容是“ & a 若a中的内容为“VB”,则连接结果为“字符串变量a中存放的内容是VB“,注意问题,(1)使用运算符“&”时,操
40、作数与“&”之间必须加上一个空格分隔。因为符号“&”还是长整型数据的类型定义符,若操作数与符号“&”连接在一起,VB系统优先将它作为长整型数据类型符处理,继而就会出现语法错误 (2)“+”与“&”运算符在使用时的区别如下: “&”运算在连接运算前,系统自动先将两边的非字符串类型数据转换成字符串型数据,然后再进行连接操作 运算符“+”两边仅当都是字符串类型数据时,才进行字符串的连接操作;否则系统将运算符“+”用作算术运算符,进行求和运算:若其中一个操作数是数值型或逻辑型,另一个操作数是数字字符串或逻辑型,则系统会自动将数字字符串和逻辑型转换为数值型,然后进行算术求和运算;否则系统由于无法自动将操
41、作数转换为数值型,则出现“类型不匹配”的出错信息,4.4.3 关系运算符和关系表达式,关系运算用于对两个数据进行比较,比较结果为逻辑值“True”或“False” 关系运算符大于 = 大于等于不等于 = 等于 Like 字符串匹配 Is 用来比较两个对象的引用变量,4.4.3 关系运算符和关系表达式,关系运算用于对两个数据进行比较的规则: 两个数值型数据按大小比较 两个字符型数据按ASCII值比较:从第一个字符开始依次比较对应位置字符的ASCII码值,直到遇到第一对ASCII码不相等的字符为止,ASCII码大的字符串大。若两字符串相等,则字符串中的每个字符都相等且字符串长度也相等;汉字字符大于
42、西文字符,4.4.4 逻辑运算符和逻辑表达式,逻辑运算是对逻辑值进行的运算,结果是逻辑型值True/False 逻辑运算符 Not 逻辑非 And 逻辑与 Or 逻辑或 Xor 逻辑异或 Eqv 等价 Imp 蕴含 逻辑运算符的优先次序是: Not And Or Xor Eqr Imp,逻辑运算符,4.4.5 表达式的构造与计算,1表达式的组成由运算符、圆括号、常量、变量和函数按一定的规则组成的一个有意义的式子就是表达式 2表达式的书写规则 (1)表达式中所有运算符和操作数必须并排书写,不能出现上下标和数学中的分数线。 (2)在一般情况下,不允许两个运算符相连,应当用括号隔开。 (3)注意运算
43、符的优先级,为保持运算顺序,Visual Basic使用圆括号(),但不能使用方括号或花括号。若需要多层括号时,则括号必须成对出现。 (4)Visual Basic中乘号(*)不能省略,也不能用“ ”代替。,4.4.5 表达式的构造与计算,3表达式的计算 (1)表达式值的类型 表达式通过运算后有一个结果,运算结果的类型由数据和运算符共同决定。 (2)优先级比较。 同类运算符的优先级。前面介绍各种运算符时,指出了各类运算符中运算符的优先级,优先级为1的运算比优先级2的优先级高,依次类推;相同优先级的,按从左至右的出现顺序执行运算。在运算时,需要严格遵守优先顺序执行运算。 不同类运算符的优先级。在
44、各种不同类型的运算中,优先顺序为算术运算字符运算关系运算逻辑运算 圆括号可以改变优先顺序或使表达式更清晰。当表达式中含有括号时,总是先执行括号内表达式的值;对于多重括号,总是由内到外。 。,4.5 常用内部函数,函数调用格式: 函数名(参数列表) 有参函数 函数名 无参函数 说明: (1)调用时的参数要和函数格式中参数的个数、数据类型、含义和取值范围保持一致。 (2)函数只能出现在表达式中,一般不能以单独语句形式出现。 (3)注意接收函数的返回值。 (4)函数的运算优先级高于算术运算符。,4.5.1 数学函数,说明: (1)三角函数的参数x均是以弧度为单位的,如果已知角度x,可以按x*3.14
45、15926/180将x转换成弧度,然后求其三角函数。 (2)Visual Basic中没有提供的函数,可以用数学方法求得。 如Visual Basic中没有余切函数,求x弧度的余切值可以表示为1/Tan(x)或Cos(x)/Sin(x)。 Visual Basic中也没有专门的对数函数Logxy,必须采用换底公式Log(y) / Log(x)表示。 (3)使用数学函数应符合数学规定,如Sqr(x)中参数x不能是负数,4.5.2 转换函数,(1)Asc与Chr函数 Asc与Chr函数为一对互反函数。若参数x是由多个字符组成,则Asc(x)仅返回x中第一个字符的Ascii码值。 表达式Asc(“B
46、asic“)的值是“B“的Ascii码值66。 常常使用Chr(Asc(x) + k)形式返回Ascii码值与x首字符相差k的字母字符。例如,表达式Chr(Asc(“B“) + 1)的值是字符“B“的下一个字母字符“C“。 常常通过使用Chr函数得到常用的控制字符: Chr(13) 回车符 Chr(13) + Chr(10) 回车换行符 Chr(7) 响铃Beep Chr(8) 退格符,4.5.2 转换函数,Str、CStr和Val函数 Str(x)将数值型数据x转换为字符串,转换后字符串的第一个字符是符号位(正数用空格表示) CStr(x)函数将x转换为字符串,转换后的字符串不保留正数的符号
47、位。 Str(-123.56) 函数值为字符串“-123.56” Str(123.56) 函数值为字符串“ 123.56”,第一个字符为空格即正数的符号位 CStr(1122.33) 函数值为字符串“123.56”,不保留正数的符号位 Val(x)函数是将数字字符串转换为对应的数值,在遇到第一个数值类型规定字符外的字符时转换停止,返回停止前合法的数值字符串所对应的数值,即若需转换的字符串的第一个字符不是数字,则返回结果0。 Val(“-123.5AB67”) 函数值为-123.5 Val(“ABC123.567”) 函数值为0 Val(“123.567D2“) 函数值为12356.7,4.5.
48、2 转换函数,(3)Fix、Int、Round、CInt、Clng取整函数 Fix(x)函数为截尾取整,即去掉数值小数部分后的数,Int(x)函数仅取不大于x的最大整数。因此当x=0时两者功能相同,而x0.5,则采用向整数部分进1取整;当小数部分=0.5,则采用往数据本身最接近的偶数取整。与Round函数不同,CInt和Clng函数还起到将数据的类型分别转换为Integer和Long的作用。 Fix(2.5) 函数值为2 Fix(-2.5) 函数值为-2 Int(2.5) 函数值为2 Int(-2.5) 函数值为-3 Round(2.5) 函数值为2 Round(-2.5) 函数值为-2 Clng(2.5) 函数值为2 Clng(-2.5) 函数值为-2 CInt(2.57) 函数值为3 Clng(-2.57) 函数值为-3,4.5.2 转换函数,(3)Fix、Int、Round、CInt、Clng取整函数 类似于Round(x, n),利用函数Int(x)可以实现数学上要求的保留数据x指定的n位小数,格式如下: Int(x * 10 n + 0.5)/ (10 n) (4)类型转换函数CStr(x)至CVar(x)等必须在系统可转换的基础上进行,否则出错,