1、第三章 数据类型、常量、变量及表达式,本章内容及要求: 1. 熟悉VB程序中代码和语句书写规则; 2. 掌握VB的数据类型; 3. 掌握VB的 运算符和表达式的使用; 4. 掌握常用内部函数的使用;,本章重点:变量和常量的定义及使用、运算符和表式的使用及常用内部函数的使用。,本章难点: 数据类型、内部函数。,3.1 编码基础,3.1.1 简单语旬 1.赋值语向 【LET】目的操作符=源操作符 目的操作符:是变量、对象的属性,源操作符:是变量、常量、表达式或对象的属性值。 其中赋值符号“”不是数学中的等号。赋值号的左右不满足交换律。如:A=5 ,是把5这个值送给了A变量,即A5 ,而5=A错误B
2、=3+5 ,即B8Name=“张三”Text1.Text=“Hello”, 一个变量可以多次赋值,但只保留最后一次的赋值结果。N=1N=5执行上两条语句后,变量N中值是5。 赋值语句兼有计算与赋值双重功能。 目的操作符与源操作符的数据类型必须一致。,2. 注释语句 注释语句有两种:“Rem”关键字和“ ”单引号 功能:“Rem”和“ ”开头的语句忽略其后面得内容。Rem 一般占据一整行,若写在其它语句后面,要用语句分隔符“: “” 注释可以和语句同行,并写在其后面,也可占一行。 利用注释语句屏蔽一条语句用来发现问题所在。,例如:Private Sub Private Sub Form_Clic
3、k()Text1.Text = “Welcome!“ 在文本框中写欢迎词Text2.Text = “Hello!“Rem 在文本框中写入问候语Print Text1.Text : Rem 打印欢迎词End sub,3. 暂停语向格式为:Stop可以放在过程中的任何地方。当程序执行该语句时,将自动打开立即窗口,主要作用是把解释程序置为中断(Break)模式,以便进行检查和调试。调试结束后,应在生成可执行文件之前,删去代码中的所有Stop语句。,4. 结束语句 VB中使用END语句来强迫终止程序的执行。语法格式 : End例如:下面的过程,当单击命令按钮 Command1时,结束程序的运行。Pri
4、vate Sub Command1_Click()EndEnd Sub 其它结束语句:End SubEnd FunctionEnd IfEnd TypeEnd Select,3.1.2 编码规则与约定,(一)编码规则 1VB代码中不区分字母的大小写。 2同一行上可以书写多条语句,但语句间要用冒号“:”分隔。 3若一行不能写下全部语句,或在特别需要换行时,需在本行后加入续行符,1个空格加下划线“_”。 4一行最多允许255个字符。 5在程序转向时需用到标号,标号是以字母开始而以冒号结束的字符串。,1.对于VB中的关键字其首字 母大写,其余字母小写 。 2.通常不使用行号。 3.对象名命名约定:每
5、个对象的名字由3个小写字母组成的前缀(指明对象的类型)和表示该对象作用的缩写字母组成 。如命令按钮前缀:cmd。,(二) 约定,3.2 数据类型,3.2.1 标准数据类型,3.2.2 自定义类型,在模块级别中使用,用于定义包含一个或多个元素的用户自定义的数据类型。使用形式:Type 自定义类型名元素名 (下标) As 类型名元素名 (下标) As 类型名. . .End Type 见下例,Type StudentXh As Long Xm As StringXb As StringNl As Integer Score As SingleEnd Type,例如: 对于一个学生的“学号”、“姓名
6、”、“性别”、“年龄”、“入学成绩”等数据,为了处理数据的方便,常常需要把这些数据定义成一个新的数据类型(如Student类型)。,3.3 常量和变量,3.3.1 常 量在程序运行过程中,其值不能被改变的量称为常量。在VB中有三类常量:普通常量符号常量系统常量 一、普通常量 1 整型常量(1)整型(Integer): 十进制:表示-32768至32767之间的整数例如:10 110 0 八进制:&或&O,其范围&0&177777如:&123、&O277 十六进制:&H或&h,范围&H0&HFFFF如:&H56、&H7F,(2)长整型(Long):4个字节1)十进制整数 表示-2,147,483
7、,648至2,147,483,647之间的整数如125,0,-89, 20,2)八进制整数。以&或&O(字母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)
8、和小数点(.)或类型符号(!、#)组成,即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、字符串常量 在VB中字符串常量是用双引号“”括起的一串字符,例如“ABC”,“abcdefg”,“123”,“0”,“VB程序设计”等。 说明:(1)字符串中的字符可以是所有西文字符和汉字、标点符号等;(2)“表示空字符串,而“ “表示有一个空格的字符串;(3)若字符串中有双引号,例如A
9、BD“XYZ,则用连续两个双引号表示,即:“ ABD“XYZ “ 4、逻辑(Boolean)数据类型只有两个值True,或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#说明:当
10、数值表示日期数据时,整数部分代表日期,而小数部分代表时间;0为午夜,0.5为中午12点。负数表示公元1899年12月31日之前的日期和时间。如 -2.5 代表 1899-12-28 12:00:00,二、符号常量在程序中,某个常量多次被使用,则可以使用一个符号来代替该常量,使书写更方便,改进了程序的可读性和可维护性。 VB中 关键字Const 声明符号常量。格式: Const 常量名 As 类型|类型符号=常数表达式例如: Const PI#=3.1415926535 等价于:Const PI As Double=3.1415926535,三、系统常量VB系统提供了应用程序和控件的系统定义常数
11、。它们存放于系统的对象库中,在“对象浏览器”中的 Visual Basic(VB) 和 Visual Basic for applications(VBA)对象库中列举了 Visual Basic 的常数,例如,要将文本框Text1的前景颜色设置为红色,可以使用下面的语句:Text1.ForeColor=vbRed这里的vbRed就是系统常量。这比直接使用16进制数来设置要直观得多。又如,窗口状态属性WindowsState可取0,1,2三个值, 对应三种不同状态。在程序中使用语句 Myform.WindowsState=vbMaxmized,将窗口极大化,显然要比使用语句Myform.Win
12、dowsState=2 易于阅读和理解。,一.变量和常量的命名规则1. 以字母或汉字开头,后可跟字母、数字或下划线组成,长度小于等于40个字符;2. 不能使用VB中的关键字;3. VB中不区分变量名的大小写. A1和a1相同4. 为了增加程序的可读性,可在变量名前加一个缩写的前缀来表明该变量的数据类型。例如:strAbc, (字符串变量)iCount, (整型变量) dblx, (双精度变量) sYz (单精度变量),3.3.2 变 量,二.变量声明 1.用Dim语句显式声明变量形式:Dim 变量名 AS 类型Dim 变量名类型符 例 Dim iCount As integer , sum A
13、s single等价于 Dim iCount%, sum! 2.隐式声明Visual Basic允许用户在编写应用程序时,不声明变量而直接使用,系统临时为新变量分配存储空间并使用,这就是隐式声明。所有隐式声明的变量都是Variant数据类型。Visual Basic根据程序中赋予变量的值来自动调整变量的类型。,例如:下面是一个很简单的程序,其使用的 变量a, b, Sum都没有事先定义。 Private Sub Form_Click() Sum = 0 a = 10: b = 20 Sum = a + b Print “Sum=“; Sum End Sub,良好的编程习惯都应该是“先声明变量,
14、后使用变量”,为了避免写错变量引起麻烦,使VB只要遇到未经声明的变量名就发出错误警告,Visual Basic 中可以强制显式声明。可以在窗体模块、标准模块和类模块的通用声明段中加入语句:Option Explicit 或“工具”菜单选取“选项”命令,在“对话框”中单击“编辑器”再复选“要求变量声明”选项。,3强制显式声明Option Explicit语句,3.4 运算符和表达式,一.运算符 四类:算术运算符、字符串运算符、关系运算 和逻辑运算符。 1. 算术运算符(均是双目运算,ia=3)例:5+10 mod 10 9 / 3 +2 2 结果是:10优先级 运算符 运算 例子 结果1 乘方
15、32 92 - 取负 -3 -3 3 * 乘法 3*5 153 / 浮点除法 10/3 3.3333333333334 整数除法 103 35 Mod 取模(取余) 10Mod3 16 + 加法 2+3 56 - 减法 2-3 -1 上例分析:22(结果4) 9/3(结果3) 103(结果3) 10mod3(结果1) 5+1+4(结果10),2. 字符串运算符与字符串表达式 字符串运算符有:“ ”、“+” 。 功能是字符串连接例如:“ABCD“ + “EFGHI“ 结果为:ABCDEFGHI“ VB ” & “程序设计教程” 结果为:VB程序设计教程说明:当连接符两旁的操作量都为字符串时,上述
16、两个连接符等价。它们区别是: +(连接运算):两个操作数均应为字符串类型;&(连接运算):两个操作数既可为字符型也可为数值型,是数值型时,系统自动先将其转换为数字字符,然后进行连接操作。,“100“ + 123 结果为 223 “100“ + “123“ 结果为 100123 “ Abc“ + 123 出错 “ 100“ & 123 结果为 100123100 & 123 结果为 100123 “ Abc“ & “123“ 结果为 Abc123 “ Abc“ & 123 结果为 Abc123,注意:使用运算符“&”时,变量与运算符“&”之间应加一个空格。这是因为符号“&”还是长整型的类型定义符
17、,如果变量与符号“&”接在一起,VB系统先把它作为类型定义符处理,因而就会出现语法错误。,3.4.3 关系运算符与关系表达式,关系运算符都是双目运算,是用来比较两个运算量之间的关系,关系表达式的运算结果为逻辑量。若关系成立,结果为True,若关系不成立,结果为False。VB中的关系运算符如下表所示。,关系运算的规则如下:(1)当两个操作式均为数值型,按数值大小比较。(2)字符串比较,则按字符的ASCII码值从左到右一一比较,直到出现不同的字符为止.。例: “ ABCDE “ “ ABRA “ 结果为 False “23”=“3” 结果为True,(3)数值型与可转换为数值型的数据比较,如:2
18、9“189“ ,按数值比较,结果为False。 (4)数值型与不能转换成数值型的字符型比较,如:77“ sdcd“ ,不能比较,系统出错。 (5)“Like”运算符是VB6.0新增加的。与通配符结合使用。其使用格式为:str1 Like str2如:“aBBBa” Like “a*a” 结果为True “aBBBa” Like “abbba” 结果为False,3.4.4 逻辑运算符与逻辑表达式 Not ( 逻辑非) 单目运算符(一个操作数),其它为双目运算符。条件表达式1 And 条件表达式2 条件表达式均为T 结果为T条件表达式1 Or 条件表达式2 条件表达式有一个T 结果为T,说明:(
19、1)逻辑运算符的优先级不相同,Not(逻辑非),最高Imp(逻辑蕴含)最低。 ,但它低于关系运算。(2)VB中常用的逻辑运算符是Not、And和Or。它们用于将多个关系表达式进行逻辑判断。(Xor Eqv Imp)例如:表示某个数在某个区域时用表达式: 10X=10 And X20 (3)参与逻辑运算的量一般都应是逻辑型数据,如果参与逻辑运算的两操作数是数值量,则以数值的二进制值逐位进行逻辑运算(0当False,1当True)。关系表达式与逻辑表达式常常用在条件语句与循环语句中,作为条件控制程序的流程走向。,如: Not(38) 的结果为True(38) And (58) Or (53) Xo
20、r (56) 结果为False 又如: 10 And 7表示 二进制1010 与二进制 0111逻辑与结果:0010 为十进制数 2,3.4.5 日期型表达式 日期型数据是一种特殊的数值型数据,只能有下面3种情况: 1一个日期型数据可以相减: DateB-DateA 结果是一个数值型整数(两个日期相差的天数)。 例如:#05/08/2002# - #05/01/2002# 其结果为数值:7 2一个日期型数据(DateA)与一数值数据(N)可作加法 运算:DateA+N其结果仍是一个日期型数据。例如:#05/01/2002# +7 其结果为日期型数据: #05/08/2002# 3一个日期型数据
21、(DateA)与一数值数据(N)可作减法运算: DateA-N 其结果仍是一个日期型数据。例如:#05/08/2002# - 7其结果为日期型数据:#05/01/2002#,3.4.6 运算符的执行顺序,表达式中出现了多种不同类型的运算符时,其运算符优先级如下: 算术运算符=字符运算符关系运算符逻辑运算,说明:1当一个表达式中出现多种运算符时,首先进行算术运算符,接着处理字符串连接运算符,然后处理比较运算符,最后处理逻辑运算符,在各类运算中再按照相应的优先次序进行。2可以用括号改变优先顺序,强令表达式的某些部分优先运行。括号内的运算总是优先于括号外的运算。对于多重括号,总是由内到外。,. 表达
22、式的书写中需注意的问题(1)运算符不能相邻。例a+-b是错误的。(2)乘号不能省略。 例x 乘以y 应写成:x*y(3)括号必须成对出现,均使用圆括号。(4)表达式从左到右在同一基准线书写,不能出现上下标。(5)要注意各种运算符的优先级别,为保持运算顺序,在写表达式时需要适当添加括号(),若用到库函数必须按库函要求书写。 如: (b-sqr(b*b-4*a*c)/(2*a)(a+b)/(a-b),例: 设a=3,b=5,c=-1,d=7a+bc+d And a=5 Or Not c0 Or dc+d And a=5 Or Not c0 Ord6 And a=5 Or Not C0 Or d6:
23、True T And a=5 Or Not C0 Or d=5:False T And F Or Not C0 Or d0: False T And F Or Not F Or d0 d0: False T And F Or Not F Or F Not F:True T And F Or T Or F T And F: False F Or T Or F F Or T: True T Or F T Or F :True,VB提供了上百种内部函数(库函数),要求掌握这些常用函数的功能及使用。调用方法:函数名(参数列表) 有参函数函数名 无参函数 说明:(1) 使用库函数要注意参数的个数及其参数
24、的数据类型(2) 要注意函数的定义域(自变量或参数的取值范围)例如: sqr(x) 要求: x=0 (3)要注意函数的值域。如:exp(23773) 的值就超出实数在计算机中的表示范围。,3.5 常用内部函数,1. 数学函数 常用的数学函数 三角函数: Cos(N) Sin(N) Tan(N) Atn(N)注意:在三角函数中的自变量是以弧度为单位。如:sin300 sin(3.14159/180*30) 绝对值、平方根: Abs(N) Sqr(N) 取整函数: Int(N) 不大于N的最大整数Fix(N) 去掉N的小数部分,保留其整数部分例 Int(3.6) 结果为3 , Int(-2.3)
25、结果为-3例 Fix(-8.6) 结果为-8 ,Fix(5.6) 结果为5 指数、对数函数 Exp(N) Log(N) 符号函数: Sgn(N) 返回N的符号。N为负数 函数返回-1;N为0 函数返回0;N为正数数 函数返回1,随机函数 Rnd(N) Rnd函数返回0 1(包括0和不包括1)之间的双精度随机数。说明: N0,以上一个随机数为种子产生下一个随机数,无N参数,以上一个随机数为种子产生下一个随机数 Randomizen用于产生新“种子”,省略n则根据系统时钟获得种子。若要产生1-100的随机整数:Int(Rnd *100)+1 怎样产生N,M区间的随机数公式:Int(M-N+1)*R
26、nd+N)产生3,10的随机整数?,2. 转换函数 (1) 常用的转换函数Asc(x):字符转换成ASCII码值 Asc(“a”) 返回97Asc(“A”) 返回65 Chr$ (x):ASCII码值转换为字符 Chr$(65) 返回“A”Str$(x):数值转换为字符串 Str$(123.45) 返回“123.45”Val(x):数字字符串转换为数值 Val(“123AB”) 返回123Val(“&HFF”) 返回255Hex(x):十进制转换为十六进制 Hex(32) 返回20Oct(x):十进制转换为八进制 Oct(32) 返回40 注意:Asc(“Abcd“) 值为: 65 (只取首字
27、母的Ascii值) Val(“abc123“) 值为:0, Val(“1.2sa10“) 值为1.2 Val( )函数只将最前面的数字字符转换为数值。转换时遇到非数字字符(除 “-”,“.”外)转换终止,(2)数据类型转换函数 CBool(x) 将x的值转换为Boolean类型值。X0 返回True CByte(x) 把参数X转换为Byte类型值 CCur(x) 把x的值转换为货币类型值,小数部分最多保 留4位且自动四舍五入。 CDate(x) 把字符表达式x 转换成Date类型值 CDbl(x) 把x的值转换为双精度数 CInt (x) 把x的小数部分四舍五入转换为整型数 CLng(x) 把
28、x的小数部分四舍五入转换为长整型数 CSng(x) 把x的值转换为单精度数 CStr(x) 把数值 x 转换成字符串类型值 CVar(x) 将x的值转换为变体类型值。如:CDate(“11/02/2003”) 返回03-02-11,3. 字符串操作函数 LTrim$(字符串):去掉字符串左边的前导空白字符 RTrim$(字符串): 去掉字符串右边的尾随空白字符 Trim$(字符串):去掉字符串左、右两边的空白字符 Left$(字符串, n):截取字符串左部的前n个字符 Right$(字符串, n):截取字符串右部的最后n个字符 Mid$(字符串, p, n):从第p个字符开始向后截取n个字符,
29、若省略n则截取到字符串的末尾 Len(字符串):测试字符串的长度,String$(n ,字符):返回n个重复的字符(若是多个,只重复第一个) Space$(n):返回n个空格 InStr(字符串1, 字符串2):返回字符串2在字符串1中的位置,若找不到结果为0 Ucase$(字符串) ;Lcase$(字符串)把小写字母转换为大写;把大写字母转换为小写 注:当函数返回值是字符串类型时,字符串函数名后面的“$”符可以省略。 例如:len(“This is a book!“) 15Left$(“ABCDEFG“,3) “ABC“ Mid$(“ABCDEFG“,2,3) “BCD“InStr(2, “
30、ABCDEFGEF”, “EF”) 5(第一次出现的位置),日期和时间函数用于提取计算机系统的当前日期和时间(无参数)Now 返回系统日期和时间Date 返回系统日期Time 返回系统时间Year (返回年份)、Month(返回月份)、Day(d)(返回d指定月份的第几天)Hour(返回小时)、Minute(返回分钟)、Second(返回秒)、Weekday(返回星期几)等函数信息。,4. 日期、时间函数,5.格式输出函数格式:Format$(表达式,“格式字符串”)功能:按用户指定格式返回表达式,常用在print方法中。使用形式:print Format$(表达式,“格式字符串”) 表达式:
31、可以是数值、日期或字符串型表达式。 格式字符串:表示输出表达式时采用的输出格式。不同数据类型所采用的格式字符串是不同的。,(1)数值型数据格式化注意:对于符号:0与#,当数值的实际位数比格式控制给定的位数多时,系统将按四舍五入返回给定的位数。如:Format(3.14159, “#.#”)其值为 3.142 (2)日期和时间型数据格式化缺省日期格式为:“mm/dd/yy”, 时间格式:“hh:mm:ss” (3)字符串类型数据格式化 6 其它函数除上面常用的四类函数,VB中还有测试函数、与文件操作有关的函数及其它函数,作业: 课后习题 本周实验内容: 实验指导书上实验,习题,3.1 如何在程序
32、中使用注释? 3.2 Visual Basic提供了哪些标准数据类型?声明类型时,其类型关键字各是什么?其类型说明符又是什么? 3.3 符号常量与变量有什么区别?什么情况下宜用符号常量?什么情况下宜用变量? 3.4 下列哪几个是合法的变量名?ABCde Stringabc_1 ABC123 123Bcd ABC 3.5 如果希望使用变量x来存放数据877438.34243,应该将变量x声明为何种类型? 3.6 在Visual Basic中,对于尚未赋值的变量,系统默认值是什么? 3.7 Visual Basic的字符串运算符有哪两种? 3.8 Visual Basic共有几种表达式?如何确定表
33、达式的类型? 3.9 函数Int(Rnd(0)*10)是在哪个范围内的整数? 3.10 将下列数学表达式改写成等价的Visual Basic表达式。(1) A B + Cos(35 o) (2) (x+y)+z10-5(a+b)(3) (4) (e2 + )(5) (6) 3.11 把Visual Basic算术表达式a / (b + c / (d + e / Sqr(f)写成数学表达式。 3.12 设a=2,b=3,c=4,d=5,求下列表达式的值。(1) 6 / a 2 (2) 4 Mod 7 2 * 3 / 2 + 9 2 3(3) #11/22/01# - 10 (4) “123“ “
34、123“ & “ABC“ & “XYZ“ (5) a * b = 8 (6) “ABD“ b And c c And b c Or c d(9) Not a a + c,3.13 根据所给条件,列出逻辑表达式。 (1) 闰年的条件是年份(year)能被4整除,但不能被100整除;或者能被400整除。 (2) 一元二次方程ax2 + bx + c = 0有实根的条件为:a0,并且b2 - 4ac 0。 (3) x是小于100的非负数。 3.14 写出下列函数的值。(1) Int(-3.14159) (2) Sqr(Sqr(64)(3) Fix(-3.1415926) (4) Int(Abs(99
35、 - 100) / 2)(5) Sgn(7 * 3 + 2) (6) UCase(“Hello“)(7) Left(“Hello“, 2) (8) Val(“16 Year“)(9) Str(-459.65) (10) Len(“Hello“) 3.15 如果x是一个正实数,对x的第3位小数四舍五入的表达式是:(1) 0.01 * Int(x + 0.005) (2) 0.01 * Int(100 * (x + 0.005)(3) 0.01 * Int(100 * (x + 0.05) (4) 0.01 * Int(x + 0.05) 3.16 写出执行以下语句后的输出结果。 Print Chr$(65) a$ = “Good“: b$ = “Morning“ Print a + b Print a & b s$ = “ABCDEFGHIJK“ Print Mid(s, 3, 4) Print Len(s) Print InStr(s, “efg“) Print LCase(s) 3.17 假定当前日期为2003年2月16日,星期日,请写出执行以下语句后的输出结果。 Print Day(Now) Print Month(Now) Print Year(Now) Print Weekday(Now),