vb程序设计教程(潘蕾)vb.ppt
第3章 Visual Basic程序设计基础,授课教师:潘 蕾,2,了解过程和模块的概念 掌握程序书写规范和程序注释方法 掌握各种数据的定义、使用及表示范围 掌握各种运算符和表达式的使用 掌握常用的标准函数 掌握VB 程序设计中的常用语句,教学要求,3,3.1 数据类型3.2 常量与变量3.3 运算符与表达式3.4 常用内部函数3.5 代码编写规则3.6 数据的输入与输出,教学内容,4,取值范围见P40表,3.1 数据类型,注:若不加说明,则均按变体型数据处理;注:各类型数据有其相应表示范围。,5,3.2 常量与变量,3.2.1 常量3.2.2 变量,6,定义:指在程序运行过程中值保持不变的量,一般用于运算和给变量赋值,分为直接常量和符号常量两种。,3.2.1 常量(Constant),常量,直接常量,符号常量 先定义:Const PI As Single3.14,数值常量 123,3.14,-1.234E5,&O17,&H1f字符常量 I love vb,你好vb 逻辑型常量 True,False日期型常量 12/31/2011,系统常量 vbCrLf,7,直接常量(1),1、数值常量一般的数值常量 由正负号、数字和小数点组成,正数的正号可以省略科学计数法 表示浮点数 格式:e/d 说明:幂为10,e为单精度,d为双精度八进制和十六进制常量 表示无符号整数 八进制:&O 十六进制:&H,例:12,-3,32767 174567,-4567891.5,-7.891,1e6,2.33455d-3&O137,&H1f,8,直接常量(2),2、字符常量 用双引号将一串字符括起来,构成字符常量 字符长度:字符串中字符的个数,不包括双引号 字符串的长度最多可达65535个 注意区别空格串和空串 若字符串中有双引号,例如ABDXYZ,则用连续两个双引号表示,即:ABDXYZ 字符串常量区分大小写,如字符串A和字符串a是两个不同的常量 字符串比较:从字符串的左端开始,一一对应比较至不同的字符,字符的ASCII码值大的字符串大,ASCII码值小的字符串小。(举例),如:欢迎进入VB,Visual Basic,123,A,9,直接常量(3),3、逻辑常量 只有两个取值,True和False 无界定符 Vb中通常用0表示False,其他数值均表示True4、日期时间型常量 既可以表示日期,也可以表示时间 一般表示形式是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#20:20:20#2:00:00 PM#都合法,10,符号常量是指以符号形式,即常量名来标识的常量 若一个常量在程序中使用频率较高,可以将其定义为一个符号常量,如圆周率 常量名长度不超过255个字符,由字母开头,只能包含字母、数字和下划线,且不区分大小写 符号常量必须先说明后使用 与变量的区别,符号常量,例2,11,说明语句格式:Public|Private Const As Type=在模块通用声明中,Public和Private用于定义常量的使用范围,Public标准模块级,Private窗体模块级,Public和Private不能在过程中使用。缺省为Private表达式中不能包括函数,可使用除IS外所有算术和逻辑运算符,也可以使用其他常量符号常量定义后,在程序中只能读不能修改,例:Const pi as Single=3.14159 Private Const ch as String=“CPU”Public Const x as Integer=3*5 Public Const tpi as Single=3*pi ch=“CMOS”错误,符号常量,12,定义:在程序运行时,其值可以改变的数据,拥有自己的名称和数据类型。例:Dim X As Integer X 内存单元 X=2666 X X=0 X,2666(变量值),0,3.2.2 变量(Variable),13,变量变量声明变量说明语句:过程级变量(局部变量)在过程中声明 Dim|Static As 模块级变量在模块的“通用”中“声明”Private|Dim As 全局变量在模块的“通用”中“声明”Public As 注:如果没有As 类型,则默认为变体类型。可在变量名后加类型符来代替As 类型(P44)如:Dim intX%一条语句可以同时定义多个变量,但每个变量必须有自己的类型声明,类型声明不能共用Private|Dim|Static|Public As,As,例:Dim a1 As Integer Public strName$Dim x,y,z as Integer,s as string x和y是变体型,z是整型,s是字符串型,14,变量变量声明变量名的命名规则:必须以字母开头 不超过255个字符 在作用域内必须唯一 不得包含点号和用于隐性类型说明的符号 不得使用系统保留字(如End Private Sub),注意:在代码编辑器中,若定义的变量名不合法,则有出错提示,且变量名显示为红色.,15,变量变量声明声明方式:显式声明 隐式声明 仅用类型声明符(P45),没有变量说明语句 例:k&=1 Country$=China注:虽然程序中可使用隐式声明,但如果输入错误可能造成程序逻辑错误,所以最好要求所有变量都在声明之后才能使用。可通过放置Option Explicit语句强制执行。,16,变量变量声明强制显式说明语句 格式:Option Explicit 功能:要求每一个变量都必须经过显式说明才能使用,否则产生出错信息。强制显式说明的好处:一个变量如果不定义,会被当作变体类型来进行处理,从占据的内存空间看,势必会造成浪费;变量定义之后,若输入变量名正确,系统会自动按定义时的格式转换输入的变量名,否则提示输入错误。,注意:为养成良好的编程习惯,在我们今后的程序中,都要求对使用的变量进行显式说明.,17,Option Explicit语句应在模块的通用说明部分输入;系统能够自动产生Option Explicit语句,设置如下:执行“工具”菜单的“选项”在“选项”对话框中选取“编辑器”标签 选中“要求变量声明”项 单击“确定”按钮返回 此后系统会在新建的下一个工程中自动在代码窗口产生强制说明语句,18,变量的赋值赋值语句 形式 变量名=表达式 例:a=1:b=2:a=b a=2,b=2 变量初值:当一个变量说明之后,系统自动为其赋初始值。数值型数据的初值为0;字符型数据的初值为空串;逻辑型数据的初值为False;日期型数据的初值为1899-12-30,0:00:00 字符串的定长说明 Private|Dim|Static|Public As String*例:Dim Number As String*7,注意:,例3,19,变量变量的作用域 1.变量的作用域 局部变量:在过程中说明的变量,只在该过程中有效;窗体/模块变量:在模块中说明的Private变量,在该窗体或模块中有效;全局变量:在模块中说明的Public变量,在整个应用程序中有效。,20,Dim x As Single,Static y%,模块1Public iA As Integer,Public ib as stringDim b1 As String,Private b2 As Integer,Dim sum As Single,Dim x As String,窗体级变量,局部变量,过程4,窗体1,过程2,过程1,过程 3,窗体2,窗体级变量,局部变量,全局变量,21,Dim a As Integer,b&,c As IntegerDim a%,b%,c As IntegerDim a,b,c As Integer,判断以下定义的各变量的数据类型,练 习,22,3.3 运算符与表达式,3.3.1 算术运算符与算术表达式3.3.2 关系运算符与关系表达式 逻辑运算符与逻辑表达式3.3.4 连接运算符和连接表达式4.4.4 运算规则,23,算术运算符 乘方()、加(+)、减(-)、乘(*)、除(/)、整除()、取余(Mod)、字符串连接(&)优先级:-(单目减)*和/Mod+和-&举例:,13+3 1613*3 3913/3 4.33333333333333133 4 13 mod 3 1#1/2/2001#+1 2001-1-313&3 133a&b ab,&前后必须留有空格,3.3.1 算术运算符与算术表达式,24,算术表达式:将常量、变量、函数等用算术运算符连接起来的式子 例:,表达式为:(-b+Sqr(b2-4*a*c)/(2*a)注意:括号的优先级大于任何运算符,括号要一一对应,分子分母部分应该用括号括起来,只能使用小括号 乘法要用乘号分隔,除法写在同一行,3.3.1 算术运算符与算术表达式,25,3.3.4 连接运算符与连接表达式,注意:(1)使用运算符“&”时,变量与运算符“&”之间应加一个空格。这是因为符号“&”还是长整型的类型定义符,如果变量与符号“&”接在一起,VB系统先把它作为类型定义符处理,因而就会出现语法错误。(2)&与 的区别:,abc178 出错199,abc12355 abc12,26,3.3.4 连接运算符与连接表达式,注意:(3)连接表达式是指通过连接运算符将操作数连接起来的式子,通常用于程序输出控制。,例如:Dim x As Integer x=5 Print x=&x,27,关系运算符 小于()、大于等于(=)、不等于()、等于(=)、比较对象的引用变量(Is)、字符串匹配(Like)关系表达式:将常量、变量、函数或其他表达式用关系运算符连接起来的式子 关系表达式的结果是逻辑值(True、False)先计算关系运算符两端的表达式的值,然后进行比较注意:(1)如果两个操作数都是数值型,则按其大小比较(2)如果两个操作数都是字符型,则按字符的ASCII码值从左到右一一比较(3)汉字字符大于西文字符(4)关系运算符的优先级相同,例:ABC ACB bc=大小#1/1/2000#1/2/2000#,3.3.2 关系运算符与关系表达式,结果为false,结果为false,结果为true,28,逻辑运算符 非(Not)、与(And)、或(Or)、异或(Xor)优先级:Not And Or Xor,3.3.3 逻辑运算符与逻辑表达式,29,逻辑表达式:将逻辑量用逻辑运算符连接起来的式子 逻辑表达式的操作数是逻辑值,结果是逻辑值 如果逻辑运算符的两端是关系表达式,则先计算关系表达式的值,然后进行逻辑运算,例:判断 00 And x0 And Y0 And X*X+Y*Y 4 Or 5false 值为True,3.3.3 逻辑运算符与逻辑表达式,30,3.3.5 运算规则(1),运算符的优先级:先算术运算,再关系运算,最后逻辑运算遵循某类运算符内的优先次序可以用()改变运算的优先顺序,注意,表达式中无、,()可嵌套,但必须成对出现 表达式的写法:注意与代数表达式的区别、都不合法 表达式的运算溢出:例:Dim x As Integer x=19000+19000,31,练 习,a=11:b=6:c=4:x=false写出此表达式的值:(b+c)a or cb and x,检验和掌握表达式(包括标准函数)的使用:在窗体的Click事件中加入Print语句,执行时查看运行结果打开“视图”“立即窗口”,用Print 或?来检验执行结果,32,3.3.5 运算规则(2),表达式计算的数据类型转换:操作数的数据类型应该符合要求,不同的数据应该转换成同一类型。在算术运算中,如果操作数的数据精度不同,VB规定运算结果采用精度较高的数据类型。即:Integer Long Single Double Currency 注:除法运算,无论除数与被除数类型如何,其结果均是双精度型,例:dim I as long,a as integer,b as integer,c as integer a=100:b=200:c=300:I=1下列那些表达式不会溢出:(1)a*b*c(2)I*a*b*c(3)a*b*c*I(4)a*b*I*c,例:dim I as long,a as integer,b as integer,c as integer a=100:b=200:c=300:I=1下列那些表达式不会溢出:(1)a*b*c(2)I*a*b*c(3)a*b*c*I(4)a*b*I*c,33,公共函数(库函数):VB已预先定义好的完成某特定功能的程序段通用过程,编程者可直接调用。调用方法:函数名(自变量序列)自变量的个数、排列次序及其数据类型应和函数规定的参数相同 注意函数的定义域(自变量或参数的取值范围),3.4 Visual Basic 常用内部函数,34,3.4.1 数学函数,35,Rnd函数返回大于等于0且小于1的随机数,为了生成某个范围内的随机数,可以用公式:Int(上限 下限+1)*Rnd+下限)如:要随机生成20到50之间的任意整数,可用下列语句来实现:Int(Rnd*31)+20为了使每次运行时产生的随机序列不同,可在生成随机数之前执行Randomize语句,注:某范围内随机整数取法,36,3.4.2 字符函数,37,Date:返回系统日期。Time:返回系统时间。Now:返回系统日期和时间。Year(x):返回x的年份。Month(x):返回x的月份。Day(x):返回x的日期。Weekday(x,c):返回x的星期号。,?Year(date)2011,思考题:求系统日期的年份?,3.4.3 日期函数,38,3.4.4 转换函数,39,功能:将数值、日期和时间按指定格式输出。格式:format(,fmt$)fmt$为格式控制的字符串格式控制字符:数位控制符:#、0 标点控制符:.、,指数输出控制符:E+、E-符号控制符:%、$、-、+,3.4.5 格式化函数Format$,40,3.4.5 格式化函数Format$,说明:对于符号0与#,当数值的实际位数比格式控制给定的位数多时,整数部分不变,小数部分将按四舍五入返回给定的位数。如:Format(3.14159,#.#),其值为3.142,41,1.写出表达式(1)(2)XY都是正整数或都是负整数2.求表达式的值(1)str(32.345)=cstr(32.345)(2)“14”&32,(X+sqr(x2+1)(1/3),X=fix(x)and y=fix(y)and x*y0,练 习,false,1432,42,3.5 代码编写规则,VB和其他高级语言一样,都有属于自己的一套代码编写规则,编写代码时一定要严格遵循这些规则,否则就可能出现一些错误。,43,3.5.0 VB程序代码的组织方式,VB程序是由界面和程序代码两部分组成,而程序代码又是由说明部分和过程两部分组成的,要编写控制程序执行的代码,必须先了解过程这个概念。,44,1、过程,所谓过程,就是由Sub开头,End Sub结尾的,包含若干条语句的有特定书写格式的代码组合。根据过程执行的方式,可分为事件过程和通用过程两类。,例1,45,定义:由事件驱动而执行的,用于响应用户或系统引发的事件的代码过程。如窗体的Load过程、命令按钮的Click过程等。特点:缺省情况下,事件过程是Private的,即仅在所属的窗体范围内有效。存储:事件过程是存储在窗体模块文件中,扩展名为.frm 注意:事件过程的过程名及参数是系统定义好的,不得随意改变。即sub,end sub语句。,事件过程,46,定义:可以被多个窗体和过程调用执行的代码过程。特点:缺省情况下,通用过程是Public的,即可被所有窗体共享,但也可以定义成Private。存储:在窗体中定义的通用过程直接存储在窗体模块文件中;在标准模块中定义的通用过程是存储在扩展名为.bas的标准模块文件中。注意:通用过程的过程名及参数(sub语句)由用户自行定义。,通用过程,47,2、模块,模块是组织不同类型的过程代码的一种结构。VB提供了三种类型的模块:窗体模块:和每个窗体相对应的模块,包含窗体及其中所有控件的属性设置、相关说明和所有事件过程。标准模块:存放为多个窗体所共享的通用过程的独立代码模块,不属于任何一个窗体,主要在大型应用程序中使用,保存在扩展名为.Bas的文件中。类模块:存放开发者自行创建的类的属性、方法等。,48,49,赋值语句 格式:变量名=表达式功能:先计算表达式的值,再将该值赋予左端的变量。举例:,str1&=Nice to meet you number%=72 n=n+1,例1,说明:(1)赋值号左端不仅可以是变量名,还可以是对象的属性(2)赋值号右端也可以是对象属性,用于获取对象返回的 当前属性值.,例,50,3.5.1 赋值语句,说明:(3)赋值号左右两端的数据类型不一致的处理规则:变量(数值型)表达式(数值型)将表达式值类型先转换为变量类型再赋值变量(数值型)表达式(字符型)可能会因类型不匹配报错变量(字符型)表达式(数值型)将表达式值先转换为数字字符再赋给变量变量(逻辑型)表达式(数值型)非零值转换为True赋给变量,0值转换为False赋给变量变量(数值型)表达式(逻辑型)True转换为1赋给变量,False转换为0赋给变量,例:n%=3.5 n为整形变量,转换时四舍五入,n结果为4,例:n%=123 n中的结果是123,与n%=Val(123)效果相同 n%=la123 出现“类型不匹配”的错误 n%=出现“类型不匹配”的错误,例:n&=123 n中的结果是字符串123,例:Dim n1 as Boolean n1=5 n中的结果是True n1=0 n中的结果是False,例:n%=True n中的结果是-1 n%=False n中的结果是0,51,注:比较运算符不会改变操作数的值,赋值语句会改变赋值号左边的量。,赋值语句,说明:(4)赋值号(=)与比较运算符(=)不同,系统会根据“=”号的位置,自动判断是否为赋值号(赋值是独立的一条语句,而由运算符(=)连结两个操作数的关系表达式是语句的一部分,不可单独存在。),Dim x As Integer,y As Integer,z As Booleanx=3:y=4:y=xz=x=yPrint x,y,z,举例:,例2,52,Private Sub Form_Click()Dim a As Integer,b As Integer a=10 b=3*a Print a,bEnd Sub,Private Sub Form_Click()Dim a As Integer,b As Integer Print a,bEnd Sub,例1:单击窗体,下列两段程序的执行结果分别是()和(),提示:利用赋值语句给变量赋值后,在未有新的赋值语句再次给它赋值前,变量值保持不变。,b=3*a,a=10,53,Private Sub Form_Click()Dim x%,y%,z%Print x,y,zEnd Sub,例2:单击窗体,下列程序的执行结果是(),提示:不能在一句赋值语句中,同时给各变量赋值,x=y=z=1,0=0=1,True=1,-1=1,False,赋值符号,0,x=,x=y=z=1,54,例3:求一元一次方程x+5=0的解,Private Sub Form_Click()Dim x As Single 3*x+5=0 Print“x=”;xEnd Sub,Private Sub Form_Click()Dim x As Singlex=(0-)/3-Print“x=”;xEnd Sub,语句是该例题的算法。,错误程序,正确程序,总结:利用程序设计语言处理问题,我们首先要知道的是怎么解决问题,其次要知道怎么将解决问题的方法用程序设计语言来表达。,55,思考题:交换两个变量的值,Private Sub Form_Click()Dim a As Integer,b As Integer a=10:b=2 Print a,b 填入程序代码 Print a,bEnd Sub,题目说明单击窗体程序执行结果为:10 2 2 10,56,3.5.2 代码书写规则,1、语句 语句是VB程序的最基本的成分 格式:语句体注:一些语句可以没有语句定义符 按行书写注:一个语句可通过续行符号“_”(一个空格加一个下划线)分成多行写;注:多个语句也可以通过分行符号“:”(冒号)写在一行上。,1、VB程序的书写规范和程序注释,57,2、书写规范 字母无大小写区分 对于VB中的关键字,首字母被转换成大写,其余转换成小写 对于用户定义的变量、过程名,以第一次定义的为准,以后输入的自动转换成首次定义的形式 一行代码输入完毕,按回车键进入下一行 一般采取阶梯型书写格式,使程序可读性好,便于查找错误(严格执行)代码中除了中文字外,所有的符号都必须在英文状态下输入(牢记)3、程序注释语句格式一:Rem 格式二:(常用)说明:给程序加注释,增强程序的可读性,为非执行语句。,VB程序的书写规范和程序注释,58,3.6 数据的输入与输出,3.6.1 InputBox函数3.6.2 MsgBox函数,59,3.6.1 InputBox函数,格式:v=InputBox(,)功能:弹出对话框,用户输入数据后回车或单击“确定”按钮后,将输入内容赋值给变量v;按ESC键或单击“取消”按钮,返回空串。,60,说明 prompt:必选项。对话框中的提示信息 title:可选。对话框的标题。省略则为应用程序名 default:可选。显示在用户编辑框中的缺省值,省略为空 x,y:可选。指定对话框的显示位置,省略则居中,例:i=InputBox(输入数组元素+Chr(10)+第一个元素为:,程序示例,100),InputBox函数,61,例1:验证学号 变量定义为字符型例2:用InputBox函数输入出生日期,计算年龄 变量定义为整型,举 例,注意:如果赋值号左端的变量为数值型或日期型等非字符型变量,输入字符数据 单击“取消”按钮 不输入直接按回车键,则系统都会提示出错,例4,例5,62,MsgBox函数,格式:MsgBox(Prompt,Button,Title,HelpFile,Context)功能:向用户发布提示信息,并要求用户作出必要的响应。说明:(1)Prompt:必选项。字符串表达式,对话框中的提示信息。(2)Button:指定显示按钮的数目及形式,使用的图标样式,这是一个由4个数值常量组成的式子,形式为c1+c2+c3+c4,用于决定信息框中按钮的个数和类型以及出现在信息框中的图标类型,各个参量的可选值及其功能;详见P.59表,有0值的参量,0值为缺省值(3)Title:对话框标题栏的显示信息。,63,MsgBox 需要重新来一次?,2+32+256+4096,询问,MsgBox 数据非法,请重输!,1+16+0+4096,警告,举 例,64,方法一:发布提示信息,无须用户响应,在程序中作为独立语句存在,不加括号;例:MsgBox 非法数据!,警告,注:如果省略Button参数,逗号不能省略,MsgBox函数的用法,方法二:需要用户响应,和普通函数调用方法相同。例:Response=MsgBox(真的删除该项吗?,4+48,提示信息)If Response=vbYes Then Else End If注:函数返回值详见P.60表,65,作业,习题P631、2、3,