1、第三章 Visual Basic程序设计基础,1、掌握VB的数据类型; 2、掌握VB的运算符和表达式的使用; 3、掌握常用内部函数的使用。,本章重点:变量和常量的定义及使用、运算符和表达式的使用及常用内部函数的使用。,本章难点:数据类型、运算符与表达式。,本章内容及要求:,3.1 数据类型,一.标准数据类型,1数值型数据(Numeric),数值型数据一般分为整型数和浮点数两类。 整型数分为: 整数(Integer)和 长整数(Long) 浮点数分为: 单精度浮点数(Single)和双精度浮点数(Double)有时也把货币型数据(Currency)和字节型数据(Byte)划归数值型数据。数值型数
2、据的默认值为:0所有数值变量都可相互赋值。在将浮点数赋予整数之前, Visual Basic将浮点数的小数部分四舍五入到整数。,1数值型数据(Numeric),1)整数(Integer)%,整数是不带小数点和指数符号的数,在机器内部以2字节二进制码形式表示。VB中用n%来表示整数,其中%为整数的类型符,可以省略。如-123%、123都表示整数。,2)长整数(Long)&,整数的最大值为32767,大于此数,程序运行时就会因为溢出产生中断。此时可使用长整数。,长整数用4字节二进制数存储,可以表示更大的整数,其取值范围为-21474836482147483647。VB中用n&来表示长整数,其中&为
3、长整数的类型符。如-1234&、987654&都表示长整数。,浮点数也称为实型数或实数,由符号、尾数和指数组成,分单精度浮点数(Single)和双精度浮点数(Double),其指数部分分别用“E”(或“e”)和“D”(或“d”)表示。,1数值型数据(Numeric),4)货币型(Currency),货币型属于定点实数或整数,用8个字节存储,小数点前有15位,小数点后有4位,其余的数字被舍去,其表示形式为在数字后加上“”。,5)字节型(Byte),字节型数据用1个字节的无符号二进制数存储,取值范围为0255。,1数值型数据(Numeric),2.字符型数据(string),字符型数据是指一切可打
4、印的字符和字符串,它是用双引号括起来的一串字符。一个西文字符、汉字都是一个字符,它们在内存中都占两个字节。字符型数据的默认值为:“”在VB中有两种类型字符串:变长字符串和定长字符串。变长字符串的长度不确定,可以是0231个字符(约21亿)。定长字符串长度一定,最多不超过 216 个字符 如: Dim S As String 变长字符串Dim/Private/Public/ Static varname As String * 8 定长字符串,说明:1)空字符串与空格串的区别;2)在字符串中必须用两个连续的双引号来表示字符串。有一个双引号 如字符串:abc“计算机”abc,在VB中表示为: “a
5、bc“计算机“abc“,2.字符型数据(string),3.逻辑型数据(Boolean),逻辑型数据只有两个值:真(True)和假(False),用2个字节存储,经常用来表示逻辑判断的结果。Boolean 的缺省值为 False。,说明:当把数值型数据转换为逻辑型数据时:0转换为False非0转换为 True。反之,当把逻辑型数据转换为数值型时:False转换为0True转换为1。,4. 日期型数据(Date),用于存储Date 和 Time,表示的日期从公元100年1月1日9999年12月31日,时间范围为0:00:0023:59:59。,任何在字面上可以被认作日期的文本都可以赋值给日期变量
6、,且日期文字必须用符号“#”括起来。用8个字节存储,默认值为:0:00:00。如: #January 15,2002#, #1985-10-1 9:45:00 PM#都是合法的日期型数据。 例如: Dim SomeDate As DateSomeDate = #1980-03-16#SomeDate = #3-6-93 13:20#SomeDate = #March 27 ,2004 1:20am#,5.对象(Object)类型的数据,对象类型:占用4个字节的内存空间,存放的是对一个对象的引用(对象在内存中的地址),程序对对象型变量的操作等同于对它所引用对象的操作。用 Set 语句给对象型变量
7、赋值。未赋值之前为Nothing 如: Dim objFirst As CommandButtonSet objFirst = cmdok 把按钮对象赋给此变量Set objFirst = Form 错误,类型不匹配,6.变体(Variant)数据类型,Variant数据类型又称为变体数据类型,它是一种特殊的、可以表示所有系统定义类型的数据类型。变体数据类型对数据的处理可以根据上下文的变化而变化,除了定长的string类型及用户自定义的数据类型之外,可以处理任何类型的数据而不必进行数据类型的转换,如上所述的数值型、日期型、对象型、字符型的数据都可表示。Variant数据类型是VB对所有未定义的
8、变量的缺省数据类型,能够存储所有类型的数据。Variant型变量占用16个字节的内存。,例如: Dim SomeValue As VariantSomeValue = “17“SomeValue = SomeValue - 15SomeValue = “U“ & SomeValue除了可以表示各种类型的数据外,Variant类型的变量也可以包含Empty、Error及Null等特殊值。 Empty值:Empty值用来标记尚未初始化(给定初值)的Variant变量。在赋值之前,Variant变量具有值Empty。值,Empty是异于0、零长度字符串( “” )或Null值的特定值。,6.变体(V
9、ariant)数据类型,Null 值:Null通常用于数据库应用程序,表示未知数据或丢失的数据。 注意: 1、对包含Null 的表达式,计算结果总是Null。 2、将Null值、含Null的Variant变量或计算结果为Null的表达式作为参数传递给大多数函数,将会使函数返回Null。 3、也可用Null关键字指定Null值,例如:z=Null 4、如果要测试Variant变量是否包含Null值,可以例用IsNull函数,即Null与本身不相等。 Error值:Error是用来指示在过程中出现错误时的特殊值。,6.变体(Variant)数据类型,二 用户自定义数据类型,除了上述数据类型外,在V
10、B中,用户可以根据需要利用Type语句定义自己的数据类型,其格式如下:,Private | Public Type 自定义类型名数据类型元素 As 类型名 End Type,其中,数据类型元素名为自定义数据类型中的一个成员,类型名为上述基本类型名或自定义数据类型名。,例题:定义一个有关职工信息的自定义类型:,用户可以像使用标准数据类型一样使用自定义的数据类型 ,如: Dim Diego As Employee 在过程中Private Dona As Employee 在模块中 使用自定义变量中的元素,类似于对象属性的操作: Diego. Name=”Diego”,Private Type Em
11、ployeeID As IntegerName As String *20Salary As Currency End Type,二 用户自定义数据类型,注意: (1)自定义类型必须在标准模块或窗体模块的声明段中声明,在标准模块中定义时默认为全局变量(Public)。在窗体模块或类模块的声明部分定义模块级用户自定义类型时,一定要加上Private关键字。 (2)自定义类型的元素类型如果有字符串,则必须是定长字符串,即应该为:strName As String*常数(“常数”指明定长字符串的长度),二 用户自定义数据类型,3.2 常量和变量,3.2.1 常 量在程序运行过程中,其值不能被改变的量
12、称为常量。在VB中有三类常量:普通常量 符号常量 系统常量。 一、普通常量 1、字符串常量在VB中字符串常量是用双引号“”括起的一串字符,可以是所有西文字符和汉字、标点符号等。,例如“ABC“,“abcdefg“,“123“,“0“,“VB程序设计“等。 说明: (1)“表示空字符串,而“ “表示有一个空格的字符串; (2)若字符串中有双引号,例如ABD“XYZ,则用连续两个双引号表示,即:“ABD“XYZ“,3.2 常量和变量,2 数值型常量(1)整型(Integer):,3.2 常量和变量,通常我们说的整型常量指的是十进制整数,但VB中可以使用八进制和十六进制形式的整型常数,因此整型常数有
13、如下三种形式:,1)十进制整数 表示-32768至32767之间的整数。 如 125,0,-89。20,2)八进制整数 以&或&O(字母O)开头的整数是八进制整数,如&O25表示八进制整数25,即(25)8 ,等于十进制数21。 3)十六进制 以&H开头的整数是十六进制整数,如&H25表示十六进制整数25,即(25)16 ,等于十进制数37。VB中的颜色数据常常用十六进制整数表示。,3.2 常量和变量,(2)长整型(Long):表示-2,147,483,648至2,147,483,647之间的整数例如:长整型常数的书写: 23&,(3) 实数 1)单精度实型(Single):有效数为7位 2)
14、双精度实型(Double):有效数为15位 常量的表示: 1)十进制小数形式。它是由正负号(+,-)、数字(09)和小数点(.)或类型符号(!、#)组成,即n.n,n!或n#,其中n是09的数字。 例如0.123、.123、123.0、123!、123#等 2)指数形式。 nEm 或 n.nEm, nDm 或 n.nDm例:1.25E+3 和 1.25D+3相当于1250.0 或者1.25103。,3.2 常量和变量,3.2 常量和变量,3、逻辑(Boolean)数据类型只有两个值True,或False。将逻辑数据转换成整型时:True为-1,False为0;其它数据转换成逻辑数据时:非0为T
15、rue, 0为False。,4、日期常量日期(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#都是合法的日期型常量。,3.2 常量和变量,二、符号常量在程序中,某个常量多次被使用,则可以使用一个符号来代替该常量,这样不仅在书写上方便,而且有效地改进了程序的可读性和可维护性。 VB中使用关键字Const 声明符号
16、常量。其格式如下:Const 常量名 As 类型 =常数表达式或:Const 常量名类型符号=常数表达式 例如:Const PI As Double=3.1415926535 等价于:Const PI#=3.1415926535,3.2 常量和变量,例如,要将文本框Text1的前景颜色设置为红色,可以使用下面的语句:Text1.ForeColor=vbRed这里的vbRed就是系统常量。这比直接使用16进制数来设置要直观得多。,三、系统常量VB系统提供的应用程序和控件的系统定义常数。它们存放于系统的对象库中,在“对象浏览器”中的 Visual Basic(VB) 和 Visual Basic
17、for applications(VBA)对象库中列举了 Visual Basic 的常数,3.2 常量和变量,一.变量的命名规则1. 以字母或汉字开头,后可跟字母、数字或下划线组成.2. 变量名最长为255个字符;3. VB中不区分变量名的大小写,不能使用VB中的关键字;4.字符之间必须并排书写,不能出现上下标 以下符是合法的变量名:a, x, x3, BOOK_1, sum5以下标识符是非法的:3s 以数字开头 s*T 出现非法字符*-3x 以减号开头 bowy-1 出现非法字符-(减号)if 使用了VB的关键字,3.2.2 变 量,二.变量声明1. 显式声明显示声明变量的一般格式: Di
18、m/Private/Static/PublicAs, As形式:Dim 变量名 AS 类型Dim 变量名类型符例: Dim ab As integer , sum As single等价于 Dim ab%, sum!,3.2 常量和变量,缺省数据类型的变量默认为Variant类型例:Dim x, y As Double用As String 可以定义变长和定长字符串例:Dim MyString As String * 10 声明长度为10个字符的定长字符串MyString = “Mary is 5.“ Print MyString MyString = “Mary is five years o
19、ld.” MyString的值为Print MyString “Mary is fi”, 多余的部分被截断,舍弃。,3.2 常量和变量,例: Dim intX As IntegerDim strY As String StrY=3716 将数字赋值给字符串intX=strY 将字符串传递给数值变量 Static主要用于在过程中定义静态变量和静态数组,该变量的值杂函数或过程执行结束后能保存下来。 例:Private Sub form_Click()Dim A1 As IntegerStatic A2 As IntegerA1= A1+1A2= A2+1End Sub,3.2 常量和变量,2.隐式
20、声明Visual Basic允许用户在编写应用程序时,不声明变量而直接使用,系统临时为新变量分配存储空间并使用,这就是隐式声明。所有隐式声明的变量都是Variant数据类型。Visual Basic根据程序中赋予变量的值来自动调整变量的类型。 例如:,3.2 常量和变量,3.2 常量和变量,下面是一个很简单的程序,其使用的变量a, b, Total都没有事先定义。 Private Sub Form_Click() Total = 0 a = 10: b = 20 Total = a + b Print “Total=“; Total End Sub,3强制显式声明Option Explicit
21、语句,良好的编程习惯都应该是“先声明变量,后使用变量”,这样做可以提高程序的效率,同时也使程序易于调试。Visual Basic 中可以强制显式声明,可以在窗体模块、标准模块和类模块的通用声明段中加入语句:Option Explicit,3.2 常量和变量,3.3 运算符和表达式,一. 运算符1. 算术运算符 例:5+2*10 mod 10 9 / 3 +2 2 结果是:,11,(ia=3),2. 字符串运算符与字符串表达式 字符串运算符有: 、+ 。 功能是字符串连接 例如:“ABCD“ + “EFGHI” 结果为:ABCDEFGHI “ VB ” & “程序设计教程” 结果为:VB程序设计
22、教程 说明:当连接符两旁的操作量都为字符串时,上述两个连接符等价。它们区别是: +(连接运算):两个操作数均应为字符串类型;&(连接运算):两个操作数既可为字符型也可为数值型,当是数值型时,系统自动先将其转换为数字字符,然后进行连接操作。,3.3 运算符和表达式,例: “100“ + 123 结果为 223 “100“ + “123“ 结果为 100123 “Abc“ + 123 出错 “100“ & 123 结果为 100123100 & 123 结果为 100123“Abc“ & “123“ 结果为 Abc123 “Abc“ & 123 结果为 Abc123,注意:使用运算符“&”时,变量
23、与运算符“&”之间应加一个空格。这是因为符号“&”还是长整型的类型定义符,如果变量与符号“&”接在一起,VB系统先把它作为类型定义符处理,因而就会出现语法错误。,3.3 运算符和表达式,3 关系运算符与关系表达式,比较两个运算量之间的关系,关系表达式的运算结果为逻辑量。若关系成立,结果为True,若关系不成立,结果为False。VB中的关系运算符如下表所示。,3.3 运算符和表达式,关系运算的规则如下:(1)当两个操作式均为数值型,按数值大小比较。(2)字符串比较,则按字符的ASCII码值从左到右一一比较,直到出现不同的字符为止。例: “ ABCDE “ “ ABRA “ 结果为 False,
24、(3)数值型与可转换为数值型的数据比较,如:29“189“ ,按数值比较,结果为False。 (4)数值型与不能转换成数值型的字符型比较,如:77“ sdcd“ ,不能比较,系统出错。 (5)“Like”运算符是VB6.0新增加的。其使用格式为:str1 Like str2,3.3 运算符和表达式,4 逻辑运算符与逻辑表达式 逻辑运算符:Not,And,Or Xor Eqv Imp,3.3 运算符和表达式,说 明:(1)逻辑运算符的优先级不相同,Not(逻辑非)最高,但它低于关系运算,Imp(逻辑蕴含)最低。(2)VB中常用的逻辑运算符是Not、And和Or。它们用于将多个关系表达式进行逻辑判
25、断。 例如:数学上表示某个数在某个区域时用表达式: 10X=10 And X20 如果写成如下形式将是错误的:10=x20 或 10=x Or x20,3.3 运算符和表达式,例:用人单位招聘干部:年龄小于40岁,女性,学历专科或本科:写成条件VB的表达式:年龄=39 性别=“女” 学历=“专科” 学历=“本科”,3.3 运算符和表达式,And,Or,And,( ), 如果逻辑运算符对数值进行运算,则进行数字的二进制逐位操作。如:12 And 7 表示对1100(12)与0111(7)进行逐位与操作。,1 1 0 0 0 1 1 1 0 1 0 0,3.3 运算符和表达式,5 日期型表达式日期
26、型数据是一种特殊的数值型数据,只能有下面3种情况: 1一个日期型数据可以相减: DateB-DateA 结果是一个数值型整数(两个日期相差的天数)。 例如:#05/08/2002# - #05/01/2002# 其结果为数值:7 2一个日期型数据(DateA)与一数值数据(N)可作加法运算:DateA+N 其结果仍是一个日期型数据。 3一个日期型数据(DateA)与一数值数据(N)可作减法运算: DateA-N 其结果仍是一个日期型数据。 例如:#05/08/2002# - 7,3.3 运算符和表达式,6 运算符的执行顺序,表达式中出现了多种不同类型的运算符时,其运算符优先级如下:算术运算符=
27、字符运算符关系运算符逻辑运算,说明:1当一个表达式中出现多种运算符时,首先进行算术运算符,接着处理字符串连接运算符,然后处理比较运算符,最后处理逻辑运算符.2可以用括号改变优先顺序,强令表达式的某些部分优先运行。括号内的运算总是优先于括号外的运算。对于多重括号,总是由内到外。,3.3 运算符和表达式,7. 表达式的书写中需注意的问题(1)运算符不能相邻。例a+*b是错误的。(2)乘号不能省略。例x 乘以y 应写成:x*y(3)括号必须成对出现,均使用圆括号。(4)表达式从左到右在同一基准并排书写,不能出现上下标(5)要注意各种运算符的优先级别,为保持运算顺序,在写VB表达式时需要适当添加括号(
28、),若用到库函数必须按库函要求书写。 如:,3.3 运算符和表达式,函数:完成特定功能的一段独立的程序代码。内部函数:系统提供预先编好的程序,用户直接调用函数名即可使用。 VB提供了上百种内部函数(库函数),要求掌握这些常用函数的功能及使用。调用方法:函数名(参数列表) 有参函数函数名 无参函数 说明: (1) 使用内部函数要注意参数的个数及其参数的数据类型(2) 要注意函数的定义域(自变量或参数的取值范围)例如: sqr(x) 要求: x=0(3) 要注意函数的值域。如:exp(23773) 的值就超出实数在计算机中的表示范围。,3.4 常用内部函数,数学函数,数学函数,说明:(1) 在三角
29、函数中的自变量是以弧度为单位。如:sin300 sin(3.14159/180*30)(2)Rnd函数返回0 1(包括0和不包括1)之间的单精度随机数。若要产生1-100的随机整数: Int(Rnd *100+1)提问:怎样产生N,M区间的随机数? Int( (上限-下限+1)*Rnd+下限) Randomize语句:可清除一个应用程序由于不断重复使用随机数时同一序列随机数反复出现的情况。,有关数学函数的使用说明,(3)要区别两个取整函数int(N)和fix(N)Fix(N)为截断取整,即去掉小数后的数。Int(N)不大于N的最大整数。 N0与int(N) 相同,当N0时, int(N) 与f
30、ix(N) -1相等。例如: Fix(9.59) =9, Int(9.59) =9Fix(-9.59) =-9, Int(-9.59) =-10(4)Round(N1,N2)四舍五入函数(5) Asc(“Abcd“) 值为: 65 (只取首字母的Ascii值),有关数学函数的使用说明,字符串函数,字符串函数,字符串函数,字符串函数,(1)求ASC码值 Asc 功能:用来求一个字符串首字符的ASC码值 格式:Asc(string) 说明:参数string可以是任何有效的字符串表达式。如果 string 中没有包含任何字符,则会产生运行时错误。(2)求ASC码字符Chr 功能:求一个ASC码值所对
31、应的ASC码字符 格式: Chr(charcode) 说明:参数charcode是一个用来识别某字符的 Long型数。charcode 的正常范围为 0 255。0 到 31 之间的数字与标准的非打印 ASCII 代码相同。例如,Chr(10) 可以返回换行字符。,字符串函数,功能:是返回包含于字符串内的数字,字符串中是一个适当类型的数值。 格式:Val(string)Val(“abc123“) 值为:0, Val(“1.2sa10“) 值为1.2注意: Val( )函数只将最前面的数字字符转换为数值。,(3)字符串转换为数值 Val,上一页,下一页,返回首页,字符串函数,功能:是将一个数值表
32、达式转换为一个字符串。 格式:Str(number) 说明:当一数字转成字符串时,总会在前头保留一空位来表示正负。如果 number 为正,返回的字符串包含一前导空格暗示有一正号。使用 Format 函数可将数值转成必要的格式,如日期、时间、货币或其他用户自定义格式。与 Str 不同的是,Format 函数不包含前导空格来放置 number 的正负号。,(4)数值转换为字符串 Str,上一页,下一页,返回首页,字符串函数,数据类型转换函数,日期和时间函数,例3:time_f.vbp,日期和时间函数,格式输出函数,使用格式输出函数Format()可以使数值、日期或字符型数据按指定的格式输出。其返
33、回值是字符串。 Format函数的语法格式为:Format(表达式 ,格式字符串) 说明:若省略格式字符串,则Format 函数的功能与Str函数的功能基本相同,唯一区别是:正数时, Format 函数无符号位。Format 函数一般用于Print 方法中,常用的数值型格式说明字符,上一页,下一页,返回首页,常用的数值型格式说明字符,数值格式化实例, 格式符位数少,照常显示, 正指数带+号,负指数带 - 号,上一页,下一页,返回首页,常用的字符型格式说明字符,常用的字符型格式说明字符,1、Int(100*Rnd(1)产生的随机整数的闭区间是A。(A)0,99 (B)1,100 (C)0,100
34、 (D)1,99 2、求一个三位正整数N的十位数的正确方法是A。(A)Int(N/10)-Int(N/100)*10 (B)Int(N/10)-Int(N/100) (C)N-Int(N/100)*100 (D)Int(N-Int(N/100)*100) 3、”x是小于100的非负数”,用VB表达式表示正确的是C。 (A)0x=0 And x100 (D)x0 Or x100,练习:,4、如果X是一个正实数,对X的第3位小数四舍五入的表达式是B。 (A)0.01*Int(X+0.005) (B)0.01*Int(100*(X+0.005) (C)0.01*Int(100*X+0.005) (D
35、)0.01*Int(X+0.05) 5、以下语句的输出第一个结果是B;第二个结果是D a=sqr(3) print format(a,”$#.#”) print format(a,”$0000.#”) (A)$1.732 (B)$1.73 (C)$1732 (D)$0001.73,练习:,6、函数InStr(”VB程序,visual Basic,Vb”,”vb”)的值为A。(A)0 (B)1 (C)18 (D)Vb7、VB中的语句通常按”一行一句,一句一行”的规则书写,但也充许多个语句放在同一行中。在这种情况下,用来隔开各语句的符号是A;一句语句要在下一行继续写,用C符号作为续行符。(A)冒号 (B)分号 (C)逗号 (D)感叹号 (A)+ (B) - (C) _ (D) 8、设x为一个两位数,将其个位和十位数交换后所得两位数的VB表达式是((x Mod 10) * 10 + x 10)。,练习:,