第2章 VB语言基础 本章要点: 数据类型 常量和变量 运算符表达式 函数
2.1 数据类型 用户自定义的数据类型 基本数据类型 分为 基本数据类型: 字符型 数值型 布尔型 日期型 对象型 可变类型
1 字符型数据(String) 由双引号""括起来的一串符号 例: "abc" "ABC" "计算机" "12.34" "3+2" ""(空串) (1)定长字符串:在程序执行过程中长度始终保持不变的字符串,字符长度不超过65535。 (2)变长字符串:长度不固定的字符串,随着对字符串变量赋予新的值,其长度可增可减。
2 数值型数据 Integer(整型) Long(长整型) Single(单精度浮点型) Double(双精度浮点型)
(1) 整型(Integer) 以2个字节存储 十进制表示: 由+ -号,0~9 组成 范围: -32768~32767 八进制表示: 以&O开头,由 0~7组成 范围: &O0 ~&O177777 十六进制表示: 以&H开头,由 0~9,A~F组成 范围: &H0 ~&HFFFF 例: -325 0 56 +100 &O456 &O36 &H1AC &H38 &H2
(2) 长整型(Long) 以4个字节存储 十进制表示: 由+ -号,0~9 组成 范围: -2147483648~+2147483647 八进制表示: 以&O开头,以&结束 范围: &O0& ~&O37777777777& 十六进制表示: 以&H开头,以&结束 范围: &H0& ~&HFFFFFFFF& 例: 453466 -34568 +1000000 &O456& &O36& &H1AC& &H38& &H2&
(3) 单精度浮点型(Single) 以4个字节存储,可以精确到7位十进制数 例: 3.234E+2 表示3.234102 -28E9 表示-28109 4.56E-17 表示4.5610-17 (4) 双精度浮点型(Double) 以8个字节存储,可以精确到16位十进制数 3.234D+2 表示3.234102 -28D9 表示-28109 4.56D-17 表示4.5610-17
3 货币类型(Currency) 4. 字节型(Byte) 以8个字节存储,用于表示定点数,其小数点左边有15位数字,右边有4位数字。 用一个字节存储数据,其取值范围为0~255。
5 布尔型数据(Boolean) 用于表示某个条件的成立或不成立。 只有True和False两个值
6 日期型数据(Date) 用于表示日期和时间 格式: #……# VB接受许多种日期时间格式 例: 下面的 Date/Time 值全部有效。 #3-6-93 13:20# #March 27,1993 1:20am# #Apr-2-93# #14 April 1993# #12/18/1999#
7 通用类型(Variant) 也称变体类型,是一种通用的、可变的数据类型,它可以表示上述任何一种数据类型。 对象型数据(Object) 以4个字节存储,用于引用程序中的对象。
2.1.2 用户自定义类型 是用户自己定义的类型,这种类型可以包含多个基本类型。使用Type语句定义。 Type语句格式: [Private|Public] Type <用户自定义类型名> <元素名>[(下标)] As <类型> … End Type
说明: 1)<用户自定义类型名>、<元素名>应遵循标识符的命名规则。<类型>可以是Visual Basic系统提供的基本数据类型或已声明的用户自定义类型。缺省[Private|Public]选项时,默认是Public。 2)用户自定义类型必须在窗体模块或标准模块的通用声明段进行声明。在窗体模块中定义用户自定义类型时必须使用Private关键字。 3)如果用户自定义类型的元素为数组,则需要使用<下标>参数。 4)在使用用户自定义类型前,必须先声明用户自定义类型的变量。
例:定义一个Students数据类型,该类型中的每一个数又包含了学生的系、班级、姓名、年龄信息。定义格式为: Private Type Students Dept As String * 20 ' 系 ClassNo As String * 10 ' 班级 Name As String ' 姓名 Age As Integer ' 年龄 End Type
2.2 常量和变量 2.2.1 常量:指在程序运行期间其值不发生变化的量。 两种形式: 直接常量;符号常量 1 直接常量 2.2 常量和变量 2.2.1 常量:指在程序运行期间其值不发生变化的量。 两种形式: 直接常量;符号常量 1 直接常量 例: "欢迎使用Visual Basic" 字符串常量 12345 数值型常量 True 布尔型常量 #11/10/2001# 日期型常量 2 符号常量 格式: Const <常量名> [As <类型>]=<表达式>
例: Const Pi = 3.14159 Const Max As Integer = 9 Const BirthDate = #1/1/01# Const MyString = "friend" ' 用逗号分隔多个常量声明 Const Pi = 3.14, Max = 9, MyStr="Hello" ' 用先前定义过的常量定义新常量 使用: 在程序中引用 如: AREA=Pi*R^2 在程序中不可修改 如: Pi=3.14
2.2.2 变量 1. 什么是变量? 一个有名称的内存单元称为变量。 … 5 A 程序执行期间,用变量临时存储数值。 变量的值可以发生变化。 每个变量都有名称和数据类型。
2. 变量的命名遵循标识符的命名规则,即 第一个字符必须是字母 长度不超过255个字符 不可以包含小数点或者内嵌的类型声明字符 不能使用关键字 不能与过程名或符号常量同名 例: Student1 MyName intMax strName 不区分大小写;变量名应便于识别、记忆
3. 变量的声明 (1) 显式声明 格式: Dim|Private|Public| Static <变量名> [As <类型>] 说明: Dim: 在窗体模块、标准模块或过程中声明变量。 Private: 在窗体模块或标准模块中声明变量,使变量仅在该模块中有效。 Public: 在标准模块中声明全局变量,使变量在整个应用程序中有效。 Static: 在过程中定义静态变量,即使该过程结束,也仍然保留变量的值。
例: Dim Sum As Long Dim Address As String Dim No As String * 8 Private b As Integer Dim Num, Total As Integer ' Num为可变类型 Public Average As Single Static A As Long (2) 隐式声明 可变类型。易出错、浪费空间 (3) 强制显式声明 在模块的声明段中使用语句: Option Explicit 如果设置: 工具→选项→编辑器→要求变量声明 则在后续模块中自动插入Option Explicit
例: Static的作用。 设在窗体中放置按钮C1 Private Sub C1_Click() Static a As Integer a = a + 10 Print a End Sub Private Sub C1_Click() Dim a As Integer a = a + 10 Print a End Sub 运行时,多次单击命令按钮C1, 比较以上两个事件过程的执行效果
2.3 运算符表达式 操作数: 常量、变量、函数、对象 运算符: 圆括号 算术运算符(算术表达式) 字符串运算符(字符串表达式) 2.3 运算符表达式 操作数: 常量、变量、函数、对象 运算符: 圆括号 算术运算符(算术表达式) 字符串运算符(字符串表达式) 关系运算符(关系表达式) 布尔运算符(布尔表达式)
1 算术运算符与算术表达式 书 写: 一条线、无[ ] 、无{ } 优先级 运算符 运算 示例 1 ^ 乘方 3^2 2 - 取负 -9 3 1 算术运算符与算术表达式 优先级 运算符 运算 示例 1 ^ 乘方 3^2 2 - 取负 -9 3 * 乘法 3*5 / 浮点除法 10/3 4 \ 整数除法 5 Mod 取模 10 mod 3 6 + 加法 2+3 减法 2-3 书 写: 一条线、无[ ] 、无{ }
1. 乘方运算 例: 10^2 10的平方,结果为100 10^(-2) 10的平方的倒数,结果为0.01 2. 整数除法 例: 10\4 结果为2 25.68\6.99 先四舍五入再整除,结果为3 3. 取模运算 例: 10 Mod 4 结果为2 25.68 Mod 6.99 先四舍五入再求余数,结果为5 11 Mod – 4 结果为3 -11 Mod 5 结果为-1 -11 Mod -3 结果为-2 结果符号同第一个操作数
2 字符串运算符 字符串运算符有两个: & + &:自动将两侧的操作数作为字符进行连接 2 字符串运算符 字符串运算符有两个: & + &:自动将两侧的操作数作为字符进行连接 例: "Hello" & " World" 结果为"Hello World" "Check" & 123 结果为"Check123" 123 & 456 结果为"123456" "123" & 456 结果为"123456" +:仅当两侧操作数都为字符串时才做字符串连接 123 + 456 结果为579 "123" + 456 结果为579 "123" + "456" 结果为"123456" "Check" + 123 错误
3 关系运算符 1. 关系运算符(比较运算符) <(小于) <=(小于或等于) >(大于) >=(大于或等于) 3 关系运算符 1. 关系运算符(比较运算符) <(小于) <=(小于或等于) >(大于) >=(大于或等于) =(等于) <>(不等于) 2. 关系表达式: <表达式1> <比较运算符> <表达式2> 例:X > Y+Z A >= 5 StudName <> "Shelly"
3. 运算规则 数值比较 按数值大小 字符串比较 根据当前的比较方式从左开始逐个比较,按其ASCII码值进行比较 。 典型的二进制排序顺序如下: " "<"0"<"1"<……<"9" <"A"<"B"<…… < "Z" <"a"<"b"<……<"z" 日期数据比较 将日期看成“yyyymmdd”的8位整数,按数值大小比较。
数值型与可以转换为数值型的数据比较 按数值大小 汉字字符按区位顺序比较。
4. 比较结果: True False 例: 45 < 35 结果为 False 45 = 45 结果为True 4 <> 3 结果为True "abc" > "cdf" 结果为False "for" < "fortran" 结果为True
4 逻辑运算符 1. 逻辑运算符: Not And Or 2. 逻辑表达式: 4 逻辑运算符 1. 逻辑运算符: Not And Or 2. 逻辑表达式: <关系表达式1> <布尔运算符> <关系表达式2> 3. 优先级: Not→And→Or 例: A = 10: B = 8: C = 6。 Not (A > B) 结果为 False Not (B > A) 结果为True A > B And B > C 结果为True B > A And B > C 结果为False A > B Or B > C 结果为True B > A Or B > C 结果为True A < B Or B= C 结果为False
5 表达式的运算顺序 ( ) →函数运算→算术运算→关系运算→布尔运算 例:设a=3,b=5,c=-1,d=7,求以下表达式的值。 5 表达式的运算顺序 ( ) →函数运算→算术运算→关系运算→布尔运算 例:设a=3,b=5,c=-1,d=7,求以下表达式的值。 a + b > c + d And a >= 5 Or Not c > 0 Or d < 0 ①8 ②6 ④False ⑤ False ⑥False ③True ⑦True ⑧ False ⑨ True ⑩True
2.4 函数 内部函数 函数分类 用户自定义函数 函数形式: 函数名[(<参数表>)] 参数:常量、变量或表达式。 2.4 函数 函数分类 内部函数 用户自定义函数 函数形式: 函数名[(<参数表>)] 参数:常量、变量或表达式。 若有多个参数,参数之间以逗号分隔。 函数值:也叫“返回值” 函数的使用: 函数在表达式中被调用。
1 数学函数 例: (1)fix(x)舍去x的小数部分 Fix(45.67) 结果为45 Fix(-2.89) 结果为-2 1 数学函数 例: (1)fix(x)舍去x的小数部分 Fix(45.67) 结果为45 Fix(-2.89) 结果为-2 (2)int(x)取不大于x的最大整数 Int(45.67) 结果为45 Int(-2.89) 结果为-3 (3)abs(x)求x的绝对值 Abs(-4) 结果为4
(4)log(x)求以e为底x为指数的值 Log(10) 结果为2.30258509299405 (5)sgn(x)求x的符号代码,x为正数时函数值为1,x为0时函数值为0,x为负数时函数值为-1 Sgn(3) 结果为1 Sgn(-6) 结果为-1 Sgn(0) 结果为0
2 日期和时间函数 返回系统的日期和时间、或返回指定日期和时间的一部分。 Now:返回系统日期和时间。 Date:返回系统日期。 Time:返回系统时间。 Day(d):返回参数d中指定的日期是月份中的第几天。 WeekDay(d):返回参数d中指定的日期是星期几。 Month(d):返回参数d中指定日期的月份。 Year(d):返回年份。
Hour(d):返回小时(0~23)。 Minute(d):返回分钟(0~59)。 Second(d):返回秒(0~59)。 Timer:返回从午夜开始到现在经过的秒数。
3 字符串函数 例: (1)ltrim(字符串)删除字符串左端空格字符 LTrim("∪∪∪ABC") 结果为"ABC" 3 字符串函数 例: (1)ltrim(字符串)删除字符串左端空格字符 LTrim("∪∪∪ABC") 结果为"ABC" 表示空格 (2)rtrim(字符串)删除字符串右端空格字符 RTrim("ABC∪∪∪") 结果为"ABC" (3)trim(字符串)删除字符串两端空格字符 Trim("∪∪∪ABC∪∪∪") 结果为"ABC" (4)left(字符串,n)截取字符串左端n个字符 Left("ABCDE",2) 结果为"AB" (5)right(字符串,n)截取字符串右端n个字符 Right("ABCDE",2) 结果为"DE" (6)mid(字符串,m,n)截取字符串中间从m个字符起的n个字符 Mid("ABCDE",2,3) 结果为"BCD" Mid("ABCDE",2,6) 结果为"BCDE"
(7)len(字符串)返回字符串中所包含的字符个数 Len("ABCDE") 结果为5 (8)string(n,字符串)生成n个字符串首字母 String(3,"ABC") 结果为"AAA" String(3,65) 结果为“AAA” (9)instr(字符串1,字符串2)字符串2首字母在字符串1中的位置 InStr("ABCDECDE","DE") 结果为4 InStr(5,"ABCDECDE","DE") 结果为7 (10)ucase(字符串)把字符串中的字母转换为大写字母 UCase("Abc") 结果为"ABC" (11)lcase(字符串)把字符串中的字母转换为小写字母 LCase("ABc") 结果为"abc"
4 转换函数 例: (1)asc(字符串)求字符串中首字符的ASCII码 Asc("A") 结果为65 Asc("ABC") 结果为65 4 转换函数 例: (1)asc(字符串)求字符串中首字符的ASCII码 Asc("A") 结果为65 Asc("ABC") 结果为65 (2)chr(表达式)求以表达式值为ASCII码的对应字符 Chr(65) 结果为"A" (3)str(数值表达式)把数值表达式的值转换为对应的字符串 Str(123) 结果为"∪123" Str(-123) 结果为"-123"
(4)val(字符串)把字符串中的数字转换为对应的数值 Val("123AB") 结果为123 Val(".123AB") 结果为.123 Val("a123AB") 结果为0 Val("12E2ABC") 结果为1200
(1)hex(x)十进制转换为对应的十六进制 Hex(27) 结果为"1B" Hex(45.7) 结果为"2E" (2)oct(x)十进制转换为对应的八进制 Oct(27) 结果为"33" Oct(45.7) 结果为"56" (3)cint(数值表达式)把数值表达式的值转换为整型,小数四舍五入 CInt(5.3) 结果为5 CInt(-5.7) 结果为-6 CInt(32766.6) 结果为32767 CInt(32767.8) 溢出错误 CInt(0.5) 结果为0
(4)clng(数值表达式)把数值表达式值转换为长整型,小数四舍五入 (5)csng(数值表达式)把数值表达式值转换为单精度型 CSng(123.56789) 结果为123.5679 (6)cdbl(数值表达式)把数值表达式的值转换为双精度型 CDbl(123.56789) 结果为123.56789
(7)ccur(数值表达式)把数值表达式值转换为货币型,小数四舍五入 CBool(5.8 * 4) 结果为True CBool(-5.8) 结果为True CBool(0) 结果为False CBool("12") 结果为True CBool("0") 结果为False CBool("abc") 出错
5 格式输出函数 例: Format(123.45, "0000.000") 结果为"0123.450" Format(123.45, "0.0") 结果为"123.5" Format(123.45, "####.###") 结果为"123.45" Format(123.45, "#.#") 结果为"123.5" Format(0.123, ".##") 结果为".12" Format(0.123, "0.##") 结果为"0.12" Format("HELLO", "<") 结果为"hello" Format("This is it", ">") 结果为"THIS IS IT" 注: 经Format函数格式化后的结果为字符串类型 例: Format(123) + Format(456) 结果为"123456" 区别: Str(123) + Str(456) 结果为"∪123∪456"
6 随机函数 1. 随机函数 Rnd[(x)] 产生[0,1)之间的单精度随机数。 x<0: 每次使用x作为随机数种子得到相同的结果。 6 随机函数 1. 随机函数 Rnd[(x)] 产生[0,1)之间的单精度随机数。 x<0: 每次使用x作为随机数种子得到相同的结果。 x>0: 以上一个随机数作种子,产生序列中的下一个随机数。 x=0: 产生与最近生成的随机数相同的数。 省略x: 同x>0 2. Randomize语句 初始化随机数发生器,格式: Randomize[n] n:种子,省略时以系统时间作为种子
生成[a,b] 范围内的随机整数 Int(( b-a+1) *Rnd +a) 例:生成[1,99]之间的随机整数的表达式为: Int(99*Rnd+1) 例:生成(1,99)之间的随机整数的表达式为: Int(97*Rnd+2)
本章小结 1. 数据类型 字符类型、数值类型、布尔类型、日期类型 2. 常量变量 直接常量、符号常量、变量 3. 运算符表达式 算术运算、关系运算、逻辑运算 4. 函数 数学函数、字符串函数、转换函数、日期函数和随机函数