《数据、表达式与简单程序设计.ppt》由会员分享,可在线阅读,更多相关《数据、表达式与简单程序设计.ppt(86页珍藏版)》请在三一办公上搜索。
1、引,我们学习了VB中控件,并利用控件进行简单程序的设计,那么我们在进行程序设计的时候要遵循怎么样的代码书写规范?是用什么来表示客观世界中的事物呢?客观事物之间的关系我们又是如何在VB中来进行相关的运算?,第四章 VB中的数据与表达式,4.1 VB中程序代码的组织形式4.2 代码书写规则4.3 VB 中的数据4.4 运算符和表达式4.5 赋值语句4.6 VB中的公共函数4.7 InputBox和MsgBox函数,4.1 Visual Basic程序代码的组织方式,Visual Basic 程序由窗体界面和程序代码两部分组成;程序代码由过程及说明组成;,工程窗体模块1 窗体模块2 标准模块1 标准
2、模块2 类模块1 类模块2.,过程1过程2,4.1.1 过程,“过程”是具有特定格式,包含若干可被作为一个整体执行的代码行的组合事件过程 由事件调用,当指定事件发生时执行;存储在“窗体”模块内。通用过程 具有特定功能,可被其他过程共享(调用)的过程。,4.1.2 模块,“模块”是VB用于组织不同类型过程代码的一种结构1、窗体模块 每个窗体都有一个相对应的窗体模块。窗体模块包含:(1)有各个对象的事件过程;(2)窗体及窗体中各个控件对象的属性设置与相关说明;(3)窗体模块中还可包含仅供本窗体其他过程调用的通用过程。,4.1.2 模块,2.标准模块 应用程序中可被多个窗体共享的代码,应当被组织到所
3、谓的“标准模块”之中。标准模块文件的扩展名是.bas;标准模块中保存的过程都是通用过程。除了这些通用过程之外,标准模块中还包含有相关的说明。创建标准模块 的方法。,4.2 代码的书写规则,VB源程序的书写格式,(1)一般情况下要求一行一句,一句一行,一行可以写多个语句,但语句之间要加冒号(:),字母不区分大小写;(2)一个语句可分多行写,但在每行末尾要加续行符:空格符下划线(_)。,例如:Form1.Print 学好VB _&要多学多练 Form1.Hide:Form2.Show,(3)所有的语句标点符号(冒号、点号、逗号、分号、界定字符串的双引号、注释用的单引号等),都必须是英文的字符。如果
4、出现中文标点将归结为语法错误。(4)程序书写时最好按层次缩进书写,这样程序可读性好。书写注意1)代码不区分字母的大小写,如:Ab 与AB等效;2)系统对用户程序代码进行自动转换;对于关键字,首字母被转换成大写,其余转换成小写 对于用户定义的变量、过程名,以首次定义为准进行转换,4.3数据类型,VB数据类型,用户自定义类型,基本数据类型,数值型,其它类型,整数型,实数型,ByteIntegerLong,SingleDoubleCurrency,dateStringObjectVariant,数据类型规定了程序中数据的取值范围、占用内存空间的大小、以及在这些值上允许的操作。,Visual Basi
5、c 的基本数据类型(数值型),其他基本数据类型,基本数据类型,1、字符串型数据(string),字符串型数据是指一切可打印的字符和字符串,它是用双引号括起来的一串字符。一个西文字符、汉字都是一个字符,字符型数据的默认值为:“”在VB中有两种类型字符串:变长字符串和定长字符串 变长字符串的长度不确定的 定长字符串长度固定的如:Dim S As String 变长字符串 Dim name As String*8 定长字符串,Dim M As String*10 声明长度为10个字符的定长字符串 M=Mary is 5.赋给M的字符少于10个,则用空格将不足部分填满,超过10个将被截去。说明:1)空
6、与空格字符的区别;2)在字符串中必须用两个连续的双引号来表示字符串有一个双引号。如字符串:abc 计算机 abc,在VB中表示为:abc计算机abc,2、数值型数据,数值型数据一般分为整型数和浮点数两类。整型数分为整数(Integer)和长整数(Long)。浮点数分为单精度浮点数(Single)和双精度浮点数(Double)。有时也把货币型数据(Currency)和字节型数据(Byte)划归数值型数据。,(1)整数(Integer)整数是不带小数点的数,在机器内部以2字节(16位)二进制码形式表示。VB中用n%来表示整数,其中%为整数的类型符,可以省略。如-123%、123%都表示整数。取值范
7、围:-32768至+32767,(2)长整数(Long)整数的最大值为32767,大于此数,程序运行时就会因为溢出产生中断。此时可使用长整数。长整数用4字节(32位)二进制数存储,可以表示更大的整数,VB中用n&来表示长整数,其中&为长整数的类型符。如-1234&、987654&都表示长整数。,(3)浮点数浮点数也称为实型数或实数,由符号、指数和尾数组成,分单精度浮点数(Single)和双精度浮点数(Double),其指数部分分别用“E”(或“e”)和“D”(或“d”)表示。例如:1.23E3或1.23e+3 单精度 1.23D3或1.23d+3 双精度 单精度浮点型(Single):占内存四
8、个字节,精度为7位。双精度浮点型(Double):占内存八个字节,精度为16位。,尾数,指数,(4)货币型(Currency),货币型属于定点实数或整数,用8个字节存储小数点前有15位,小数点后有4位,其余的数字被舍去,其表示形式为在数字后加上“”。,(5)字节型(Byte),字节型数据用1个字节的无符号二进制数存储,取值范围为0-255。,(6)日期型数据(Date),日期型数据按64位浮点数值存储(8个字节),表示的日期从公元100年1月1日-9999年12月31日,时间范围为0:00:00-23:59:59。,日期文字必须用符号“#”括起来,如#January 15,2002#,#198
9、5-10-1 9:45:00 PM#,#6/12/2008#都是合法的日期型数据。,(7)布尔(Boolean)逻辑型数据只有两个值:真(True)和假(False),用2字节二进制数存储,经常用来表示逻辑判断的结果。把数值型数据转换为布尔型数据时,0会转换为False,其它非0值转换为 True。反之,当把逻辑型数据转换为数值型时,False转换为0,True转换为-1,(9)变体(Variant)数据类型 Variant数据类型又称为万用数据类型,它是一种特殊的、可以表示所有系统定义类型的数据类型。如上所述的数值型、日期型、对象型、字符型的数据类型。Variant数据类型是VB对所有未定义
10、的变量的缺省数据类型的定义。,4.3.2 常量,常量:程序运行过程中其值始终不变的量1、数值常量2、字符常量3、逻辑常量4、日期常量5、符号常量,数值常量,整型常量:%长整型常量:&单精度型常量:!双精度型常量:#货币型:字符串型:$,Visual Basic在判断常量的数据类型时,有时存在多义性。例如,值3.01可能是单精度类型,也可能是双精度类型或货币类型。为了显式地指明常数的类型,可以在常数后面加上类型说明符,例如:3.01#是一个双精度浮点型常数。10.05 是一个货币型常数。,字符串常量,字符串常量是用双引号括起来的字符序列。例如:abcdefg 中华人民共和国,A=This is
11、a book,当字符串常量包含一个数字值时可以赋值给数值型变量,包含一个日期值时,可以赋值给日期型变量,逻辑常量,逻辑常量只有两个取值:True和False,日期常量,1、表示形式:mm/dd/yyyy2、用“#”括起来,例如#5/12/2010#,符号常量,符号常量用来代替程序中出现的很大的数据或很长的字符串。格式:Public|PrivateConst 常量名 As 类型=表达式在一行中可放置多个常数说明,可用逗号分隔,例:Private Const Pi As Single=3.14159,T$=“CHINA,4.3.3 变量,程序运行过程中其值可以改变的量称为变量。变量名表示内存位置(
12、存储单元的代号)三个问题:变量命名规则变量类型说明语句变量的作用域,1、变量的命名规则,(1)变量名只能以字母(或汉字)开头,后跟字母(或汉字)、数字和下划线(2)不能包含标点符号以及类型说明符(&、!、#、$)(3)不得超过255个字符;(4)不得使用VB 的保留字;(5)在同一个作用域内,变量名必须是唯一的。(6)为了增加程序的可读性,一般在变量名前加上一个表示 该变量数据类型的前缀。,以下是一些非法的标识符的例子:4yz 数字开头 x z 不允许出现减号 xy.t 不允许出现小数点If 不允许关键字Print$不允许关键字,2、变量的类型和定义,(1)用类型说明符表示变量 将类型说明符放
13、在变量名的尾部,可以表示不同的变量。,声明变量的目的:根据声明的类型决定系统为它分配的存储单元。,%整型&长整型!单精度型#双精度型 货币型$字符串型。例如:dim Name$private Num%public Wage,(2)用声明语句声明变量,其格式为:Public|Private|Dim|Static As,As,例如:Dim X As Integer,Y As Double Static D As Integer Public K As long Dim a,b as integer,思考:a,b是什么数据类型,A:empty,3、变量的作用域,局部变量、模块级变量与全局变量,1、局
14、部变量:在过程中定义的变量,仅在说明它的过程中有效 格式:Dim|Static 变量名 As 类型名,说明:Dim过程执行完毕,释放内存空间;(只在过程执行期 间才存在)。Static静态变量。程序启动时分配内存空间,程序结束时清除。(在整个应用程序运行期一直存在),2、模块级变量(窗体变量和标准模块变量):模块级变量:在定义该变量的模块内的所有过程内均有效。该变量在窗体或标准模块通用声明段中说明。格式:Private|Dim 变量名 As 类型名 Private、Dim等价(一般用Private),3、全局变量:在标准模块或窗体模块的通用段中说明,在工程内的所有过程中都有效(其值可用于应用程
15、序的所有过程)。格式:Public 变量名 As 类型名,说明:全局变量也是在启动时创建,程序结束时被清除。访问本模块中定义的全局变量时,可直接使用变量名;访问其他窗体模块中定义的全局变量时,必须在变量名前加“模块名.”;,如在Form1窗体的通用声明部分定义了全局变量APublic A as integer在Form2中使用全局变量AB=Form1.A+8,变量作用域总结,注意,定义一个变量后,系统自动为该变量赋予一个初值:1、变量是数值型的,初值为0:2、变量是变长字符串型的,初值为空;3、变量是定长字符串型的(设长度为n),初值为n个空格字符串;4、变量是逻辑型的,初值为False.5、
16、标准模块中的定长字符串变量可以说明为public或private,在窗体模块中只能将定长字符串变量说明为private,默认声明,在默认状态下,VB中可以不进行变量声明,此时变量类型默认为变体类型,也称为隐式声明,但是这样做可能由于变量名的误写而产生不良后果。强制显式声明变量的方法是:用Option Explicit语句“工具”“选项”“编辑器”“要求变量声明,默认声明一般只适用于局部变量,模块级变量和全局变量必须用Private、Dim或Public语句显式声明。,4.4 运算符与表达式,4.4.1 算术运算符 指数运算()浮点数除法(/)与整数除法()取模运算(Mod)算术运算符的优先级
17、字符串连接,运算符含义优先级算术表达式 结果()括号 1(3+1)/2 2 幂运算 2-16(1/2)-4-负号 3 4*-3-12*乘 4 1/3*3 1/除 4 10/3 33333333 整除 5 103 3Mod 取余数 6 10 Mod 3 1+加 7-3+4 1-减 7 6-4 2,算术运算符,例题:设A=7,B=4,C=6,则表达式A Mod 3+B3/C5的值为A1 B2 C3 D出错,小数在进行mod、运算时,vb会先将前后的两个数四舍五入取整(就是全部转化成long型),然后再运算。,运算符含义 关系表达式 结果=等于 3*4=12 True 大于 abcdeabr Fal
18、se=大于等于 5*6=24 True 不等于 dD TrueLike 字符串匹配 fist like f*“True,4.4.2 关系运算符,注意:(1)关系运算符“=”与赋值运算符“=”不同。(2)日期按先后比较(日期在前为小),字符串按ASCII码值比较大小。首先比较两个字符串的第一个字符,ASCII码值较大的字符所在的字符串大。若相同则比较的二个,自左至右按照“逐个比较,遇大则大,长大短小,完全相同,才是相等”的原则进行。汉字字符大于西文字符(3)关系运算符的优先级相同。,逻辑表达式的运算对象为逻辑型数据或数值型数据。Not取反,将两个逻辑值互相转换And与,两个操作数都为真,结果才为
19、真,否则为假Or或者,两个操作数中只要有一个为真,结果为真Xor异或,两个操作数不同时为真,否则为假,4.4.3 逻辑运算符和逻辑表达式,A B Not A A And B A Or B A Xor B T T F T T F T F F F T T F T T F T T F F T F F F,写出逻辑表达式:选拔优秀生的条件:三门功课英语(C1)、数学(C2)、计算机(C3),总分至少265分,或C2、C3分别大于90分且C1不低于80分。,C1+C2+C3=265 OR(C180 and C290 and C390),其他:字符串连接,可用“+”或“&”将两个字符串连接起来 例如:a=
20、“Visual”,b=“Basic”c=a+b 则c的值为”VisualBasic”,1连接运算符:“+”运算对象必须为字符串。2连接运算符:“&”连接的对象可以不同;“ABCD”&1234 结果:ABCD1234 1234&5678 结果:12345678 因此使用”&”比”+”更安全,在表达式求值的过程中,各种运算必须按运算符的优先级依次进行。运算符的优先级如下:算术运算符关系运算符逻辑运算符,4.4.4 运算规则,例题:设a=2,b=3,c=4,d=5,下列表达式的值是 Not aa+c A)-1 B)1 C)True D)False,1、相同数据类型的数据进行运算,结果为同一类型2、不
21、同数据类型的数据进行运算,结果的类型为两个运算对象中存储长度较长的那个对象的类型。,比如:一个整型数与一个长整型数进行运算,结果就是长整型;一个整型数与一个单精度数进行运算,结果为单精度型,但一个Long型数与一个Single型数运算,结果则为Double类型,依次类推。,注意:除法运算和幂运算是个例外,结果均为为双精度类型(Double)。,Dim a As Integer,b As Integer Dim c As Single a=5:b=9 c=b/a.,例题:假设变量Lng为长整形变量,下面不能正常执行的语句是(注意运算步骤)ALng=16384*2 BLng=4*0.5*16384
22、CLng=1902 DLng=32768*2,运算结果为两个运算对象中存储长度较长的那个对象的类型,A中:16384将被VB视为Integer(-32,768 到 32,767),2也为Integer,因此运行结果VB也将视为Integer,结果32768大于32767,溢出;换成16384*2&就可以了。B中:先运行48*0.5,由于0.5视为single,因此结果为single,再乘16384,结果仍然为single;C中:平方运算不需要遵循:Integer的平方仍然是Integer。因此可以执行,结果为double型。若换做190*190则溢出错误,理由同A;D中:32768超过3276
23、7将不会被视为Integer,因此再乘2不会溢出。另外,大家不要被A是长整型这个条件迷惑。运算是分步骤进行的,还没有来得及做长整型转换,A已经产生溢出错误了。,4.5、赋值语句,用赋值语句可以把指定的值赋给某个变量或某个带有属性的对象。一般格式为:格式1:变量名=表达式 格式2:对象名.属性名=表达式在格式2中,若对象名省略,则默认对象为当前窗体 如:a=34 b=“city”Text1.text=“Visual Basic”StartTime=Now text2.text=text1.text text1.text=Str$(a),说明,1、赋值语句兼有赋值与计算双重功能。如:b=a22、“
24、=”是赋值号,与数学上的等号意义不一样。,Boolean 数值型True为-1;False为0 Boolean 数值型 非0为True;0为False,不同数据类型数据的赋值,例:Dim v As Integer Dim book As String*8 Dim sum As Double Dim Bool As Boolean v=26 v=v+12.3 sum=v*123.4+56.7 v=“126”sum=“123ab”v=True sum=False Bool=123 Bool=0,注意:(1)右边表达式的值强制转 换成左边变量的类型,(2)若不能实现类型转换,出现“类型不匹配”错,注
25、释语句,为了提高程序的可读性,可以在程序的适当位置加上必要的注释,对语句的功能加以解释。VB中的注释语句以一个撇号()或REM开始。一般格式为:|REM 例如:a=45 给变量a赋值Rem不能出现在程序行的后面,可单独一行书写 如:a=45 Rem 给变量a赋值 是错误的,说明,1、注释语句是非执行语句2、任何字符都可以放在注释行中作为注释内容3、注释语句不能放在续行符的后面,结束语句,格式:END END语句用来结束一个程序的执行。当在程序中执行END语句时,当前程序将终止运行,所有变量都将重置,并关闭所有的数据文件为了保持程序的完整性,应在程序中包含END语句并通过END语句来结束程序。,
26、例如:sub command1_click End End sub End除用来结束程序外,还有其他一些用途,包 括:End sub:结束过程 End Type:结束自定义类型的定义 End Function:结束自定义function End If:结束if End Select:结束select,4.6常用公共函数,函数是VB的一种程序模块,可以完成特定的功能。函数有用户自定义函数和内部函数。内部函数不必定义就可以直接使用。数学函数字符串函数时间/日期函数随机数函数转换函数,可以在立即窗口中直接显示函数的执行结果,Log(x)求自然对数即数学中的lnx,三角函数运算的对象为弧度值,说明,1
27、、MID(string,start,length)可选参数;为 Variant(Long)。要返回的字符数。如果省略或 length 超过文本的字符数(包括 start 处的字符),将返回字符串中从 start 到尾端的所有字符。2、Len(),返回 Long,其中包含字符串内字符的数目,或是存储一变量所需的字节数 3、UCASE()和LCase(),只会作用于英文的字母,对其他字符原样输出。,5,Date返回当前日期,Time返回当前的时间,说明,1、Weekday(date,firstdayofweek),的返回值,122,例题.函数CInt Int Fix都返回整数值,以下能正确地描述它
28、们返回整数值大小关系的是()。A.CInt(-4.51)=Int(-4.51)Fix(-4.51)B.Int(-4.51)CInt(-4.51)Fix(-4.51)C.CInt(-4.51)Fix(-4.51)Int(-4.51)D.Int(-4.51)Fix(-4.51)=CInt(-4.51),1、Cint(x):将数值型数据X的小数部分四舍五入取整;2、Int(X):取小于等于X的最大整数;3、Fix(X):将数值型数据X的小数部分舍去。,思考:Cint(4.5)的值是多少?,注意,1、CInt(x)与CLng(x)函数的运算规则:四舍五入取整,但是若小数部分等于0.5时,结果为与X最接
29、近的偶数;如:Cint(4.5)=4 Cint(3.5)=4 Clng(4.5)=4 Clng(3.5)=42、CStr(x)与Str(x)函数的区别:若x为正数,CStr(x)会删去X前面的表示正号的符号位;而 Str(x)函数不会删除符号位。如:CStr(12)结果为:12 Str(12)结果为:12,4.6.5 格式化函数Format,用格式输出函数Format$可以使数值或日期按指定的格式输出。一般格式为:Format$(数值表达式,格式字符串)数值格式符:0:显示一数字,若此位置没有数字则补0#:显示一数字,若此位置没有数字则不显示,-+$():原样打出 如:Print Format
30、(12.345,000.00)Print Format(12000.345,#,#.#)当格式字符串为常量时,必须放在双引号中。,4.7 InputBox、MsgBox函数,4.7.1 InputBox函数4.7.2 MsgBox函数,4.7.1 InputBox函数,InputBox函数用来接受用户通过键盘输入的数据。InputBox函数使用的形式:A=InputBox(Prompt,title,defsult,x,y,helpfile,context)Prompt:提示用的文字信息;title:对话框标题(字符型),缺省时,为工程名;default:显示在用户编辑框中的缺省值,缺省时,返回
31、空值;特别注意:InputBox函数返回的是一个字符类型数据,程序示例,Private Sub Cmd1_Click()Dim N As String N=InputBox(请输入你的学号:,程序示例,230001)If Left(N,2)=23 Then Print 你是工程系的学生!Else Print 你不是工程系的学生!End IfEnd Sub,4.7.2 MsgBox函数,MsgBox函数用于向用户发布提示信息,并要求用户作出必要的响应。MsgBox函数的形式是:MsgBox(Prompt,button,title,helpfile,context),MsgBox函数中各个参数的说
32、明,Prompt:提示用的文字信息;button:这是一个由4个数值常量组成的式子,形式为c1+c2+c3+c4,用于决定信息框中按钮的个数和类型以及出现在信息框中的图标类型,各个参量的可选值及其功能见表4-10(凡有0值的参量,0值为缺省值);title:信息框标题(字符型),缺省时,为空白;,Dim Msg,Style,Title,Help,Ctxt,Response,MyString Msg=“Do you want to continue?”定义信息。Style=vbYesNo+vbCritical+vbDefaultButton2 定义按钮。Title=“MsgBox Demonst
33、ration”定义标题。Help=“DEMO.HLP”定义帮助文件。Ctxt=1000 定义标题 上下文。显示信息。Response=MsgBox(Msg,Style,Title,Help,Ctxt),MsgBox函数的返回值,按钮名 内置常量 取值OK(确定)vbOK 1Cancel(取消)vbCancel 2Abort(终止)vbAbort 3Retry(重试)vbRetry 4Ignore(忽略)vbIgnore 5Yes(是)vbYes 6No(否)vbNo 7,MsgBox函数的使用方法,1、使用赋值语句:ans=MsgBox(“非法数据!”,48,”提示信息”)2、使用Print方
34、法:Print MsgBox(“非法数据!”,48,”提示信息”)3、也可以把它等同为一个方法使用:MsgBox“非法数据!”,48,”提示信息”,第二种方法先显示信息框,点击按钮后再将返回值显示在窗体上;第三种方法没有返回值,只显示信息框,例题,Private Sub Form_Click()msg1$=要继续吗?msg2$=Operation Dialog Box r=MsgBox(msg1$,34,msg2$)Print r End Sub,练习题1.表达式6.5*5 Mod 288的值是()。A.0 B.1 C.2 D.3,1、6.5*5=32.52、288=33、32.5 mod 3
35、=2,小数在mod运算时,vb会先将前后的两个数四舍五入取整(就是全部转化成long型),然后再取余数。也就是说a mod b=clng(a)mod clng(b)。,计算步骤:,2执行下面语句后,Len函数值最大的是Dim IA As Integer,B As double,S As String*5,Ch As StringIA=32767:B=23.5:S=”A”:Ch=”abcd”ALen(IA)BLen(B)CLen(S)DLen(Ch)Len(string|varname):获取包含字符串内字符的数目,或是存储一变量所需的字节数。,3、设a=5,b=10,则执行 c=Int(b-a
36、)*Rnd+a)+1 后,c值的范围为 A)510 B)69 C)610 D)59,4、设a=5,b=4,c=3,d=2,下列表达式的值是32*b Or a=c And bc Or cdA)1 B)True C)False D)2,为了生成某个范围内的随机整数,可使用以下公式:Int(upperbound-lowerbound+1)*Rnd+lowerbound),5、设a=”MicrosoftVisualBasic”,则以下使变量b的值为”VisualBasic”的语句是A)b=Left(a,10)B)b=Mid(a,10)C)b=Right(a,10)D)b=Mid(a,11,10)6、Val(“1234.67e3ab345”)的结果是多少?A)1234.67 B)1234.67345C)1234.673345 D)1234670,