第三章 VB程序设计语言基础.docx
《第三章 VB程序设计语言基础.docx》由会员分享,可在线阅读,更多相关《第三章 VB程序设计语言基础.docx(26页珍藏版)》请在冰豆网上搜索。
第三章VB程序设计语言基础
第三章VB程序设计语言基础
教学内容:
一、VB中的数据与运算
vb据类型、常量与变量、运算符与表达式、数组
二、标准函数
常用的内部函数(数学函数、转换函数、字符串函数、日期与时间函数等)
三、三种基本结构(顺序、判定、循环)
教学要求:
理解:
VB6.0的基本语法规则、数据类型
掌握:
VB6.0的常量、变量、运算符、运算规则、函数、表达式的正确书写)
掌握:
判定结构和循环结构的使用方法,直到型和当型的区别。
§3.1数据与运算
数据类型:
数值数据类型
(1)Integer型和Long型
用来表示整数。
Integer型数据占2个字节,Long型数据占4个字节。
除了十进制整型数,常用的还有八进制和十六进制,它们的表示方法为:
Intger型:
八进制数值前加&O或&。
如&O123
十六进制数值前加&H。
如&H123
Long型:
八进制数值前加&O或&,最后加&。
如&O123&
十六进制数值前加&H,最后加&。
如&H123&
(2)Single型和Double型
用来表示浮点数。
Single型占4个字节,Double型占8个字节。
表示一些单精度型常量和双精度常量时,可以用以下方法:
123E5,0.34E-2,0.8D2
(3)Currency型
为表示钱款而设置。
占8个字节。
小数点左边最多15位,右边最多4位。
(4)Byte型
占1个字节,表示无符号整数。
字符数据类型字符(String)类型存放字符型数据。
用双引号括起来,如“abc”。
注:
①”“表示空字符串,长度为0。
②若字符串中含有双引号,则用连续两个双引号表示,如”abc””12”。
日期数据类型
日期型(Date)表示日期和时间,占8个字节。
用“#”括起来,如#2004-5-4#等。
逻辑数据类型
逻辑型(Boolean)表示逻辑判断,占2个字节。
只有True和Fale两个值。
逻辑型数据转换成整型数据时,True转换为-1,False转换为0。
其他类型数据转换成逻辑型数据时,非0数转换为True,0转换为False。
对象数据类型
对象型(Object)表示图形、OLE对象或其他对象,占4个字节。
变体数据类型
变体型(Varient)可存放任何类型的数据
类型说明符
可在常量或变量的后边加上类型说明符指明它是哪一种数据类型,常见的类型说明符如下:
整型:
%长整型:
&
单精度型:
!
双精度型:
#
字符串型:
$货币型:
@
3.1.2变量与常量
命名规则
1.名字由字母、汉字、数字或下划线组成;
2.名字的第一个字符必须是字母或汉字;
3.名字的有效长度小于等于255个字符;
4.不能使用VB中的关键字。
5.VB中不区分变量名的大小写。
6.为了增加程序的可读性,可在变量名前加一个缩写的前缀来表明该变量的数据类型。
变量
变量定义的一般格式如下:
Declare变量名As类型
其中,①Declare可以是Dim、Static、Public、ReDim。
Dim、Static用于定义局部变量
Dim用于定义窗体和模块级变量
Public用于定义全局变量
ReDim用于重新定义数组
②类型可以是基本数据类型或用户自定义数据类型
③若“As类型”省略,默认为变体数据类型
④可在变量名后加类型说明符代替“As类型
例如:
DimxasInteger,yasSingle
DimsasString
注:
Dim定义的局部变量是自动变量,过程结束后其值被重新设置;
Static定义的局部变量是景泰变量,过程结束后其值继续保留。
常量
VB中有三种常量:
即直接常量、用户声明的符号常量和系统提供的常量。
(1)直接常量
直接常量其常数值直接反映了其类型,也可在常数值后紧跟类型符显示地说明常数的数据类型。
(2)符号常量
常量可用由用户定义的符号常量表示,格式如下:
Const符号常量名[As类型]=表达式[,常量名=表达式]……
例如:
ConstPI=3.1415926
(3)系统提供的常量
除了用户通过声明创建符号常量外,VB系统还提供了应用程序和控件定义的常量,这些常量位于对象库中,在“对象浏览器”中的VisualBasic(VB)、VisualBasicforApplications(VBA)等对象库中列举了VisualBasic的常量。
3.1.3运算符和表达式
运算符
1.算术运算符
加:
+减:
-乘:
*
整除:
\浮点除:
/取模:
Mod
负号:
-幂运算:
^
2.字符串运算符
“&”和”+“都是将两个字符串拼接起来。
但字符串连接时最好用”&”,因为“+”还可以作为算术运算符使用
3.关系运算符
对两个表达式的值做比较,若关系成立,则返回True,否则返回False。
等于=大于>大于等于>=小于<
小于等于<=不等于<>或><字符串匹配Like对象引用比较Is
4.逻辑运算符
取反:
Not与:
And或:
Or
异或:
Xor等价:
Eqv蕴含:
Imp
表达式
表达式由变量、常量、运算符、函数和圆括号按一定的规则组成。
表达式通过运算后有一个结果,运算结果的类型由数据和运算符共同决定。
当一个表达式中出现了多种不同类型的运算符时,不同类型的运算符优先级如下:
算术运算符>字符运算符>关系运算符>逻辑运算符
常用内部函数
VB提供了大量的内部函数(或称标准函数)供用户在编程时调用。
内部函数按其功能可分成数学函数、转换函数、字符串函数、日期函数和格式输出函数等。
具体内容参见课本。
3.1.4数组
1.数组的概念
一、数组的概念
在实际应用中,经常需要处理同一类型的成批数据。
比如,要处理100个学生的会计这门课程的考试成绩,如果在程序中定义100个变量来表示这批成绩,显然是很麻烦的。
我们可以用VB提供的数组来完成这个功能。
可以用c1,c2,…,c100来分别代表每个学生的分数,也就是说,用一批具有相同名字、不同下标的下标变量来表示同一属性的一组数据,这样能更清楚的表示它们之间的关系。
在VB中,把一组具有相同名字、不同下标的下标变量称为数组。
在计算机中,下标用“()”括起来。
比如c
(2),其中c为数组名,2是下标。
根据数组中下标变量的个数可以分为一维数组、二维数组或多维数组。
二、数组的声明
定义数组可以用Dim、Public、Private、Static语句实现。
格式(以Dim为例):
Dim<数组名>(<第一维说明>[,<第二维说明>]……)[As<类型>]
例:
Dimc(99)asSingle
Dims(3,4)asstring
Dimstu(3,6)
Dima(2to100)asstring*5
Dimb(2to30,5to40)
说明:
①数组必须要先定义,后使用
②如果不用AS语句指明类型,默认为变体数据类型
③一般情况下,下标的下界默认为0,如果希望下标从1开始,可以用OptionBase语句设置,格式为OptionBasen,其中n为下标的下界,只能是0或1
④可以根据需要指定数组下标的下界,格式为:
Dim数组名([下界To]上界[,[下界To]上界]……)
⑤在同一个过程中,数组名不能与变量名同名
⑥在定义数组时如果指明了类型,那么数组中的每个元素都是这种类型的;如果没有指明或定义成了变体数据类型,则其中的每个元素也是变体类型,可以存放各种类型的数据。
2.静态数组与动态数组
定义数组后,为了使用数组,必须为数组开辟所需要的内存区。
根据内存区开辟时机的不同,可把数组分为静态数组和动态数组。
通常把需要在编译时开辟内存区的数组叫做静态数组,把需要在运行时开辟内存区的数组叫做动态数组。
一、静态数组
静态数组的数组元素的个数是在数组声明时确定的,系统运行过程中它的个数不变。
前面定义的几个数组都是静态数组。
我们主要讲一下动态数组。
二、动态数组
动态数组是在声明数组时未给出数组的大小(省略括号中的下标),当要使用它时,随时用ReDim语句重新指出大小的数组。
使用动态数组的优点是可根据用户需要,有效地利用存储空间,它是在程序执行到ReDim语句时分配存储空间。
建立动态数组的方法是,使用Dim、Private或Public语句声明括号内为空的数组,然后在过程中用ReDim语句指明该数组的大小。
形式如下:
ReDim<数组名>(<下标1>[,<下标2>…])[As<类型>]
例如:
Dims()asinteger‘定义动态数组s,括号不能省略
PrivateSubForm_Click()
......
n=InputBox("输入n的值")
m=InputBox("输入m的值")
n=Val(n)
m=vla(m)
ReDims(n,m)‘重新指明数组的大小
......
EndSub
在过程中可多次使用ReDim语句来改变数组的大小,不能改变数组维数,也不能改变数组的类型。
每次执行ReDim语句时,当前存储在数组中的值都会全部丢失。
VisualBasic重新将数组元素的值置为Empty(对Variant数组)、置为0(对Numeric数组)、置为零长度字符串(对String数组)。
如果希望改变数组大小又不丢失数组中的数据,可使用具有Preserve关键字的ReDim语句就可做到这点。
如:
Dimthis()AsString
PrivateSubCommand1_Click()
ReDimthis(4)
this
(2)="microsoft"
Printthis
(2)
ReDimPreservethis(6)
Printthis
(2)
EndSub
3.数组的清除和重定义
在一个程序中,同一个数组只能定义一次。
有时可能需要清除数组的内容或对数组重新定义,这可以用Erase语句来实现。
格式如下:
Erase<数组名>[,<数组名>]……
说明:
①在Erase语句中,只给出要刷新的数组名,不带括号和下标
②Erase语句用于静态数组时,用来重新初始化各元素,内容被清空。
若是数值数组各元素被置0,字符数组各元素被置为空字符串。
③Erase语句用于动态数组时,删除整个数组的结构并释放该数组所占用的内存。
动态数组经Erase后不再存在。
下次引用该动态数组之前,必须用ReDim语句重新定义该数组的维数。
4.数组元素的基本操作
一、给数组元素赋值
1.利用循环结构
Fori=1to5
A(i)=3
Nexti
2.利用InputBox()函数输入
PrivateSubCommand1_Click()
Dimb(2,3)
Fori=0To2
Forj=0To3
b(i,j)=InputBox("输入"&Str(i)&","&Str(j)&"的值")
Nextj
Nexti
Fori=0To2
Forj=0To3
Printb(i,j);"";
Nextj
Print
Nexti
EndSub
当给一个较大的数组赋值时,以上方法比较麻烦,可以用Array()函数解决。
3.利用Array()函数
PrivateSubForm_Click()
Dima,b
a=Array(1,2,3,4,5)
b=Array("11","22","33")
Fori=0ToUBound(a)
Printa(i);
Nexti
print
Fori=0ToUBound(b)
Printb(i);
Nexti
Print
EndSub
说明:
①Array()函数对各元素赋值,声明的数组是动态数组或连小括号都省略的数组,并且类型只能是Varient。
②数组下界默认为0,可通过OptionBase语句决定,上界由Array()函数括号内的参数个数决定,也可通过UBound()函数获得。
③Array函数只适用于一维数组。
二、数组元素的输出
可以通过Print语句对数组输出
对一维数组,用单重循环就能实现,对二维数组,要用二重循环实现。
三、数组元素的复制
1.单个数组元素可以像简单变量一样从一个数组复制到另一个数组。
如:
Dimb(4),a(6)
……
b
(2)=a(3)
2.要复制整个数组,要使用For循环语句。
PrivateSubCommand1_Click()
Dima(),b()
a=Array(1,2,3,4,5)
ReDimb(UBound(a))
Fori=0ToUBound(a)
b(i)=a(i)
Nexti
Fori=0ToUBound(a)
Printb(i);
Nexti
EndSub
3.要复制整个数组,也可以使用一条简单的赋值语句即可。
如:
Dima(4)asinteger,b()asinteger
A(0)=0:
a
(1)=5:
a
(2)=10:
a(3)=13:
a(4)=14
B=a
使用这种方法赋值时,必须要注意:
①赋值号两边的数据类型必须一致
②如果赋值号左边的是一个大小固定的数组,则数组赋值出错
③赋值号左边的必须是一个动态数组,赋值时系统自动将动态数组ReDim成与右边同样大小的数组
四、ForEach…Next语句
与For…Next语句类似,两者都是用来执行指定重复次数的语句。
但ForEach…Next语句是专门用于操作数组的,它的格式如下:
ForEach<成员>In<数组名>
[<循环体>]
[ExitFor]
Next[<成员>]
说明:
①格式中的“成员”必须是一个变体变量,是为循环提供的,代表的是数组中的每个元素。
②〈数组名〉没有括号和上下界
用ForEach…Next语句可以对数组元素进行处理,它所重复执行的次数由数组中元素的个数确定,数组中有多少个元素,就自动重复执行多少次。
例:
OptionBase1
PrivateSubCommand1_click()
Dimabc(10)AsInteger
Fori=1To10
abc(i)=Int(Rnd*100)
Nexti
Print"使用普通循环输出:
"
Fori=1To10
Printabc(i);
Nexti
Print
Print"使用ForEach…Next输出:
"
ForEachxInabc
Printx;
Next
EndSub
5.自定义数据类型
自定义数据类型由若干个标准数据类型组成,又称记录类型。
通过Type语句实现。
格式:
Type自定义类型名
元素名[(下标)]As类型名
……
[元素名[(下标)]As类型名]
EndType
如:
TypeStudent
NoAsInteger
NameAsString*20
SexAsString*1
Mark(1To4)AsSingle
TotalAsSingle
EndType
说明:
①自定义数据类型一般在标准模块(.bas)中定义,默认是Public。
若在窗体模块中定义,必须是Private。
②自定义数据类型中的元素类型可以是字符串,但应是定长字符串。
定义好了类型,就可在变量的声明时使用该类型,定义的方法和标准类型是一样的。
比如:
Dimstuasstudent
表示自定义类型变量中元素的格式为:
变量名.元素名,如stu.no,stu.name等。
可给变量stu赋值:
§3.2标准函数
1.数学函数
Sin(N):
返回自变量N的正玄函数值,如:
sin(0)=0,N为弧度。
Cos(N):
返回自变量N的余玄函数值,如:
cos(0)=1,N为弧度。
Tan(N):
返回自变量N的正切函数值,如:
tan(0)=0,N为弧度。
Atn(N):
返回自变量N的反正切值,如:
atn(0)=0,函数值为弧度。
Sgn(N):
返回自变量N的符号。
N<0,返回-1;N=0,返回0;N》0,返回1。
如:
Sgn(35)=1,Sgn(0)=0,Sgn(-5.34)=-1
Abs(N):
返回自变量N的绝对值,Abs(-345)=345,Abs(345)=345。
Sqr(N):
返回自变量N的平方根,N>=0,如:
Sqr(81)=9。
Exp(N):
返回e的N次幂值,n>=0。
如:
Exp(3)=20.086。
Log(N):
返回N的自然对数,N>0,如:
Log(10)=2.3
Int(N):
返回不大于N的最大整数,如:
Int(3.6)=3。
Cint(N):
四舍五入整数。
Cint(3.6)=4。
Rnd(N):
返回0~1之间的随机小数。
注意:
三角函数的自变量以弧度表示。
2.转换函数
lFix(n):
返回n的整数部分,截取小数部分;如:
Fix(3.4)=3。
lAsc(c):
返回字符串C首字符的ASCII码值,如:
Asc(”A”)=65。
lChr(n):
返回ASCII码值为n的字符,Chr(65)=”65”。
lVal(c):
把数字组成的字符串型数据转换称数值型。
Val(”456”)=456。
lStr(n):
把数值n转换成字符型,Str(357)=”357”。
lLcase(c):
把字符串c中大写字母转换为小写字母。
Lcase(”A”)=”a”。
lUcase(c):
把字符串c中小写字母转换为大写字母。
Ucase(”a”)=”A”。
3.字符串函数
lTrim(c):
去掉字符串c两端的空格,Trim(”ab”)=”ab”。
lLeft(c,n):
截取C最左边的n个字符,Left(”command,3”)=”com”。
lRight(c,n):
截取c最右边的n个字符,Right(”command,3”)=”and”.
lMid(C,m,n):
截取c中第m个字符开始的n个字符。
Mid(”command”,3,2)=”mm”。
lLen(c):
返回c包含的字符数,汉字空格都算一个字符。
Len(”中”)=1。
lUcase(c):
将c中的小写字母转换成大写字母。
Ucase(”Who”)=”WHO”.
lLcase(c):
将c中的大写字母转换成小写字母。
Lcase(”Who”)=”who”。
4.日期与时间函数
lTime[$][()]:
返回系统当前时间;
lDate[$][()]:
返回系统当前日期;
lNow[()]:
返回系统当前日期和时间;
lDay(c/n):
返回数据中当月第几天;
lMonth(c/n):
返回数据中当年第几月;
lWeekDay(c/n):
返回数据当天是星期几。
§3.3基本控制结构
3.1顺序结构
顺序结构就是各语句按出现的先后次序执行。
主要是由一些赋值语句、输入/输出语句等组成。
l。
赋值语句
格式:
变量名=表达式
在VB中,既可以给一个变量赋值,也可以给对象的某一个属性赋值。
lInputBox()函数
格式:
InputBox(提示[,标题][,默认][,x坐标位置][,y坐标位置])
功能:
产生一个对话框,让用户从键盘输入内容,当用户单击“确定”按钮或按回车键时,函数返回输入的值。
PrivateSubCommand1_Click()
r=InputBox("请输入姓名","教师登记表","张三",3000,4000)
Printr
EndSub
其中:
“提示”:
字符串表达式,在对话框中作为信息显示。
“标题”:
字符串表达式,在对话框的标题区显示。
“默认”:
字符串表达式,显示输入框里的默认信息。
“x坐标位置”、“y坐标位置”:
整型表达式,坐标确定对话框左上角在屏幕上的位置,屏幕左上角为坐标原点,单位为twip。
在这五个参数中,只有“提示”是必选的。
注:
函数的返回值为字符串类型,所以如果要对返回值进行算术运算,必须要转换成数值型的。
例如:
PrivateSubCommand1_Click()
r=InputBox("请输入第一个数")
s=InputBox("请输入第二个数")
r=Val(r):
s=Val(s)
x=r+s
Printx
EndSub
3.2选择结构
选择结构,就是对条件进行判断,根据判断结果,选择执行不同的分支。
VB中提供了多种形式的条件语句来实现,我们主要介绍If条件语句和Select
Case语句
lIf条件语句
If条件语句有两种格式:
单行结构和块结构
1.单行结构
格式:
If<条件>Then<语句块1>[Else<语句块2>]
如果Then或Else后面有多条语句,那么各语句之间用“:
”隔开。
2.块结构
格式:
If<条件>Then
<语句块l>
[Else
<语句块2>]
EndIf
Then和Else后面不能有语句,而且最后不要忘了写上EndIf。
这两种结构都比较简单,就不再举具体的例子了。
在实际应用中,我们还经常用的If语句的嵌套,即一个If语句里又包含一个If语句。
举一个简单的例子:
某商场为了促销,采用购物打折的优惠办法,每位顾客一次购物
(1)1000元以上,按九五折优惠
(2)2000元以上,按九折优惠
(3)3000元以上,按八五折优惠
(4)5000元以上,按八折优惠
编写程序,输入购物款数,计算并输出优惠价。
方法一:
PrivateSubCommand1_Click()
DimxAsSingle,yAsSingle
x=val(Text1.Text)
Ifx<1000Then
y=x
Else
Ifx<2000Then
y=0.95*x
Else
Ifx<3000Then
y=0.9*x
Else
Ifx<5000Then
y=0.85*x
Else
y=0.8*x
EndIf
EndIf
EndIf
EndIf
Text2.Text=Str(y)
EndSub
上面的这个程序出现多次If语句嵌