主讲:常国锋第4章VB的运算表达式和内部函数利用运算表达式,用户可对多个数据进行算术运算、逻辑运算和比较运算等。函数的概念与一般数学中的概念大致相同。函数是一种特定的运算,在程序中要使用一个函数时,只要给出函数名和参数,就能得到它的函数值。在VisualBasic中函数分为两类:内部函数和用户自定义函数。本章主要介绍VisualBasic中的内部函数。主讲:常国锋4.1运算符和表达式4.1.1运算的基本概念运算是对数据进行加工的过程。在vb系统中,计算机对数据进行的运算按功能可以划分为四大类:算术(arithmetic)运算比较(comparison)运算即关系运算逻辑(logical)运算连接(concatenation)运算计算机的基本的功能就是进行运算。一个运算表达式的基本构成是运算量(或称操作数)和运算符。运算量就是参与运算的数据,运算符是指能表征各运算量之间运算关系的符号。在运算时,用运算符连接运算量组成一个式子,来表示对运算量进行何种运算,这种由运算符连接运算量组成的式子称为表达式。主讲:常国锋4.1.2算术运算1.算术运算符算术运算是最常用的运算,很多的运算符都和我们在数学中学到的算术运算符,但也有一部分和数学中的不一样,这些运算符大家要特别记忆一下,否则在写表达式时会发生错误。(1)幂运算幂运算用来计算乘方和方根,其运算符为“^”。注意,当指数是一个表达式时,必须加上括号,因为在算术运算符中幂运算具有最高级别。(2)浮点数除法与整数除法浮点数除法的运算符是“/”,其结果为浮点数。整数除法的运算符是“\”执行整除运算,结果为整型值。运算后其结果进行取整操作,不进行舍入处理。主讲:常国锋4.1.2算术运算(3)取模运算取模运算用来求余数,其结果为第二个操作数整除第一个操作数所得的余数。两个操作数如果为实数,也要先进行四舍五入取整,再进行取模运算。2.算术运算符的优先级不同的算术运算符在表达式中参与运算的级别是不同的,其中幂运算的级别最高,加减运算符的级别最低。先乘除,后加减;乘方优先于乘除;函数优先于乘方;mod次于乘除;优先于加减;括号内最优先。同一级的运算在表达式中,按其位置从左至右进行。主讲:常国锋比较运算符也称为关系运算符,用来对两个表达式的值进行比较,比较的结果是一个逻辑值,即真(True)或假(False),它们分别表示整型数-1(非零)和0。VisualBasic提供了8个比较运算符。运算量可以是数值型、字符串型、货币型、日期型等类型的量,但是在同一个表达式中两个量应为同一类型。在比较运算符之间的优先级是相同的,但它们的优先级都低于算术运算符。关于比较运算符的几点说明:(1)应当尽可能避免对两个浮点数进行“相等”或“不等”的判断,否则可能出错。(2)在数学中一个数x是否在区间[a,b]时,我们习惯写成a≤x≤b,但在VisualBasic中不允许这样表示,应该写成:a=xAndx=b4.1.3比较运算(关系运算)主讲:常国锋(3)字符串数据进行比较运算时,按照其ASCII码值进行比较。在比较两个字符串时,先比较第一个字符,其中ASCII码值较大的字符所在字符串大,如果第一个字符相同,再比较第二个……依次类推。(4)关系运算符Like用于比较左边的字符串是否与右边的字符串匹配。右边的字符串可包含通配符*、#、?等。(5)关系运算符Is用于比较两个object类型的变量是否引用同一个对象。4.1.3比较运算(关系运算)主讲:常国锋4.1.4逻辑运算逻辑运算是指对两个布尔类型的运算量进行的运算。所以,逻辑运算也称为“布尔”运算。在VisualBasic中,逻辑运算符一共有六个。(1)Not(非)由真变假由假变真,进行“取反”运算。(2)And(与)对两个关系表达式的值进行比较,如果两个表达式的值均为True,则结果为True,否则结果为False。(3)Or(或)对两个表达式进行比较,如果其中一个表达式的值为True,那么结果为True,当且仅当两个表达式的值都是False,结果才为False。主讲:常国锋4.1.4逻辑运算(4)Xor(异或)当两个表达式的值一个为True,另一个为False时,结果为True,否则结果为Fasle。(5)Eqv(等价)如果两个表达式同时为True或同时为Fasle时,其结果为True,否则结果为Fasle。(6)Imp(蕴含)当第一个表达式为True,且第二个表达式为Fasle,其结果为Fasle。主讲:常国锋4.1.5连接运算连接运算符可以对各种不同的运算量或表达式进行连接运算。连接运算符为:&在各种不同的运算符之间,连接符的优先顺序是排在所有的算术运算符的后面,但是在比较运算符之前。在连接表达式中若含有其他类型的运算表达式,系统会对各个表达式进行计算,然后进行连接。除了“&”外,算术运算符“+”也可以用做字符串连接符,注意“+”号只能用于连接字符串主讲:常国锋4.1.6表达式的执行顺序一个表达式可能含有多种运算,计算机按一定的顺序对表达式求值。一种类型的运算其各运算符之间有不同的优先级,不同种类的运算之间还有不同的优先级。一般的优先顺序如下:(1)首先进行函数运算。(2)接着进行算术运算,其次序为(从左至右,优先级递减):幂(^)——取负(-)——乘(*)、浮点除(/)——整除(\)——取模(mod)——加(+)、减(-)(3)接着进行连接运算(4)然后进行比较运算。(5)最后进行逻辑运算,顺序为(从左至右,优先级递减):Not——And——Or——Xor——Eqv——Imp主讲:常国锋4.1.6表达式的执行顺序两点说明:1、乘法和浮点除(或者加和减)同时出现在表达式中时,将按照它们从左至右出现的顺序进行计算,用括号可以改变表达式的优先顺序,强令它的某些部分优先运行。括号内的运算总是优先于括号外的运算。2、当幂和负号相邻,负号优先。在书写表达式时,应注意以下几点:(1)乘号不能省略,也不能象在数学中那样用“•”代替。(2)在一般情况下,不允许两个运算符相连,应当用括号隔开。(3)在表达式中使用括号只能用圆括号,不能用方括号和或花括号。(4)在幂运算中当表达式不是单个常量或变量时,要用括号括起来。主讲:常国锋4.2常用内部函数VisualBasic提供了大量的内部函数,内部函数也称标准函数,是VB系统提供的,使用时只要直接调用函数名即可。在这些函数中,有些是通用的有些则与某种操作有关,大体分为5类,本节先介绍数学函数、转换函数、日期函数、时间函数和随机函数,下一小节再来介绍字符串函数。主讲:常国锋4.2.1常用内部函数1.数学函数2.转换函数3.时间日期函数4.随机数函数主讲:常国锋4.2.2立即窗口为了检验每个函数或表达式的操作,可以编写事件过程如Form_Click或Command1_Click。但这样做比较繁琐,因为必须执行事件过程才能看到结果。为此,VisualBasic中提供了命令解释程序(CLI:CommandLineInterpreter),可以通过命令行直接显示函数的执行结果,但要实现这一功能必须先打开立即窗口,这可以通过选择“视图”菜单中的“立即窗口”命令实现。在立即窗口中可以输入命令,命令解释程序对输入的命令进行解释,并立即响应,与DOS下命令行的执行情况类似。主讲:常国锋4.3字符处理和字符串函数4.3.1VisualBasic字符处理机制在VisualBasic中提供了大量的字符串操作函数,字符串函数大都以类型说明符“$”结尾,表明函数的返回值为字符串。但是在在VisualBasic6.0中,函数末尾的“$”可以有,也可以省略,其功能相同。在早期的VisualBasic版本中,字符处理采用的是ANSI字符处理机制。西文字符占用一个字节进行编码,中文字符占用两个字节进行编码。ANSI字符处理机制是VisualBasic4.0以前版本的编码方式。VisualBasic4.0及其以后版本VB的字符处理机制采用的是Unicode方式(统一编码方式),把各国文字字符作为一个统一的整体进行编码,在这种机制下一个英文字符或一个汉字都可以看作是一个字符,所占用的存储空间均为两个字节。主讲:常国锋4.3字符处理和字符串函数4.3.1VisualBasic字符处理机制Unicode方式实现了中、西文字符的统一编码,但给中、西文字符混合编码带来了麻烦。因为在单字节处理方式(ANSI)中,对字符串的处理是以字节为单位的;而在大字符的编码方案中,对字符串的处理是以字符为单位的,这样就会给原有的字符串处理带来混乱。为了解决这个问题,Microsoft在新版本的VisualBasic中新增加了一组字符串处理函数,以兼容原有的ANSI。这些新增加的字符串处理函数就是在原来函数的函数名后面加一个字母“B”,如LenB,LeftB等等。加了字母“B”的字符串处理函数用于ANSI编码方式,为了实现ANSI与Unicode之间的转换,VisualBasic提供了一个转换函数StrConv,格式如下:新字符串=StrConv(待转换字符串,转换格式)主讲:常国锋4.3字符处理和字符串函数4.3.2字符串函数在VB中提供了大量的字符串操作函数,可以对字符串进行各种各样的处理,对于这些函数来说一般有四种形式,末尾是否加字符串类型标识符“$”或者是否用于ANSI编码方式。四种形式如下所示:函数名$(参数1,参数2……)函数名(参数1,参数2……)用于ANSI格式的字符串函数名B$(参数1,参数2……)函数名B(参数1,参数2……)主讲:常国锋4.3.2字符串函数1、字符串长度测试函数格式:Len(字符串)Len(变量名)功能:测试指定字符串的长度(即字符个数),或者测试变量的存储空间。2、字符串截取函数用来截取字符串的一部分,可以从字符串的左部、右部或中部截取。(1)左部截取格式:Left(字符串,n)返回字符串的前“n”个字符(2)中部截取格式:Mid(字符串,n1,n2)从第n1个字符开始共截取n2个字符。主讲:常国锋4.3.2字符串函数(3)右部截取格式:Right(字符串,n)返回字符串的后n个字符。3、删除空白字符串函数(1)Ltrim(字符串):删除左侧的空白字符串(2)Rtrim(字符串):删除右侧的空白字符串(3)Trim(字符串):删除左右两侧的空白字符串4、String函数格式:String(n,ASCII码)或者String(n,字符串)返回由n个指定字符组成的字符串。第二个自变量可以是ASCII码,也可以是字符串,当是ASCII码时,返回n个跟这个码值对应的字符;当是字符串时,返回n个该字符串的首字符。主讲:常国锋4.3.2字符串函数5、空格函数格式:Space(n)返回n个空格。6、大小写转换函数格式:Ucase(字符串)小写字母转换为大写字母Lcase(字符串)大写字母转换为小写字母7、字符串匹配函数格式:InStr([首字符位置,]字符串1,字符串2[,n])从字符串1的指定的首字符位置开始查找字符串2,如果没有给出首字符位置,则从头开始查找。函数说明:首字符位置是可选的,首字符位置是一个长整数。函数的最后一个自变量n也是可选的,n的值可以取0、1、2。如取0则进行二进制比较,区分字母的大小写;如为1则在比较时不区分大小写;如为2则基于数据库中包含的信息进行比较。默认为0,也就是说查找时区分大小写。