Visual Basic 程序设计
第 3章 BASIC 语言基础
编写, 楼诗风
Visu
al
Bas
ic




?■
万 博 科 技 职 业 学 院
Wanbo Inst,Of Since & Tech.
主要内容
?基本数据类型:数值型、字符型、日期型、
布尔型、变体型
?常量与变量及其定义
?不同数据类型的运算
?表达式
?内置函数
Visu
al
Bas
ic




?■
万 博 科 技 职 业 学 院
Wanbo Inst,Of Since & Tech.
基本数据类型
类型 名称,声明符 字节数 范围
整型 Integer,% 2 -32768 (-215) ~ 32767
长整型 Long,& 4 -231 ~ 231-1
单精度 Single,! 4 尾数 24位,指数 8位 *
双精度 Double,# 8 尾数 53位,指数 11位 *
字符型 String,$ 定长用 String*n (n-长度 )
货币型 Currency,@ 8 在 ± 2 63× 10 - 4 之间
* 均指二进制的位,尾数和指数都含 1 位符号位。
* 尾数在(- 1,1)之间。
Visu
al
Bas
ic




?■
万 博 科 技 职 业 学 院
Wanbo Inst,Of Since & Tech.
基本数据类型 (续 )
类型 声明类型 字节数 范围
布尔型 Boolean 2 True (-1) 或 False (0)
日期型 Date 8 公元 100.1.1 ~ 9999.12.31
字节型 Byte 1 0~ 255
定长
字符型 String * n 2 * n
注:赋值时不足时用空格
补,超长时截尾
变体型 Variant (可省 ) 任何类型数据
对象型 Object 4 任何对象引用 (指针 )
Visu
al
Bas
ic




?■
万 博 科 技 职 业 学 院
Wanbo Inst,Of Since & Tech.
常量
直接常量
?数值常量,如, 3.12,-5,1.3E-8
?日期时间常量,如,#10/12/2002 10:30#
?字符串常量,如,"I'm fine","99.9"
?逻辑常量,True,False
?用符号表示的 VB常量,如:
vbCrLf 回车换行 chr(13) & chr(10)
vbYesNo =4,在消息框 msgbox中显示
Yes 和 No按钮
Visu
al
Bas
ic




?■
万 博 科 技 职 业 学 院
Wanbo Inst,Of Since & Tech.
常量
符号常量分 VB已定义的符号常量和自定
义符号常量。
? VB常量,如:
vbCrLf 回车换行 chr(13) & chr(10)
vbYesNo =4,在消息框 msgbox中显示
Yes 和 No按钮
? 好处:便于记忆,便于程序阅读
? 查阅定义:在 对象管理器 中
Visu
al
Bas
ic




?■
万 博 科 技 职 业 学 院
Wanbo Inst,Of Since & Tech.
自定义符号常量-声明
声明常量的好处,
? 便于识别(使用有
意义的符号,如 PI)
? 便于修改(只需修
改定义部分)
? 减少差错:避免输
入错误,便于查错
例:
Const PI=3.1415926
Const VB as string _
=,Visual Basic“
Public Const conMax=99
Const PI2=PI*2
Const T911= #2001-9-11#
[Public|Private] Const [as <类型 >] <常量名 >=<常量表达式 >
Visu
al
Bas
ic




?■
万 博 科 技 职 业 学 院
Wanbo Inst,Of Since & Tech.
枚举类型-定义符号常量集合
? 语法
[Public|Private] Enum 类型名
<成员名 > [=常量表达式 ]
<成员名 > [=常量表达式 ]
……
End Enum
? 如果没有常量表达式,则第
一个成员等于 0,后一个成员
等于前一个成员加 1。
? 常量表达式为 Long类型
? 类型定义后,可以用在变量
声明语句中
? 例如:
Enum Season
Spring =1
Summer
Fall
Winter
End Enum
结果,Season是个符号常量集合,
其中包含 4个符号常量:
Spring= 1,Summer= 2
Fall= 3,Winter= 4
使用,Dim jd As Season
在对象
浏览器中
观察自定
义的类型
Visu
al
Bas
ic




