第三章VB的程序设计基础2.1VB编码规则1.语言元素VB的语言基础是BASIC语言,VB程序的语言元素主要由:关键字(如:Dim、Print、Cls)函数(如:Sin()、Cos()Sqr())表达式(如:Abs(-23.5)+45*20/3)语句(如:X=X+5、IF……ELSE……ENDIF)等组成。2.VB代码书写规则(1)程序中不区分字母的大小写,Ab与AB等效;(2)系统对用户程序代码进行自动转换:1)对于VB中的关键字,首字母被转换成大写,其余转换成小写2)若关键字由多个英文单词组成,则将每个单词的首字母转换成大写3)对于用户定义的变量、过程名,以第一次定义的为准,以后输入的自动转换成首次定义的形式3.语句书写规则(1)在同一行上可以书写多行语句,语句间用冒号(:)分隔(2)单行语句可以分多行书写,在本行后加续行符:空格和下划线_(3)一行允许多达255个字符4.程序的注释方式(1)整行注释一般以Rem开头,也可以用撇号';(2)用撇号'引导的注释,既可以是整行的,也可以直接放在语句的后面,最方便;(3)可以利用“编辑”工具栏的“设置注释块”、“解除注释块”来将设置多行注释。5.保留行号和标号VB源程序接受行号与标号,但不是必须的(早期的BASIC语言中必须用行号)。标号是以字母开始以冒号结束的字符串,一般用在GOTO语句(现在很少用)中。2.2VB的语言基础1.数据类型VB的标准数据类型数据类型关键字类型符前缀存储空间范围数值数据类型字节型ByteByt1个字节0到255整型Integer%Int2个字节-32,768到32,767长整型Long&Lng4个字节-2,147,483,648到2,147,483,647单精度型Single!Sng4个字节负数:-3.402823E38到-1.401298E-45;正数:1.401298E-45到3.402823E38双精度型Double#Dbl8个字节负数:-1.79769313486232E308-4.94065645841247E-324;正数:4.94065645841247E-3241.79769313486232E308货币型Currency@Cur8个字节从-922,337,203,685,477.5808到922,337,203,685,477.5807逻辑型BooleanBln2个字节True或False日期型DateDtm8个字节100年1月1日到9999年12月31日对象型ObjectObj4个字节任何Object引用变长字符型String$Str10字节加字符串长度0到大约20亿定长字符型String$Str字符串长度1到大约65,400变体数字型VariantVnt16个字节任何数字值,最大可达Double的范围变体字符型VariantVnt22个字节加字符串长度与变长String有相同的范围注意:1)VB中对没有声明的变量其缺省的数据类型是变体型,可以用来存储各种数据,但所占用的内存比其它类型都多。为提高运行效率(整型效率较高),或达到一定的运算精确度(浮点型精度较高,但运行较慢),应合理的定义数据类型。2)逻辑型数据只有True和False两个值,转换成整型时,True=-1,False=0,将其它类型转换成逻辑型时,非0数转换为True,0转换为False。3)字符型可以包括所有的西文字符和汉字,字符必须用双引号括起来,如:abc1234)日期型数据按8字节的浮点数来存储,日期型数表示方式有两种:可以用号码符#括起来,也可以用数字序列表示(小数点左边的数字代表日期,右边代表时间,0为午夜,0。5为中午12点,负数表示是1899年12月31日前的日期和时间)。如:#3/22/2002##2002-3-2214:30:20#DimTAsDateT=-2.5PrintT'打印出来的结果是1899-12-2812:00:005)任何数据类型的数组都需要20个字节的内存空间,加上每一数组维数占4个字节,再加上数据本身所占用的空间。数据所占用的内存空间可以用数据元数目乘上每个元素的大小加以计算。例如,以4个2字节之Integer数据元所组成的一维数组中的数据,占8个字节。这8个字节加上额外的24个字节,使得这个数组所需总内存空间为32个字节。2.变量与常量(1)变量或常量的命名规则1)必须以字母或汉字开头,由字母、汉字、数字或下划线组成,长度≤255个字符;2)不能使用VB中的关键字,并尽量不与VB中标准函数名同名;如:Dim、Sin3)VB中不区分变量的大小写,一般变量首字母用大写,其余用小写;常量全部用大写字母表示4)为了增加程序的可读性,可在变量名前加一个缩写的前缀来表明该变量的数据类型。(2)变量声明1)用Dim语句进行显式声明语句形式:Dim变量名[As类型]如:DimintXAsinteger说明:·如果没有As类型,则默认为变体类型。·可在变量名后加类型符来代替As类型如:DimintX%·一条语句可以同时定义多个变量,但每个变量必须有自己的类型声明,类型声明不能共用;·字符串变量根据其存放的长度是否固定,定义方法不同:定长字符串:DimstrAAsString*10表示最多存放10个字符,如果赋值不足10个,则右补空;若多于10个,则多余部分截去。不定长字符串:DimstrAAsString’最多可存放2MB个字符2)隐式声明VB中允许变量不经过声明就直接使用,这种称为隐式声明,所有隐式声明的变量都是变体型的。隐式声明容易造成错误,为了调试程序方便,一般对使用的变量都进行声明,可以在通用声明段使用OptionExplicit语句来强制显式声明所有变量。(3)常量1)直接常量指在程序中直接给出值的数据,如:123、123&、123.45、1.234E2、123D3分别表示整型、长整型、单精度浮点型(小数形式)、单精度浮点型(指数形式)、双精度浮点型。八进制常数:在数值前加&O,如&O123十六进制常数:在数值前加&H,如&H1232)用户声明的符号常量用Const来声明:Const符号常量名[As类型]=表达式如:ConstPI=3.14159'声明了常量PI,代表3.14159,单精度型ConstMAXAsInteger=&O144''声明了常量MAX,代表八进制数144,整型ConstCOUNT#=45.67'声明了常量COUNT,代表45.67,双精度型3)系统提供的常量系统定义的常量位于对象库中,在对象浏览器中的VisualBasic(VB)和VisualBasicforAplication(VBA)等对象库中列出了VB的常量。这些常量可以与应用程序的对象、方法、属性一起使用。如:Form1.WindowsState=vbMaximized表示将窗口极大化。3.运算符(1)算术运算符运算符含义优先级示例结果^乘方1Ia^29-负号2-iA-3*乘3IA*iA*iA27/除310/iA3.33333333333333\整除410\iA3Mod取模510ModiA1+加610+iA13-减7IA-10-7说明:设表中的变量iA=3,为整型。算术运算符两边的操作数应该是数值型,若是数字字符或逻辑型,则自动转换为数值类型后再运算。(2)字符串运算符运算符作用区别示例结果&将两个字符串拼接起来连接符两旁的操作数不管是字符型还是数值型,系统先将操作数转换成字符,然后再连接。123&55abc+1212355abc12+连接符两旁的操作数均为字符型;若均为数值型则进行算术加法运算;若一个为数字字符型,一个数值型,则自动将数字字符转换为数值,然后进行算术加;若一个为非数字字符型,一个数值型,则出错。123+55abc+12178出错(3)关系运算符运算符含义示例结果=等于ABCDE=ABRFalse大于ABCDEABRFalse=大于等于bc=大小False小于233False=小于等于23=3True不等于abcABCTrueLike字符串匹配ABCDEFGLike*DE*TrueIs对象引用比较注意:1)如果两个操作数都是数值型,则按其大小比较2)如果两个操作数都是字符型,则按字符的ASCII码值从左到右一一比较3)汉字字符大于西文字符4)关系运算符的优先级相同5)VB6.0中Like运算符与通配符的使用:?——表示任何单一字符*——表示0个或多个字符#——表示任何一个数字(0-9)[字符列表]——表示字符列表中的任何单一字符[!字符列表]——表示不在字符列表中的任何单一字符(4)逻辑运算符运算符含义优先级说明示例结果Not取反1当操作数为假时,结果为真NotFNotTTFAnd与2两个操作数均为真时,结果才为真TAndTFAndFTAndFFAndTTFFFOr或3两个操作数中有一个为真时,结果为真TOrTFOrFTOrFFOrTTFTTXor异或3两个操作数不相同,结果才为真,否则为假TXorFTXorTTFEqv等价4两个操作数相同时,结果才为真TEqvFTEqvTFTImp蕴含5第一个操作数为真,第二个操作数为假时,结果才为假,其余都为真TImpFTImpTFT说明:1)若有多个条件时,And必须全部条件为真才为真;Or只要有一个条件为真就为真。2)如果逻辑运算符对数值进行运算,则以数字的二进制值逐位进行逻辑运算。And运算常用于屏蔽某些位;Or运算常用于把某些位置1。如:12And7表示对1100与0111进行And运算,得到二进制值100,结果为十进制4。3)对一个数连续进行两次Xor操作,可恢复原值。在动画设计中,用Xor可恢复原来的背景。4.表达式(1)表达式的组成表达式由常量、变量、运算符、函数和圆括号按一定的规则组成,通过运算后有一个结果,运算结果的类型由数据和运算符共同决定。(2)表达式的书写规则1)乘号不能省略2)括号必须成对出现,均使用圆括号,可以嵌套,但必须配对。3)表达式从左到右在同一基准上书写,无高低、大小之分。例:sqr((3*x+y)-z)/(x*y)^4(3)不同数据类型的转换操作数的数据类型应该符合要求,不同的数据应该转换成同一类型。在算术运算中,如果操作数的数据精度不同,VB规定运算结果采用精度较高的数据类型。(4)优先级同一表达式中,不同运算符的优先级是:算术运算符字符运算符关系运算符逻辑运算符注意:对于存在多种运算符的表达式,可增加圆括号改变优先级或使表达式更清晰。2.3VB的公共函数1.数学函数VB中常用的数学函数函数名功能示例结果Sqr(x)求平方根Sqr(9)3Log(x)求自然对数,x0Log(10)2.3Exp(x)求以e为底的幂值,即求exExp(3)20.086Abs(x)求x的绝对值Abs(-2.5)2.5Hex[$](x)求x的十六进制数,返回的是字符型值Hex[$](28)1COct[$](x)求x的八进制数,返回的是字符型值Oct[$](10)12Sgn(x)求x的符号,当x0,返回1;x=0,返回0;x0,返回-1Sgn(15)1Rnd(x)产生一个在(0,1)区间均匀分布的随机数,每次的值都不同;若x=0,则给出的是上一次本函数产生的随机数Rnd(x)0-1之间的数Sin(x)求x的正弦值,x的单位是弧度Sin(0)0Cos(x)求x的余弦值,x的单位是弧度Cos(1)0.54Tan(x)求x的正切值,x的单位是弧度Tan(1)1.56Atn(x)求x的反正切值,x的单位是弧度,函数返回的是弧度值Atn(1)0.792.字符函数(1)字符串编码在Windows采用的DBCS(DoubleByteCharacterSet)编码方案中,一个汉字在计算机内存中占2个字节,一个西文字符(ASCII码)占1个字节,但在VB中采用的是Unicode(ISO字符标准)来存储字符的,所有字符都占2个字节。为方便使用,可以用StrConv函数来对Unicode与DBCS进行转换,可以用函数Len()函数求字符串的字符数,用LenB