第三章VB语言基础VB是在Basic语言的基础上发展起来的,它保留了Basic语言的数据结构和语法,对其中的某些语句和函数的功能作了修改或扩展,并根据语言的可视性要求增加了一些新的操作。在这一章中,我们将学习VB的基本数据类型、运算符、表达式、基本语句和函数等。3.1数据类型计算机数据分为三大类:数字、字符串和特殊类型,每种数据类型占用一定的内存,允许存储一定范围的值,用标识符表示。3.1数据类型一、数值1、整型数整型数是不带小数点和指数符号的数。(1)整型(Integer):2个字节,-32768~32767在VB中整数表示形式:n[%]n是0~9的数字,%是整型的类型符,可省2、浮点数浮点数也称实型或实数,是带有小数部分的数值。(1)单精度数(Single):4个字节,问题:下列哪些数据属于整型:(A)-456%(B)+456.0(C)789(D)98123(2)长整型(Long):4个字节,范围:-2147483648~2147483647表示形式为:n&n是0~9的数字,&是长整型的类型符,可省问题:下列哪些数据属于长整型:(A)+32712(B)+456.0(C)789&(D)-98123&范围:-3.402823E+38~-1.401298E-45或1.401298E-45~3.402823E+38表示形式为:±n.n、±n!、±nE±m、±n.nE±m分别为小数形式、整数加单精度类型符、指数形式,其中n,m为0~9数字(2)双精度数(Double):8个字节,范围:-1.797693123862315D+308~-4.94066D-324或4.94066D324~1.797693123862315D+308问题:下列哪些数据属于单精度浮点数:(A)+456123(B)+456.0(C)456.0!(D)-9.8E3二、字符串字符串是字符序列,由ASCII字符构成。由“”作间隔符。(1)变长字符串(String):10个字节+串长,0~2^31约20亿个字符(2)定长字符串(String):串长,1~2^16约65535个字符注意:(1)表示空字符串,而表示表示形式为:±n.n#、±n#、±nD±m、±nE±m#、±n.nD±m、±n.nE±m#问题:下列哪些数据属于双精度浮点数:(A)+4.5E1#(B)+456.0#(C)456.0(D)-9.8D3三、特殊字符(1)逻辑型(Boolean):1个字节,范围:True或False注意:当逻辑数据转换成整型数据时,True转换为-1,False转换为0;当将其他类型数据转换成逻辑数据时,非0数转换为True,0转换为False.(2)字节型(Byte):1个字节,范围:0~255(3)货币型(Currency):8个字节,有一个空格的字符串;(2)若字符串中有双引号,例如,要表示字符串:123abc,则用连续两个双引号表示,即:123abc。范围:-922337203685477.5808~922337203685477.5808表示形式:在数字后加@符号(4)日期型(Date):8个字节,范围:100年1月1日~9999年12月31日0:00:00~23:59:59表示形式:#时间#问题:下列哪些数据属于日期型数据:(A)January13,2002#(B)#1/13/2002#(C)#1999-5-1212:30:00PM#(D)1/13/2002(5)对象型(Object):4个字节,用来表示图形、OLE对象或其它对象。(6)变体型是一种特殊的数据类型,是所有未定义变量默认的数据类型。数字变体(Variant):16个字节,Double范围内的任何值。字符变体(Variant):22个字节+串长,与变长String有相同的范围。3.2变量和常量3.2.1标识符标识符是一些字符串,用来为变量、常量、数据类型等定义名字。命名规则为:(1)必须以字母或汉字开头,由字母、汉字、数字或下划线组成,长度小于等于255个字符。(2)变量内不能包含小数点、%、&、!、#、@、$等代表变量类型的结尾符号。(3)不能使用VB中的关键字。(4)VB中不区分变量名的大小写。说明:(1)为了便于区分,一般变量首字母用大写字母,其余用小写字母表示;常量全部用大写字母表示。(2)为了增加程序的可读性,可在变量名前加一个缩写的前缀来表明该变量的数据类型。例如:strMystring、intCount问题:下列哪些是合法的标识符:(A)123abc(B)X_yz(C)String(D)X-Y(E)sng最小值3.2.2常量经常会发现代码包含一些常数值,它们一次又一次地反复出现。还可发现,代码要用到很难记住的数字—而那些数字没有明确意义。在这些情况下,可用常量大幅度地改进代码的可读性和可维护性。常量是有意义的名字,取代永远不变的数值或字符串。尽管常量有点象变量,但不能象对变量那样修改常量,也不能对常量赋以新值。常量有三种来源:1、内部的或系统定义的常量是应用程序和控件提供的。在引用时可使用2个小写字母前缀,限定在哪个对象库中,例如:vb:表示VB和VBA中的常量。xl:表示Excel中的常量。db:表示DataAccessObject库中的常量。例如,改变窗口状态属性WindowsState2、直接常量常数值直接反映了其类型;也可在常数值后紧跟类型符显示地说明常数的数据类型。问题:下列常量属于哪种类型:(A)1234(B)12.45#(C)#10/12/2000#(D)”123”(E)True(F)1234&(G)-0.12E3整型双精度浮点型日期型字符型逻辑型长整型单精度浮点型在VB中除了十进制数常数外,还有八进制、十六进制常数。八进制常数形式:数值前加&O。例如,&O123、&O456。十六进制常数形式:数值前加&H。例如,&HABCD、&H1234。3、用户定义的常量声明常量的语法是:[Public|Private]Const常量标识名[As数据类型]=expressionexpression由数值常量或字符串常量以及运算符组成;但在expression中不能使用函数调用。Public是全局常量关键字,全局常量要在模块中声明,不能用于过程。Private是局部变量关键字,局部变量要在模块和窗体中声明,不能用于过程。Const语句可以表示数量或Date/Time量:ConstPi=3.14159265358979PublicConstMaxAsInteger=9ConstDate=#1/1/95#也可用Const语句定义字符串常量:PublicConstVersion=07.10.AConstCodeName=English如果用逗号进行分隔,则在一行中可放置多个常量声明:PublicConstPi=3.14,Max=9注意:常量一旦声明,在其后的代码中只能引用,不能改变等号(=)右边的表达式往往是数字或文字串,但也可以是其结果为数或字符串的表达式(尽管表达式不能包含函数调用)。甚至可用先前定义过的常量定义新常量。ConstPi2=Pi*2注意:避免循环引用当程序中有两个以上的公用常数,而且每个公用常数都用另一个去定义时就会出现循环。‘模块1中’模块2中PublicConstcon1=con2+8PublicConstcon2=con1*33.2.3变量每个变量都有一个名字和相应的数据类型,通过名字来引用一个变量,而数据类型则决定了该变量的存储方式。变量声明方法:1、Dim语句显式声明变量格式:Dim变量名[As[New]数据类型]变量数据类型可以是VB系统内部的数据类型也可以是用户自定义的数据类型或对象类型。例:Dimnow_stateasBooleanDimnumber1AsInteger在一行中可声明多个变量,用“,”号分隔。例:Dimnow_stateasBoolean,number1AsIntegerDimx%,y%,sngAllsum!New关键字可以创建来自VisualBasic或其它应用程序的对象。Object、Form1和TextBox都是VB对象类型或类的实例。例:DimQ_objectAsNewform对于字符串变量类型,根据其存放的字符串长度固定,其定义方法有两种:Dim字符串变量名AsStringDim字符串变量名AsString*字符数说明:前一种方法定义的字符串将是不定长的字符串,最多可存放2MB个字符;后一种方法可定义定长的字符串,存放的最多个字数由字符数定。例如,变量声明:DimstrS1AsString'声明可变长字符串变量DimstrS2AsString*50'声明定长字符串变量可存放50个字,若赋予的字少于50,则右补空;若赋予的字超过50个,则多余部分截去。注意:在VB中,一个汉字与一个西文字符一样都算作一个字,占两个字节。其他显式定义关键字用法:Pubic是全局变量关键字,全局变量在模块中声明。Private是局部变量关键字,局部变量在模块和窗体中声明.Static是静态变量关键字。与Dim不同,如果用Static定义了一个变量,则每次引用该变量时,其值会继续保留。而当引用Dim定义的变量时,变量值会被重新设置。(例)2、隐式声明和OptionExplicit显式声明在使用一个变量之前并不必先声明这个变量。VB用这个名字自动创建一个变量,使用这个变量时,可以认为它就是隐式声明的,隐含为Variant类型。虽然这种方法很方便,但是如果把变量名拼错了的话,会导致一个难以查找的错误。为了避免写错变量名引起的麻烦,可以规定,只要遇到一个未经明确声明就当成变量的名字,VB都发出错误警告,要显式声明变量。方法为:1、在类模块、窗体模块或标准模块的声明段中加入这个语句:OptionExplicit2、在“工具”菜单中选取“选项”,单击“编辑器”选项卡,再复选“要求变量声明”选项。这样就在任何新模块中自动插入OptionExplicit语句,但不会在已经建立起来的模块中自动插入;所以在工程内部,只能用手工方法向现有模块添加OptionExplicit。例2-3:隐式声明和显式声明的比较。OptionExplicitSubmain()DimIAsIntegerI=2DimyAsIntegery=I*IMsgBoxStr(y)EndSub3.2.4变量的作用域1、局部变量在过程内定义的变量叫局部变量,作用域是它所在的过程。2、窗体变量和模块变量窗体变量可用于创体内所有的过程模块变量可用于模块内所有的过程3、全局变量可用于工程中的每个模块、每个过程中