?■
万 博 科 技 职 业 学 院
Wanbo Inst,Of Since & Tech.
变量及其命名规则
? 变量分 内存变量 和 属性变量 。
? 属性变量即对象的属性,其名称与类型是确定不
变的,例如 Caption属性,其变量名是
对象名,Caption,而其类型为 String。
? 一般变量即指内存变量,其名称与类型是由程序
员定义的。
? 变量名不能以数字开始,不能用 VB的保留字
? 变量名只能由字母、数字和下划线组成
? 变量名可以使用中文,但较少见。
Visu
al
Bas
ic




?■
万 博 科 技 职 业 学 院
Wanbo Inst,Of Since & Tech.
变量的声明
? 变量的声明语句:
Dim|Public|Static <变量名 > [as <类型 >]
? 显式声明语句,Option Explicit
该语句强制变量必须先声明才能使用
? 例, Dim x As Double
Dim i As Integer,j As Single,s As String
或, Dim i%,j!,s$
注意:如声明 Dim x,y As Single
则 x为 Variant型(变体型),y才是 Single型
Visu
al
Bas
ic




?■
万 博 科 技 职 业 学 院
Wanbo Inst,Of Since & Tech.
表达式
?常量, 变量, 函数 用 运算符 连接而成
?单独一个常量,或变量,或函数都可以
看作是一个表达式
?运算结果称为表达式的 值,该值的数据
类型即为表达式的 类型 。
Visu
al
Bas
ic




?■
万 博 科 技 职 业 学 院
Wanbo Inst,Of Since & Tech.
运算符
?数值运算,+ - * / (加减乘除)
\ (整除 ),如, 10\3= 3
mod (求余数 ),如, 12 mod 5 = 2
^ (幂 ),如, 3^4 =81 ( 34)
?比较运算, < <= = >= > <>
?连接运算, & (或 +)
?逻辑运算, not and or xor equ imp
?VB内置函数
Visu
al
Bas
ic




?■
万 博 科 技 职 业 学 院
Wanbo Inst,Of Since & Tech.
数值运算
? 算术运算,+ - * / (加减乘除)
? 整除,\ 如 11\3,结果为 3
求余数,mod 如 14 mod 5,结果为 4
幂运算,^ 如 3^4 即 34,结果为 81
注意,整除( \)和模运算符( mod)两侧 遇
小数点时,先四舍五入,再运算。如,
10.5\3.5=11\4=2
7.2 mod 3.5=7 mod 4=3
Visu
al
Bas
ic




