3.1VB编码规则
1.语言元素
VB的语言基础是BASIC语言,VB程序的语言元素主要由:
关键字(如:Dim、Print、Cls)
函数(如:Sin()、Cos()Sqr())
表达式(如:Abs(-23.5)+4520/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语句(现在很少用)中。
3.2.VB的语言基础
1.数据类型
1)VB中对没有声明的变量其缺省的数据类型是变体型,可以用来存储各种数据,但所占用的内存比其它类型都多。为提高运行效率(整型效率较高),或达到一定的运算精确度(浮点型精度较高,但运行较慢),应合理的定义数据类型。
2)逻辑型数据只有True和False两个值,转换成整型时,True=-1,False=0,将其它类型转换成逻辑型时,非0数转换为True,0转换为False。
3)字符型可以包括所有的西文字符和汉字,字符必须用双引号括""起来,如:"abc123"
4)日期型数据按8字节的浮点数来存储,日期型数表示方式有两种:可以用号码符#括起来,也可以用数字序列表示(小数点左边的数字代表日期,右边代表时间,0为午夜,0。5为中午12点,负数表示是1899年12月31日前的日期和时间)。
如:#3/22/2002#.#2002-3-2214:30:20#
DimTAsDate
T=-2.5
PrintT.'打印出来的结果是1899-12-2812:00:00
5)任何数据类型的数组都需要20个字节的内存空间,加上每一数组维数占4个字节,再加上数据本身所占用的空间。数据所占用的内存空间可以用数据元数目乘上每个元素的大小加以计算。例如,以4个2字节之Integer数据元所组成的一维数组中的数据,占8个字节。这8个字节加上额外的24个字节,使得这个数组所需总内存空间为32个字节。
2.变量与常量
(1)变量或常量的命名规则
1)必须以字母或汉字开头,由字母、汉字、数字或下划线组成,长度≤255个字符;
2)不能使用VB中的关键字,并尽量不与VB中标准函数名同名;如:Dim、Sin
3)VB中不区分变量的大小写,一般变量首字母用大写,其余用小写;常量全部用大写字母表示
4)为了增加程序的可读性,可在变量名前加一个缩写的前缀来表明该变量的数据类型。
(2)变量声明
1)用Dim语句进行显式声明
语句形式:.Dim.变量名[As类型]..如:Dim.intX.Asinteger
说明:·如果没有As类型,则默认为变体类型。
·可在变量名后加类型符来代替As类型.如:Dim.intX%
·一条语句可以同时定义多个变量,但每个变量必须有自己的类型声明,类型声明不能共用;
·字符串变量根据其存放的长度是否固定,定义方法不同:
定长字符串:.Dim.strA.As.String10.
表示最多存放10个字符,如果赋值不足10个,则右补空;若多于10个,则多余部分截去。
不定长字符串:Dim.strA.As.String..’最多可存放2MB个字符
2)隐式声明
VB中允许变量不经过声明就直接使用,这种称为隐式声明,所有隐式声明的变量都是变体型的。
隐式声明容易造成错误,为了调试程序方便,一般对使用的变量都进行声明,可以在通用声明段使用Option.Explicit语句来强制显式声明所有变量。
(3)常量
1)直接常量
指在程序中直接给出值的数据,如:123、123&、123.45、1.234E2、123D3分别表示整型、长整型、单精度浮点型(小数形式)、单精度浮点型(指数形式)、双精度浮点型。
八进制常数:.在数值前加&O,如.&O123
十六进制常数:在数值前加&H,如&H123
2)用户声明的符号常量
用Const来声明:.Const.符号常量名[As类型]=表达式
如:Const.PI=3.14159......'声明了常量PI,代表3.14159,单精度型
Const.MAXAsInteger=&O144.''声明了常量MAX,代表八进制数144,整型
Const.COUNT#=45.67....'声明了常量COUNT,代表45.67,双精度型
3)系统提供的常量
系统定义的常量位于对象库中,在对象浏览器中的VisualBasic(VB)和VisualBasicforAplication(VBA)等对象库中列出了VB的常量。这些常量可以与应用程序的对象、方法、属性一起使用。
如:Form1.WindowsState=vbMaximized表示将窗口极大化。
3.运算符
(1)算术运算符
算术运算符两边的操作数应该是数值型,若是数字字符或逻辑型,则自动转换为数值类型后再运算。
(2)字符串运算符
(3).关系运算符
1)如果两个操作数都是数值型,则按其大小比较
2).如果两个操作数都是字符型,则按字符的ASCII码值从左到右一一比较
3).汉字字符大于西文字符
4).关系运算符的优先级相同
5).VB6.0中Like运算符与通配符的使用:
?——表示任何单一字符
*——表示0个或多个字符
#——表示任何一个数字(0-9)
[字符列表]——表示字符列表中的任何单一字符
[!字符列表]——表示不在字符列表中的任何单一字符
(4)逻辑运算符
1)若有多个条件时,And必须全部条件为真才为真;
Or只要有一个条件为真就为真。
2)如果逻辑运算符对数值进行运算,则以数字的二进制值逐位进行逻辑运算。And运算常用于屏蔽某些位;Or运算常用于把某些位置1。
如:12And7.表示对1100与0111进行And运算,得到二进制值100,结果为十进制4。
3)对一个数连续进行两次Xor操作,可恢复原值。在动画设计中,用Xor可恢复原来的背景。
4.表达式
(1)表达式的组成
表达式由常量、变量、运算符、函数和圆括号按一定的规则组成,通过运算后有一个结果,运算结果的类型由数据和运算符共同决定。
(2)表达式的书写规则
1)乘号不能省略
2)括号必须成对出现,均使用圆括号,可以嵌套,但必须配对。
3)表达式从左到右在同一基准上书写,无高低、大小之分。
例:sqr((3x+y)-z)/(xy)^4
(3)不同数据类型的转换
操作数的数据类型应该符合要求,不同的数据应该转换成同一类型。在算术运算中,如果操作数的数据精度不同,VB规定运算结果采用精度较高的数据类型。
(4)优先级
同一表达式中,不同运算符的优先级是:算术运算符>字符运算符>关系运算符>逻辑运算符
注意:对于存在多种运算符的表达式,可增加圆括号改变优先级或使表达式更清晰。
4.1.算法概论
1.算法的概念
算法:指用计算机解决某一问题的方法和步骤。
算法分类:.数值算法:用于解决一般数学解析方法难以解决的问题,如:求超越方程的根、求定积分、解微分方程等。
非数值算法:用于对非数值信息进行查找、排序等。
数值算法:用于解决一般数学解析方法难以解决的问题,如:求超越方程的根、求定积分、解微分方程等。
非数值算法:用于对非数值信息进行查找、排序等。
2.算法的特征
(1)确定性:指算法的每个步骤都应确切无误,没有歧义。
(2)可行性:指算法的每个步骤必须是计算机能够有效执行、可以实现的,并可得到确定的结果。
(3)有穷性:指一个算法应该在有限的时间和步骤内可以执行完毕的。
(4)输入性:指一个算法可以有0或多个输入数据。
(5)输出性:指一个算法必须有一个或多个输出结果。
3.算法的评价
主要评价指标是:算法是否正确、运行的效率、占用系统资源的多少。
4.算法的描述
一般常用流程框图来描述算法。
5.基本算法结构
“结构化程序设计方法”规定算法有三种基本结构:顺序结构、选择结构和循环结构
6.算法示例
(1)欧几里德算法——求两个自然数的最大公约数
(2)顺序查找算法——在N个字符串集合中,查找有无特定的字符串存在
4.2.顺序结构
1.赋值语句
赋值语句是任何程序设计中最基本的语句,赋值语句都时顺序执行的。赋值语句的形式为:
变量名=表达式
它的作用是计算右边表达式的值,然后赋给左边的变量,表达式的类型应该与变量名的类型一致。
2.使用说明
(1)当表达式为数值型而与变量精度不同时,强制转换成左边变量的精度;
(2)当表达式是数字字符串,左边变量是数值类型,自动转换成数值类型再赋值,但当表达式中有非数字字符或空串,则出错。
(3)任何非字符类型赋值给字符类型,自动转换为字符类型;
(4)当逻辑型赋值给数值型时,True转换为-1,False转换为0;反之,非0转换为True,0转换为False;
(5)赋值号左边的变量只能是变量,不能是常量、常数符号、表达式,否则报错;
(6)不能在一句赋值语句中,同时给各变量赋值;
(7)在条件表达式中出现的=是等号,系统会根据=号的位置,自动判断是否为赋值号;
(8)注意N=N+1是累加中常见的赋值语句,表示将N变量中的值加1后再赋值给N。
4.3选择结构(或称分支结构)
1.IF条件语句
(1)If……Then语句(单分支结构F)
语句形式:
1)If<表达式>Then
语句块
EndIf
2)If.<表达式>.Then.<语句>
说明:表达式一般为关系表达式、逻辑表达式,也可以为算术表达式,非0为True,0为False;
语句块可以是一句或多句,若用2)表示,则只能是一句语句,若多句,语句间需用冒号分隔,而且必须在一行上书写。
例:已知两个数x和y,比较它们的大小,使得x大于y:
方法一:.if.x<y.then.
t=x
x=y
y=t
endif
方法二:.if.x<y.then.t=x:x=y:y=t
注意:将两个变量中的数进行交换时,必须借助于第三个变量才能实现。
(2)If……Then……Else语句(双分支结构)
语句形式:..................
1)If.<表达式>.Then
<语句块1>
Else
<语句块2>
EndIf.
2)If.<表达式>.Then.<语句1>.Else.<语句2>
例:.x2-5.x≠0.
3x+2.x=0
(3)If……Then……ElseIf语句(多分支结构)
语句形式:...............
If.<表达式1>.Then
<语句块1>
ElseIf.<表达式2>.Then
<语句块2>
……
[Else 语句块n+1]
EndIf.
注意:
1)不管有几个分支,程序执行了一个分支后,其余分支不再执行;
2)ElseIf.不能写成Else.If
3)当多分支中有多个表达式同时满足,则只执行第一个与之匹配的语句块
例:已知变量strC中存放了一个字符,判断该字符是字母字符、数字字符还是其他字符。
(4)If语句的嵌套
If语句的嵌套是指if或else后面的语句块中又包含If语句。语句形式:
If.<表达式1>.Then
If.<表达式11>.Then
……
EndIf
……
EndIf
注意:
1)对于嵌套结构,为了增强程序的可读性,应该采用缩进形式书写;
2)If语句形式若不在一行上书写,必须与EndIf配对,多个if嵌套,EndIf与它最接近的EmdIf配对。
例:已知x、y、z三个数,比较它们的大小并排序,使得x>y>z.
2.SelectCase语句(情况语句)
SelectCase语句(情况语句)是多分支语句的又一种形式,语句形式:
SelectCase.变量或表达式
Case.表达式列表1
语句块1
Case.表达式列表2
语句块2
……
[CaseElse
语句块n+1]
EndSelect
说明:1)变量或表达式可以是数值型或字符串表达式
2)表达式列表I可以是表达式、一组用逗号分隔的枚举值、表达式1to表达式2、Is关系运算符表达式;如:case.1to10.、case."a","w","e","t".、case.2,4,6,8,is>10
3)并不是所有的多分支结构都可以用情况语句代替的。
例:已知输入某课程的百分制成绩mark,要求显示对应五级制的评定,评定条件如下:
3.条件函数
(1)if函数
函数形式:Iif(表达式,当条件为True时的值,当条件为False时的值.例:求X、Y中大的数,并放入变量Tmax中:Tmax=Iif(X>Y,X,Y)
(2)Choose函数
函数形式:Choose(整数表达式,选项列表)
如果整数表达式的值是1,则选择列表中的第1项,依次类推;如果小于1或大于列表项数时,则返回NULL。
例:根据nub为1-4的值,换算成不同的运算符:OP=Choose(nub,“+”,“-”,“×”,“÷”)
4.4.循环结构
循环是在指定的条件下多次重复执行一组语句。VB中提供了两种类型的循环语句:
计数循环语句和条件型循环语句
1.For循环语句(知道循环次数的计数型循环)
语句形式:For.循环变量=初值To终值.[Step.步长]
语句块
[ExitFor]
语句块
Next.循环变量
说明:.1)循环变量必须为数值型
2)步长一般为正,初值小于终值;若为负,初值大于终值;缺省步长为1;
3)语句块可以是一句或多句语句,称为循环体;
4)ExitFor表示当遇到该语句时,退出循环体;
执行Next的下一句;
循环次数=int((终值-初值)/步长+1)
5)退出循环后,循环变量的值保持退出时的值;
6)在循环体内对循环变量可多次引用,但不要对其赋值,否则影响结果。
2.Do……Loop循环(不知道循环次数的条件型循环)
是用于控制循环次数未知的循环结构,语法形式有两种:
形式1:DoWhile……Loop
Do[While|Until条件]
语句块
[Exit.Do]
语句块
Loop
形式2:Do……LoopWhile
Do
语句块
[Exit.Do]
语句块
Loop.[While|Until条件].
说明:
1)形式1为先判断后执行,有可能一次也不执行;
2)形式2为先执行后判断,至少执行一次;
3)关键字While用于指明条件为真时就执行循环体中的语句,Until刚好相反;
4)当省略了While|Until条件字句,即循环结构仅由Do……Loop关键字构成时,表示无条件循环,这时循环体内应该有ExitDo语句,否则为死循环;
5)ExitDo语句表示当遇到该语句时,退出循环,执行Loop的下一语句。
3.循环的嵌套
指在循环体内又包含了一个完整的循环结构。循环嵌套对For循环和Do……Loop循环均适用。
4.5.其它辅助控制语句
1.GoTo语句
语句形式:GoTo标号|行号
说明:(1)GoTo语句只能转移到同一过程的标号或行号处;标号是一个字符系列,首字符必须为字母,与大小写无关,任何转移到的标号后面必须有冒号:;行号是一个数字序列;
(2)以前BASIC中常用此语句,可读性差;现在要求尽量少用或不用,改用选择结构或循环结构来代替。
2.Exit语句
用于退出某控制结构的执行,VB的Exit语句有多种形式,如:
ExitFor(退出For循环)
ExitDo.(退出Do)循环)
ExitSub(退出子过程)
ExitFunction(退出函数)
3.End语句
独立的End语句用于结束一个程序的执行,可以放在任何事件过程中,形式为:End
VB的End语句还有多种形式,用于结束一个过程或块,如:
EndIf,EndWith,EndType,EndSelect,EndSub,EndFunction
4.With语句
它的作用是可以对某个对象执行一系列的语句,而不用重复指出对象的名称。但不能用一个With语句设置多个不同的对象。属性前面需要带点号“·”。
语句形式如下:.With.对象名
语句块
EndWith
例:With.form1
.Height=3000
.Width=4000
.BackColor=RGB(255,0,0)
EndWith
4.6.程序调试
1.VB的调试工具
(1)设置自动语法检查
打开工具菜单→单击选项命令→选择编辑器页面→将自动语法检测勾上。
(2)利用VB调试工具栏
利用该工具栏可以运行程序、中断运行、在程序中设置间断点、监视变量、单步调试、过程跟踪等操作。
2.VB的三种模式
(1)设计模式
在设计模式下可以进行程序的界面设计、属性设置、代码编写等,标题栏上显示“设计”,在此模式下不能运行程序,也不能使用调试工具。
(2)运行模式
执行“运行”菜单中的“启动”命令或单击工具栏上的启动按钮或按F5键,即由设计模式进入运行模式,标题栏显示“运行”,在此阶段可以查看程序代码,但不能修改。若要修改,必须单击工具栏上的“结束”按钮,回到设计模式,也可以选择“中断”按钮,进入中断模式。
(3)中断模式
当程序运行时单击了“中断”按钮,或当程序出现运行错误时,都可以进入中断模式,在此模式下,运行的程序被挂起,可以查看代码、修改代码、检查数据。修改结束,单击“继续”按钮可以继续程序的运行,也可以单击“结束”按钮停止程序的执行。
3.常见错误
(1)编辑时错误
当用户在代码窗口编辑代码时,VB会对程序进行语法检查,当发现语句没有输完、关键字输错等情况时,系统会弹出对话框,提示出错,并在错误处加亮显示,以便用户修改。
(2)编译时错误
是指用户单击了“启动”按钮,VB开始运行程序前,先编译执行的程序段时产生的错误,此错误是由于用户未定义变量、遗漏关键字等原因而产生的。发现错误时系统会停止编译,提示用户修改。
(3)运行时错误
指VB在编译通过后,运行代码时发生的错误,一般是由于指令代码执行了非法操作引起的,如:数据类型不匹配、试图打开一个不存在的文件等。系统会报错并加亮显示、等候处理。
(4)逻辑错误
如果程序运行后得不到所希望的结果,则说明存在逻辑错误。如:运算符使用不正确,语句的次序不对、循环语句的起始、终值不正确。这种错误系统不会报错,需要用户自己分析判断。
4.程序调试方法
(1)进入/退出中断状态
进入中断状态有四种方法:
1)程序运行时发生错误自动进入中断
2)程序运行中用户按中断键强制进入中断
3)用户在程序中预先设置了断点,程序执行到断点处即进入中断状态
4)在采用单步调试方式,每运行一个可执行代码后,即进入中断状态。
(2)利用调试窗口
1)立即窗口
这是调式窗口中使用最方便、最常用的窗口。可以在程序中用Debug.Print方法,把输出送到立即窗口,也可以在该窗口中直接使用Print语句或?显示变量的值。
2).本地窗口
该窗口显示当前过程中所有变量的值,当程序的执行从一个过程切换到另一个过程时,该窗口的内容发生改变,它只反映当前过程中可用的变量。
3).监视窗口
该窗口可显示当前的监视表达式,在此之前必须在设计阶段,利用调试菜单的“添加监视命令”或“快速监视”命令添加监视表达式以及设置的监视类型在运行时显示在监视窗口,根据设置的监视类型进行相应的显示。
(3)插入断点和逐句跟踪
在调试程序时,通常回设置断点来中断程序的运行,然后逐句跟踪检查相关变量、属性和表达式的值是否在预期的范围内。
可在中断模式下或设计模式时设置或删除断点,在代码窗口选择怀疑存在问题的地方作为断点,按下F9键,则程序运行到断点处即停下,进入中断模式,在此之前所关心的变量、属性、表达式的值都可以看到。