430 likes | 503 Views
第三章 Visual Basic 语言基础. 教学要求. 了解过程和模块的概念 掌握程序书写规范和程序注释方法 掌握各种数据的定义、使用及表示范围 掌握各种运算符和表达式的使用 掌握常用的标准函数. 教学内容. 3.1 VB 程序代码的组织结构 3.2 代码行的书写规则 3.3 VB 的数据类型 3.4 运算符与表达式 3.5 VB 公共函数. 3.1 VB 程序代码的组织结构 VB 程序是由 界面 和 程序代码 两部分组成,而程序代码又是由说明部分和过程两部分组成的,要编写控制程序执行的代码,必须先了解过程这个概念。.
E N D
第三章 Visual Basic语言基础
教学要求 • 了解过程和模块的概念 • 掌握程序书写规范和程序注释方法 • 掌握各种数据的定义、使用及表示范围 • 掌握各种运算符和表达式的使用 • 掌握常用的标准函数 2
教学内容 • 3.1 VB程序代码的组织结构 • 3.2 代码行的书写规则 • 3.3 VB的数据类型 • 3.4 运算符与表达式 • 3.5 VB公共函数 3
3.1 VB程序代码的组织结构 VB程序是由界面和程序代码两部分组成,而程序代码又是由说明部分和过程两部分组成的,要编写控制程序执行的代码,必须先了解过程这个概念。 4
3.1.1 过程 所谓过程,就是由Sub开头,End Sub结尾的,包含若干条语句的有特定书写格式的代码组合。 根据过程执行的方式,可分为事件过程和通用过程两类。 5
事件过程 • 定义:由事件驱动而执行的,用于响应用户或系统引发的事件的代码过程。如窗体的Load过程、命令按钮的Click过程等。 • 特点:缺省情况下,事件过程是Private的,即仅在所属的窗体范围内有效。 • 存储:事件过程是存储在窗体模块文件中,扩展名为 .frm • 注意:事件过程的过程名及参数是系统定义好的,其参数不得随意改变。 6
通用过程: • 定义:可以被多个窗体和过程调用执行的代码过程。 • 特点:缺省情况下,通用过程是Public的,即可被所有窗体共享,但也可以定义成Private。 • 存储: • 在窗体中定义的通用过程直接存储在窗体模块文件中; • 在标准模块中定义的通用过程是存储在扩展名为.Bas的标准模块文件中。 • 注意:通用过程的过程名及参数由用户自行定义。 7
3.1.2 模块 模块是组织过程代码的一种结构。VB提供了三种类型的模块:窗体模块、标准模块和类模块。 窗体模块:和每个窗体相对应的模块,包含窗体及其中所有控件的属性设置、相关说明和所有事件过程。 标准模块:存放为多个窗体所共享的通用过程的独立代码模块,不属于任何一个窗体,主要在大型应用程序中使用,保存在扩展名为.Bas的文件中。 类模块:存放开发者自行创建的类的属性、方法等。 8
声明部分 事件过程 通用过程 窗体文件 全局声明部分 模块声明部分 通用过程 VB应用程序 标准模块文件 类模块文件 9
3.2 VB程序的书写规范和程序注释 • 一、语句 • VB程序的最基本的成分 • 格式:<语句定义符> [语句体] • 按行书写; • 一个语句可通过续行符号“_”(一个空格加一个下划线)分成多行写; • 多个语句也可以通过分行符号“:”(冒号)写在一行上。 10
二、书写规范 • 字母无大小写区分 • 一行代码输入完毕,按回车键进入下一行 • 一般采取阶梯型书写格式,使程序可读性好,便于查找错误(严格执行) • 代码中除了中文字外,所有的符号都必须在英文状态下输入 • 三、程序注释语句 • [格式一]:Rem <注释字符> • [格式二]:’<注释字符> • [说明]:给程序加注释,增强程序的可读性,该语句为非执行语句。 11
3.3 VB数据类型 3.3.1 数据类型 3.3.2 常量 3.3.3 变量 12
取值范围见P43表3-1 • 3.3.1 数据类型 • Integer: 整型数, 2个Byte • Long : 长整型数, 4个Byte • Single : 单精度数, 4个Byte 7位有效位 • Double : 双精度数, 8个Byte 15位有效位 • Currency: 货币型, 8个Byte 精度高,15个整数和4个小数 • Byte : Byte型数, 1个Byte (一般存储二进制信息) • Boolean: 逻辑型, 2个Byte True 或False • String : 字符串型,分为定长和不定长两种 • Date : 日期型, 8个Byte • Object : 对象型, 4个Byte保存对某对象的引用(内存地址) • Variant : 变体型, 16个Byte 存放无小数的整数 存放有小数的实数 13
3.3.2 常量( Constant) • 指在程序运行过程中值保持不变的量,分为直接常量和符号常量两种。 • 1、 数值常量 • 由正负号、数字和小数点组成,正数的正号可以省略 • 科学计数法 • 格式:<尾数>e/d<指数> • 说明:幂为10,e为单精度,d为双精度 • 八进制和十六进制常量 • 表示无符号整数 • 八进制:&O • 十六进制:&H 12,-3,32767 174567,-456789 1.5,-7.891,1e6,2.33455e-3 3.1415926535,1.2d4 &O137,&H127 14
2、字符常量 • 用双引号将一串字符括起来,构成字符常量 • 字符长度:字符串中字符的个数,不包括双引号 • 字符串的长度最多可达65535个 • 注意区别空格串和空串 • 输入双引号必须用“”” • 字符串常量区分大小写,如字符串"A"和字符串"a"是两个不同的常量 • 字符串比较:从字符串的左端开始,一一对应比较至不同的字符,字符的ASCII码值大的字符串大,ASCII码值小的字符串小。 如:“欢迎进入VB”,“Visual Basic”, “123”,“A” 15
3、逻辑常量 • 只有两个取值,True和False • 无界定符 • Vb中通常用0表示False,其他数值均表示True • 4、日期时间型常量 • 即可以表示日期,也可以表示时间 • 一般表示形式是mm/dd/yy, hh:mm:ss • 用#作为界定符 例:#1/2/1999# #1999-1-2# #Jan 2,1999# #January 2,1999# #12:00:00 AM# #12:00:00 PM# #8:20:20 PM# #2:00:00 PM#都合法 16
符号常量 • 符号常量 • 是指以符号形式,即常量名来标识的常量 • 若一个常量在程序中使用频率较高,可以将其定义为一个符号常量,如圆周率 • 常量名长度不超过255个字符,由字母开头,只能包含字母、数字和下划线,且不区分大小写 • 符号常量必须先说明后使用 17
符号常量 说明语句格式: [Public|Private] Const <常量名> [As Type]=<表达式> • 在模块通用声明中,Public和Private用于定义常量的使用范围,缺省为Private(窗体模块级) • 在窗体模块中不能用Public定义全局符号常量 • 表达式中不能包括函数,可使用除IS外所有算术和逻辑运算符,也可以使用其他常量 • 例:Const pi as Single=3.14159 • Private Const ch=“CPU” • Public Const x as Integer=3*5 ’在标准模块中定义全局级常量,但若出现在窗体的通用声明中则出错。 注意 符号常量定义后,在程序中只能读不能修改。 如: ch=“CMOS” ‘错误 18
3.3.3 变量(Variable) -在程序运行时,其值可以改变的数据。 -例:Dim X As Integer X(变量名) ——内存单元 X=2666 X X=0 X 2666 (变量值) 0 19
一、变量名的命名规则 • 必须以字母开头 • 不超过255个字符 • 在作用域内必须唯一 • 字符串内不得包含点号和用于隐性类型说明的符号 • 不得使用系统保留字(如End Private Sub ) 注意:在代码编辑器中,若定义的变量名不合法,则有出错提示,且变量名显示为红色. 20
二、变量的作用域与变量说明语句 1.变量的作用域 局部变量:在过程中说明的变量,只在该过程中有效; 窗体/模块变量:在模块中说明的Private变量,在该窗体或模块中有效; 全局变量:在模块中说明的Public变量,在整个应用程序中有效。 21
2.变量说明语句 - 过程级变量(局部变量)——在过程中声明 Dim|Static <变量名> [As <类型>] - 模块级变量——在模块的“通用”中“声明” Private|Dim <变量名> [As <类型>] - 全局变量——在模块的“通用”中“声明” Public <变量名> [As <类型>] 例:Dim a1 As Integer Public strName As String Private dtBirthday ‘变体型 22
几点注意 隐式说明——类型声明符,见P47,表3-4 • 例:k&=1 Country$=“China” 变量初值:当一个变量说明之后,系统自动为其赋一个初始值。 • 数值型数据的初值为0; • 字符型数据的初值为空串“”; • 逻辑型数据的初值为False; • 日期型数据的初值为1899-12-30,0:00:00 变量的赋值——赋值语句 [形式] 变量名=表达式 例: a=1:b=2:x=a+b ‘x的值为3 23
几点注意 • 一条语句声明多个变量 • Private|Dim|Static|Public <变量名> [As <类型>],<变量名> [As <类型>]… • 例:Dim x,y,z as Integer,s as string • ’x和y是变体型,z是整型,s是字符串型 字符串的定长说明: Private|Dim|Static|Public <变量名> As String *<长度> 例:Dim Number As String*7 注意:不能在窗体模块中定义全局定长字符串. 24
模块1 Public iA As Integer 全局变量 窗体级变量 窗体1 窗体级变量 窗体2 Public ib as string Dim b1 As String Private b2 As Integer 过程1 过程 3 Dim x As Single Dim sum As Single 局部变量 局部变量 过程4 Static y% 过程2 Dim x As String
练 习 判断以下定义的各变量的数据类型 Dim a As Integer,b &,c As Integer Dim a%,b%,c As Integer Dim a ,b,c As Integer 26
三、强制显式说明语句 • 格式:Option Explicit • 功能:要求每一个变量都必须经过显式说明才能使用,否则产生出错信息。 强制显式说明的好处: • 一个变量如果不定义,会被当作变体类型来进行处理,从占据的内存空间看,势必会造成浪费; • 变量定义之后,若输入变量名正确,系统会自动按定义时的格式转换输入的变量名,否则提示输入错误。 注意:为养成良好的变成习惯,在我们今后的程序中,都要求对使用的变量进行说明. 27
Option Explicit语句应在模块的通用说明部分输入; • 系统能够自动产生Option Explicit语句,设置如下: • 执行“工具”菜单的“选项” • 在“选项”对话框中选取“编辑器”标签 • 选中“要求变量声明”项 • 单击“确定”按钮返回 • 此后系统会在新建的下一个工程中自动在代码窗口产生强制说明语句 28
3.4 运算符与表达式 3.4.1 算术运算符与算术表达式 3.4.2关系运算符与关系表达式 3.4.3 逻辑运算符与逻辑表达式 3.4.4 运算规则 29
3.4.1 算术运算符与算术表达式 • 算术运算符 • 乘方(^)、加(+)、减(-)、乘(*)、除(/)、整除(\)、取余(Mod)、字符串连接(&) • 优先级:^ -(单目减) *和/ \ Mod +和 - & • 举例: • 13+3 ‘16 • 13*3 ‘39 • 13/3 ‘4.33333333333333 • 13\3 ‘4 • 13 mod 3 ‘1 • “13” & “3”‘133 • “a” & “b”‘ab • #1/2/2001#+1 ’1/3/2001 &前后必须留有空格 30
3.4.1 算术运算符与算术表达式 • 算术表达式:将常量、变量、函数等用算术运算符连接起来的式子 • 说明:括号的优先级大于任何运算符 • 例: 表达式为:(-b+Sqr(b^2-4*a*c))/(2*a) 注意: • 括号要一一对应,分子分母部分应该用括号括起来,只能使用小括号 • 乘法要用乘号分隔,除法写在同一行 31
3.4.2 关系运算符与关系表达式 • 关系运算符 • 小于(<)、小于等于(<=)、大于(>)、大于等于(>=)、不等于(<>)、等于(=)、比较对象的引用变量( Is) • 关系表达式:将常量、变量、函数或算术等其他表达式用关系运算符连接起来的式子 • 如果关系运算符的两端是表达式,则先计算表达式的值,然后进行比较 • 关系运算符两端必须是同类变量、表达式,否则出错 • 关系表达式的结果必然是逻辑值 例:a<=32 b^2-4*a*c>0 “ABC” >“ACB”’结果为false #1/1/2000#<#1/2/2000# ’结果为True 32
3.4.3 逻辑运算符与逻辑表达式 • 逻辑运算符 • 非(Not)、与(And)、或(Or)、异或(Xor) • 优先级:Not And Or Xor • 逻辑表达式:将逻辑量用逻辑运算符连接起来的式子 • 如果逻辑运算符的两端是关系表达式,则先计算关系表达式的值,然后进行逻辑运算 • 逻辑表达式的操作数是逻辑值,结果是逻辑值 例: 判断 0<x<10 的逻辑表达式为: x>0 And x<10 判断点(X,Y)是否位于第一象限的单位圆内的表达式为: X>0 And Y>0 And X*X+Y*Y <1 33
3.4.4 各种运算的优先级 • 运算符的优先级: • 先算术运算,再关系运算,最后逻辑运算 • 遵循某类运算符内的优先次序 • 可以用()改变运算的优先顺序,注意,表达式中无[ ]、{ },()可嵌套,但必须成对出现 • 表达式的写法:注意与代数表达式的区别 • ±、×、÷、≤、≥、≠ 都不合法 • 表达式的运算溢出: • 例: Dim x As Integer • x = 19000 + 19000 • 表达式计算的数据类型转换: • 例: “20” + 46 ’结果为66,将“20”转换为20 • “ab” + 46 ‘出错 • 200 + True ’结果为199,将True转换为-1 34
练 习 a=11: b=6: c=4: x=false 写出此表达式的值: (b+c)>a or c<b and x 为了检验和掌握表达式(包括标准函数)的使用 • 在窗体的Click事件中加入Print语句,执行时查看运行结果。 • 打开“视图”“立即窗口”,用Print 或?来检验执行结果 35
3.5 Visual Basic 公共函数 公共函数:VB已预先定义好的完成某特定功能的程序段——通过过程,编程者可直接调用。 -函数名 -参数 -函数的返回值 36
3.5.1 算术函数 • Sqr(x):返回X的平方根,X非负,返回值为Double型 。 • Log(x):返回X的自然对数,即Ln(x) ,X>0。 • Exp(x):返回ex。 • Abs(x):返回X的绝对值。 • Sgn(x):判断X的符号: • Sin(x)、 Cos(x)、 Tan(x)、 Atn(x):分别返回X(单位为弧度)的正弦余弦、正切和反正切函数值,返回值为Double型 • Rnd(x):返回一个(0,1)之间的Single类型随机数。X决定产生随机数的结果,具体情况请查阅Help。Randomize语句可帮助产生真正意义上的随机数。 37
3.5.2 字符函数 • Len(x):返回字符串x中字符的个数。 • Left(x,n):返回从字符串x的左边开始的n个字符形成的子串。 • Right(x,n):返回从字符串x的右边的n个字符形成的子串。 • Mid(x,n1,n2):返回从字符串x的第n1个字符开始的n2个字符。 • Ucase(x) 将x中小写字母转换成大写字 • Lcase(x):将x中大写字母转换成小写字母 • Ltrim(x)、 Rtrim(x) 、 Trim(x) :分别去掉x左边的所有空 格、右边的所有空格和两边的所有空格。 • Instr(n,x,y):返回y在x从第n位开始出现的位置,不存在返回0 • String(n,y):返回由n个字符y组成的字符串,若y是一个字符 串,则取其第一个字符。 • Space(n):返回由n个空格组成的字符串。 X=“Visual Basic” 38
3.5.3 转换函数 • Str(x):将数值型数据x转换成相应的字符串,保留正数符号位 • CStr(x):将x转换成字符串,如X为数值型,不保留正数符号位 • Val(x):将字符串X最左端开始的数字字符串转换成数值。遇到不能转换的字符为止。若字符串无法被转换时,返回0。 Val(-16.6those) ’结果为-16.6 • Chr(x):返回以x为ASCII码值的字符。 Chr(97)为“a”,Chr(65)为“A”, Chr(13)为回车符 • Asc(x):返回字符x的编码值。 • Fix(x)、Int(x):当X≥0时,都返回X的整数部分而删除小数, 当X<0时, Int 返回小于等于x的最大整数。 Fix 返回大于等于X的最小整数。 Int(-5.1) ‘-6 fix(-5.1) ‘-5 39
3.5.4 日期函数 • Date:返回系统日期。 • Time:返回系统时间。 • Now:返回系统日期和时间。 • Year(x):返回x的年份。 • Month(x):返回x的月份。 • Day(x):返回x的日期。 • Weekday(x,[c]):返回x的星期号。 ? Year(date) 2005 思考题:求系统日期的年份? 40
3.5.5格式化函数Format$ [功能]:将数值、日期和时间按指定格式输出。 [格式]:format (<算术表达式>,fmt$) fmt$用于格式输出的字符串;省略,则类似于CStr函数 [格式控制字符]: 数位控制符: #、0 标点控制符: . 、 , 指数输出控制符: E+、E- 符号控制符: %、$、-、+ 41
举例 设x=123456.78, Print Format(x,”0000000000.0000”) 结果:0012345678.7800 ‘x的位数少于控制字符串的位数,自动在前后补0 Print Format(x,"############") 结果为: 123457‘x的位数少于控制字符串的位数,自动在前后补空格 Print Format(x,"###,###,###.#") 结果为: 123,456.8 ‘增加千分位分隔符和小数点,使 x四舍五入到一位小数 Print Format(x,“########%”) 结果为: 12345678%‘以百分比的形式表示,x乘100后再加上百分号 Print Format$(x,"0.00E+00") 结果为: 1.23E+05 ‘用指数形式表示数值 42
练 习 1.写出表达式 (1)XY都是正整数或都是负整数 (2) 2.求表达式的值 (1)str(32.345)=cstr(32.345) (2)“14” & 32 X=fix(x) and y=fix(y) and x*y>0 (X+sqr(x^2+1))^(1/3) false 1432 43