Visual Basic 程序设计 第3章 BASIC 语言基础 信息学院 魏洪涛
主要内容 基本数据类型:数值型、字符型、日期型、布尔型、变体型 常量与变量及其定义 不同数据类型的运算 表达式 内置函数
基本数据类型 Integer ,% 类型 名称,声明符 字节数 范围 整型 2 -32768 (-215) ~ 32767 长整型 Long , & 4 -231 ~ 231-1 单精度 Single , ! 尾数24位,指数8位* 双精度 Double , # 8 尾数53位,指数11位* 字符型 String , $ 定长用 String*n (n-长度) 货币型 Currency , @ 在±2 63×10 - 4 之间 均指二进制的位,尾数和指数都含 1 位符号位。 尾数在(-1,1)之间。
基本数据类型(续) 类型 声明类型 字节数 范围 布尔型 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 任何对象引用(指针)
常量 直接常量 数值常量,如: 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按钮
常量 符号常量分VB已定义的符号常量和自定义符号常量。 VB常量,如: vbCrLf 回车换行 chr(13) & chr(10) vbYesNo =4,在消息框msgbox中显示 Yes 和 No按钮 好处:便于记忆,便于程序阅读 查阅定义:在对象管理器中
自定义符号常量-声明 声明常量的好处: Const PI=3.1415926 便于识别(使用有意义的符号,如PI) [Public|Private] Const [as <类型>] <常量名>=<常量表达式> 例: Const PI=3.1415926 Const VB as string _ = “Visual Basic“ Public Const conMax=99 Const PI2=PI*2 Const T911= #2001-9-11# 声明常量的好处: 便于识别(使用有意义的符号,如PI) 便于修改(只需修改定义部分) 减少差错:避免输入错误,便于查错
枚举类型-定义符号常量集合 语法 例如: 在对象浏览器中观察自定义的类型 [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 在对象浏览器中观察自定义的类型
变量及其命名规则 变量分内存变量和属性变量。 属性变量即对象的属性,其名称与类型是确定不变的,例如Caption属性,其变量名是 对象名.Caption,而其类型为String。 一般变量即指内存变量,其名称与类型是由程序员定义的。 变量名不能以数字开始,不能用VB的保留字 变量名只能由字母、数字和下划线组成 变量名可以使用中文,但较少见。
变量的声明 变量的声明语句: 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型
表达式 常量、变量、函数用运算符连接而成 单独一个常量,或变量,或函数都可以看作是一个表达式 运算结果称为表达式的值,该值的数据类型即为表达式的类型。
运算符 数值运算:+ - * / (加减乘除) \ (整除) , 如: 10\3= 3 mod (求余数),如: 12 mod 5 = 2 数值运算:+ - * / (加减乘除) \ (整除) , 如: 10\3= 3 mod (求余数),如: 12 mod 5 = 2 ^ (幂), 如: 3^4 =81 ( 34) 比较运算: < <= = >= > <> 连接运算: & (或+) 逻辑运算: not and or xor equ imp VB内置函数
数值运算 算术运算:+ - * / (加减乘除) 整除:\ 如 11\3,结果为 3 求余数:mod 如 14 mod 5 ,结果为 4 算术运算:+ - * / (加减乘除) 整除:\ 如 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
数值运算的精度 数值表达式的运算结果一般为Double或Long类型。但如果含Single类型的变量或常量,则可能降低其运算精度。 数值常量也可以使用类型后缀(%,&,!,#),从而改变其参加运算的表达式的运算精度。例如: ?1/3 输出 .333333333333333 ? 1/3! 输出 .3333333 其中3!表示单精度常数3,不是3的阶乘!
日期型数据的运算 日期型数据可以加减天数(可含小数),结果仍为日期型。例如:#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
比较运算 运算: < <= = >= > <> 运算: < <= = >= > <> 比较结果为 True 或 False 双字符运算符( <=、>= 和 <> )两字符之间不能有空格,也不能写成 =<、=>、> < 字符型数据按其内码(Unicode)大小比较 Unicode:2字节无符号整数,国际通用码。 ASCII码表中的符号,码值不变,位长16。 注意:对浮点(单精度、双精度)数不要进行=(等于)比较,如 ?1/3 显示.333333333333333 ?1/3= .333333333333333 显示False
字符串的连接运算 字符串的连接运算: & (推荐使用) 或: + (尽量不用) 例如: 字符串的连接运算: & (推荐使用) 或: + (尽量不用) 例如: “安徽“ & “合肥“ = “安徽合肥“ 在文本框Text1和Text2中分别输入 3 和 4,则表达式 Text1.Text+Text2.Text 的值为“34”而不是7。这是因为Text属性 的类型是字符型,而不是数值型。
逻辑运算 A B Not A A And B A Or B A Xor B A Equ B A Imp B F T 注:1. A、B均为逻辑表达式。如果是数值,则其值非零时看作True,值为零时看作False。 例如:表达式 4>3 And 5>4 的值为True 2. F - False,T - True
按位运算 例: 1 A 1010 not A 0101 A or B 1110 B 1100 A and B 1000 A xor B 1 例: A 1010 not A 0101 A or B 1110 B 1100 A and B 1000 A xor B 0110
运算的优先级 算术运算 ^ → - (负)→ * / → \ → mod →+ -(加减) 连接运算 & 比较运算 ^ → - (负)→ * / → \ → mod →+ -(加减) 连接运算 & 比较运算 < <= = > >= 均同级 逻辑运算 not→and→or → xor→equ→imp
例 5+3^2 20\7 2*3=6 and 5>2*2 #8/1/2008# +7 “6=“ & “1+2+3“ 表达式 值 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 2 True 2008-8-8 6=1+2+3 9 False True 7 2
VB内置函数 VB内置函数是可以直接使用的函数 内置函数是调用内部子程序后返回的结果,称为函数的值。此值的类型称为函数的类型。 不同的函数有不同的参数,要注意每种函数所带参数的个数和类型。 函数可以直接放在表达式中,为数据处理带来很大方便。
{ 数学函数 符号函数 Sgn:Sgn(x)= VB内置函数 三角函数: 用弧度 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)= { -1 当 x < 0 0 当 x = 0 1 当 x > 0
数学函数的应用实例 ∵ Tan(π/4)=1 ∴π=4*Atn(1) = 3.14159265358979 可用于定义常量: Const PI= 4*Atn(1) e = exp(1) = 2.71828182845905 π=4 * Atn(1) e=Exp(1)
VB内置函数 随机函数 (伪)随机函数 Rnd : 产生0~1之间的1个随机数,0 < Rnd < 1 随机函数在测试、模拟、游戏等程序中有广泛应用。例如,要产生一个1~6之间的随机整数,可以用表达式: Int(Rnd*6)+1 Randomize语句:产生随机数的种子,从而改变随机数序列。
日期时间函数 不带参数: 带参数(日期型表达式): VB内置函数 日期函数 Date 和 Date$ 取系统日期 时间函数 Time 和 Time$ 取系统时间 日期和时间函数 Now 取系统日期和时间 当天已过时间总秒数 Timer 带参数(日期型表达式): Year,Month,Day 分出年月日 Weekday 算出星期几 Hour,Minute,Second 分出时分秒
字符串函数(1) 取子字符串: 取长度(字符数)函数 Len,如 Len(“Go!”)=3 VB内置函数 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
字符串函数(2) 求子串位置 InStr ,如 转换函数: 注:中文VB使用双字节的Unicode码 VB内置函数 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码
字符串函数(3) 空格函数Space(n),返回n个空格 字符重复函数 String(n,c),返回n个字串c的第一个字符 大小写转换函数: VB内置函数 字符串函数(3) 空格函数Space(n),返回n个空格 字符重复函数 String(n,c),返回n个字串c的第一个字符 大小写转换函数: Lcase(s) 转换为小写 Ucase(s) 转换为大写
转换函数和判断函数 转换函数 Cint,CLng,CSng,CStr,… 注意其命名法:C+<类型缩写> 判断函数 VB内置函数 转换函数和判断函数 转换函数 Cint,CLng,CSng,CStr,… 注意其命名法:C+<类型缩写> 判断函数 IsNumeric(表达式) 判是否数值,布尔型 IsEmpty(变量) 判是否空值,布尔型 IIf(条件,值1,值2) Typename(表达式)返回表达式的类型名 IsDate (表达式)判是否日期,布尔型
格式转换函数 函数格式: Format(<表达式>,<格式字串>) 功能:将表达式的值按指定格式进行转换。 例: VB内置函数 格式转换函数 函数格式: Format(<表达式>,<格式字串>) 功能:将表达式的值按指定格式进行转换。 例: Format(1.2,”00.000”)=”01.200” Format(Date,”yy.m.d”)=”05.3.8”
语句的书写格式 一般情况下,每行一条语句 一行多条语句之间用冒号( : )作分隔符,如 a=1 : b=2 : c=3 长语句分多行书写是,可在换行前加续行符(下划线_),例如: MsgBox “Sum Of 1,2,3,…,100 is “ _ & vbcrlf & x , vbInformation 注释部分以单引号 ( ‘ ) 开头,止换行