?■
万 博 科 技 职 业 学 院
Wanbo Inst,Of Since & Tech.
数值运算的精度
?数值表达式的运算结果一般为 Double或
Long类型。但如果含 Single类型的变量或
常量,则可能降低其运算精度。
?数值常量也可以使用类型后缀 (%,&,!,# ),
从而改变其参加运算的表达式的运算精度。
例如:
? 1/3 输出,333333333333333
1/3! 输出,3333333
其中 3!表示单精度常数 3,不是 3的阶乘!
Visu
al
Bas
ic




?■
万 博 科 技 职 业 学 院
Wanbo Inst,Of Since & Tech.
日期型数据的运算
? 日期型数据可以加减天数(可含小数),结果仍
为日期型。例如,#2005-9-25# - 10
? 两个日期型数据之差为两个日期之间相隔的天数。
例如,#2005-9-25# - #1986-5-20#
? 日期型数据可以看作一个数值型数据,即该日期
与 #1899-12-30 00:00# 之间相差的天数,其中的
整数部分为日期,小数部分为时间。该数值称为
日期的,系列数”。
例如,用单精度数显示 #1900-1-1 6:00#,
Csng(#1900-1-1 6:00#) 输出, 2.25
Visu
al
Bas
ic




?■
万 博 科 技 职 业 学 院
Wanbo Inst,Of Since & Tech.
比较运算
? 运算, < <= = >= > <>
? 比较结果为 True 或 False
? 双字符运算符( <=,>= 和 <> )两字符之间不能有空
格,也不能写成 =<,=>,> <
? 字符型数据按其内码( Unicode)大小比较
Unicode,2字节无符号整数,国际通用码。
? ASCII码表中的符号,码值不变,位长 16。
? 注意:对浮点(单精度、双精度)数不要进行 =
(等于)比较,如
1/3 显示,333333333333333
1/3=,333333333333333 显示 False
Visu
al
Bas
ic




?■
万 博 科 技 职 业 学 院
Wanbo Inst,Of Since & Tech.
字符串的连接运算
字符串的 连接 运算,& (推荐使用)
或,+ (尽量不用)
例如:
1., 安徽, &,合肥, =, 安徽合肥,
2,在文本框 Text1和 Text2中分别输入
3 和 4,则表达式
Text1.Text+Text2.Text
的值为, 34”而不是 7。这是因为 Text属性
的类型是字符型,而不是数值型。
Visu
al
Bas
ic




?■
万 博 科 技 职 业 学 院
Wanbo Inst,Of Since & Tech.
逻辑运算
A B Not A A And B A Or B A Xor B A Equ B A Imp B
F F T F F F T T
F T T F T T F T
T F F F T T F F
T T F T T F T T
注,1,A,B均为逻辑表达式。如果是数值,则其值
非零时看作 True,值为零时看作 False。
例如:表达式 4>3 And 5>4 的值为 True
2,F - False,T - True
Visu
al
Bas
ic




?■
万 博 科 技 职 业 学 院
Wanbo Inst,Of Since & Tech.
按位运算
A B not A A and B A or B A xor B
0 0 1 0 0 0
0 1 1 0 1 1
1 0 0 0 1 1
1 1 0 1 1 0
例,A 1010 not A 0101 A or B 1110
B 1100 A and B 1000 A xor B 0110
Visu
al
Bas
ic




?■
万 博 科 技 职 业 学 院
Wanbo Inst,Of Since & Tech.
运算的优先级
算术运算 ^ → - (负) → * / →\ → mod → + -(加减)
连接运算 &
比较运算 < <= = > >= 均同级
逻辑运算 not→ and→ or → xor→ equ→ imp
Visu
al
Bas
ic




?■
万 博 科 技 职 业 学 院
Wanbo Inst,Of Since & Tech.

表达式 值 表达式 值
5+3^2 20\7
2*3=6 and 5>2*2 #8/1/2008# +7
“6=,&,1+2+3,Len(“Let’s go!”)
8=5 or not 3>2,abc”>”ABC”
Int(7.65432) 8 mod 3
14
True
6=1+2+3
False
7
2
2008-8-8
9
True
2
Visu
al
Bas
ic




?■
万 博 科 技 职 业 学 院
Wanbo Inst,Of Since & Tech.
VB内置函数
?VB内置函数是可以直接使用的函数
?内置函数是调用内部子程序后返回的
结果,称为函数的 值 。此值的类型称
为函数的 类型 。
?不同的函数有不同的 参数,要注意每
种函数所带参数的个数和类型。
?函数可以直接放在表达式中,为数据
处理带来很大方便。
Visu
al
Bas
ic




?■
万 博 科 技 职 业 学 院
Wanbo Inst,Of Since & Tech.
数学函数
? 三角函数, 用弧度
Cos(x),Sin(x),Tan(x),Atn(x) 单位:弧度
sin2 35° 表示为 sin(35*3.1416/180)^2
? 对数,Log(x),指数,Exp(x) (以 e为底 )
? 平方根, Sqr(x)
? 绝对值, Abs(x) | x-y | 表示为, abs(x-y)
? 取整, Int(x) 取 ≤x的最大整数
Fix(x) 取 x的整数部分
? 符号函数 Sgn,Sgn(x)=
VB内置函数
{ -1 当 x < 00 当 x = 0
1 当 x > 0
Visu
al
Bas
ic




?■
万 博 科 技 职 业 学 院
Wanbo Inst,Of Since & Tech.
数学函数的应用实例
1,∵ Tan(π/4)=1
∴ π= 4*Atn(1) = 3.14159265358979
可用于定义常量:
Const PI= 4*Atn(1)
2,e = exp(1) = 2.71828182845905
π = 4 * Atn(1)
e= Exp(1)
Visu
al
Bas
ic




?■
万 博 科 技 职 业 学 院
Wanbo Inst,Of Since & Tech.
随机函数
?(伪)随机函数 Rnd, 产生 0~ 1之间的 1
个随机数,0 < Rnd < 1
随机函数在测试、模拟、游戏等程序
中有广泛应用。例如,要产生一个 1~ 6
之间的随机整数,可以用表达式:
Int(Rnd*6)+1
?Randomize语句,产生随机数的种子,
从而改变随机数序列。
VB内置函数
Visu
al
Bas
ic




?■
万 博 科 技 职 业 学 院
Wanbo Inst,Of Since & Tech.
日期时间函数
? 不带参数:
? 日期函数 Date 和 Date$ 取系统日期
? 时间函数 Time 和 Time$ 取系统时间
? 日期和时间函数 Now 取系统日期和时间
? 当天已过时间总秒数 Timer
? 带参数(日期型表达式):
? Year,Month,Day 分出年月日
? Weekday 算出星期几
? Hour,Minute,Second 分出时分秒
VB内置函数
Visu
al
Bas
ic




?■
万 博 科 技 职 业 学 院
Wanbo Inst,Of Since & Tech.
字符串函数( 1)
?取子字符串,
? Left 函数:取左边 n 个字符,如
Left(“Basic”,3)=“Bas”
? Right 函数:取右边 n 个字符,如
Right(“Basic”,2)=“ic”
? Mid 函数:取中间 n 个字符,如,
Mid(“Basic”,2,3)=“asi”,Mid(“Basic”,2)=“asic”
?取长度(字符数)函数 Len,如
Len(“Go!”)=3
VB内置函数
Visu
al
Bas
ic




?■
万 博 科 技 职 业 学 院
Wanbo Inst,Of Since & Tech.
字符串函数( 2)
? 求子串位置 InStr,如
InStr(“Welcome”,” come”) = 4
? 转换函数:
? 求值 Val,取前面可作数值的字串转换,如
val(“1.23mm”)=1.23
而 val(“1.23e2abc”)=1.23e2=123
? 数值转字符 Str,Str(12.3)=“12.3”
? 代码 → 字符 Chr,例如 Chr$(65)=“A”
? 字符 → 代码 Asc, 例如 Asc(“A”)=65
注:中文 VB使用双字节的 Unicode码
VB内置函数
Visu
al
Bas
ic




?■
万 博 科 技 职 业 学 院
Wanbo Inst,Of Since & Tech.
字符串函数( 3)
?空格函数 Space(n),返回 n个空格
?字符重复函数 String(n,c),返回 n个字
串 c的第一个字符
?大小写转换函数:
Lcase(s) 转换为小写
Ucase(s) 转换为大写
VB内置函数
Visu
al
Bas
ic




?■
万 博 科 技 职 业 学 院
Wanbo Inst,Of Since & Tech.
转换函数和判断函数
?转换函数 Cint,CLng,CSng,CStr,…
注意其命名法,C+ <类型缩写 >
?判断函数
?IsNumeric(表达式 ) 判是否数值,布尔型
?IsEmpty(变量 ) 判是否空值,布尔型
?IIf(条件,值 1,值 2)
?Typename(表达式)返回表达式的类型名
?IsDate (表达式) 判是否日期,布尔型
VB内置函数
Visu
al
Bas
ic




?■
万 博 科 技 职 业 学 院
Wanbo Inst,Of Since & Tech.
格式转换函数
?函数格式:
Format(<表达式 >,<格式字串 >)
?功能:将表达式的值按指定格式进行转
换。
?例:
?Format(1.2,”00.000”)=” 01.200”
?Format(Date,”yy.m.d”)=” 05.3.8”
VB内置函数
Visu
al
Bas
ic




?■
万 博 科 技 职 业 学 院
Wanbo Inst,Of Since & Tech.
语句的书写格式
?一般情况下,每行一条语句
?一行多条语句之间用冒号 (, )作分隔符,如
a=1, b=2, c=3
?长语句分多行书写是,可在换行前加续行
符(下划线 _),例如:
MsgBox,Sum Of 1,2,3,…, 100 is, _
& vbcrlf & x,vbInformation
?注释部分以单引号 ( ‘ ) 开头,止换行