Presentation is loading. Please wait.

Presentation is loading. Please wait.

第三章 VB基本语言 3.1编程基础 3.2数据类型 3.3 变量与常量 3.4 运算符和表达式 3.5 内部函数 3.6 基本语句 3.7数组.

Similar presentations


Presentation on theme: "第三章 VB基本语言 3.1编程基础 3.2数据类型 3.3 变量与常量 3.4 运算符和表达式 3.5 内部函数 3.6 基本语句 3.7数组."— Presentation transcript:

1 第三章 VB基本语言 3.1编程基础 3.2数据类型 3.3 变量与常量 3.4 运算符和表达式 3.5 内部函数 3.6 基本语句 3.7数组

2 3.1 编程基础 VB代码不区分字母大小写 语句书写自由 注释有利于程序的维护和调试(Rem或 ‘) 保留行号列号
例:Rem This is a example Dim AnotherVar As String, _ ‘续行,下行还有 BirthDate As Date x=15: y=10 保留行号列号

3 3.2数据类型 使用VB语言编程,目的就是对数据进行处理。VB将不同的数据规定为不同的类型。它提供了11种标准数据类型,还可以自定义数据类型。

4 数据类型 关键字 类型符 前缀 占字节数 整型: Integer % int 2 长整型: Long & lng 4 单精度: Single
数据类型 关键字 类型符 前缀 占字节数 整型: Integer % int 2 长整型: Long & lng 4 单精度: Single ! Sng 4 双精度: Double # dbl 8 货币型: cur 8 字节型: Byte byt 1 字符型: String $ str 不定 逻辑型: Boolean bln 2 日期型: Date dtm 8 对象型: Object obj 4 可变型: Variant vnt 按需分配

5 1 数值数据类型 有integer,long,single,double,currency,byte六种
标准数据类型 1 数值数据类型 有integer,long,single,double,currency,byte六种 保存整数: 整型(Integer) 以2个字节存储 ,十进制表示其范围: ~32767 eg: 123, intx, intx% 长整型(Long) 以4个字节存储 ,十进制表示其范围: ~ eg: 123&, lngy, lngy&,

6 以8个字节存储。最多其小数点左边有15位数字,右边有4位数字。 保存二进制数: 字节型(Byte)
标准数据类型 保存浮点实数: 单精度浮点型(Single) 以4个字节存储。eg:123.45, ! , E+3(表示 103) 双精度浮点型(Double) 以8个字节存储。eg:123.45#, E+3#, D+3 保存定点实数和整数: 货币型(Currency) 以8个字节存储。最多其小数点左边有15位数字,右边有4位数字。 保存二进制数: 字节型(Byte) 以1个字节存储。其取值范围为0~255。

7 2.日期数据类型: Date 标准数据类型 用于保存日期和时间,表示方法有两种: 将可以被认作日期和时间的字符用号码符(#……#)括起来。
VB接受许多种日期时间格式 eg: # 27 March,1999 1:20 am# #Apr-2-05# #12/18/1999# # :20 # 以数字序列表示。小数点左边的数字代表日期,右边的数字代表时间,0为午夜,0.5为中午12点。负数代表1899年12月31日之前的日期和时间。

8 3. 字符数据类型: String 4.逻辑型数据类型:Boolean 标准数据类型
用于保存字符型数据,包括西文字符和汉字。表示方法为用“”括起来。 eg: "abc" "ABC" "计算机" "12.34" "321" ""(空串) “ ”(空格) 4.逻辑型数据类型:Boolean 用于进行逻辑判断,只有True和False两个值。 逻辑数据类型 其他数据类型 true -1 false

9 用来表示图形或应用程序中的对象,用4个字节存储。
标准数据类型 5.对象数据类型:Object 用来表示图形或应用程序中的对象,用4个字节存储。 6. 变体数据类型:Variant 是对所有未定义的变量的缺省数据类型。是可变的数据类型,它对数据的处理完全取决于程序上下文的需要。

10 3.3 变量与常量 变量或常量定义:命了名的存储单元。其中 变量与常量命名规则: 变量:在程序运行中其值可以改变的量。
3.3 变量与常量 变量或常量定义:命了名的存储单元。其中 变量:在程序运行中其值可以改变的量。 常量:在程序运行中其值不可以改变的量。 变量与常量命名规则: 必须以字母或汉字开头,由字母、汉字,数字或下划线组成,长度小于等于255个字符。 不能使用VB中的关键字。 VB中不区分变量名的大小写。 为了增加程序的可读性,可在变量名前加一个缩写的前缀来表明该变量的数据类型。

11 变量声明:使用变量前,一般须先声明变量名和其类型,以决定系统为它分配的存储单元。
用Dim语句显式声明变量 Dim 变量名 [AS 类型/类型符] 一条Dim语句可以同时定义多个变量,但每个变量必须有自己的类型声明。 eg: Dim intx As integer ,inty as integer, sngy As single 等价于 Dim intx%, inty%, sngy! 若 Dim intx, inty as integer, dblp2 as double 则 intx为变体型变量 字符型变量,声明方法有两种: Dim 字符串变量名 As String Dim 字符串变量名 As String*字符数 eg: Dim strs1 As String Dim strs2 As String*50 除了用Dim语句声明变量外,还可以用Static,Private,Public等,各关键字声明变量作用域不同。

12 隐式声明 变量未进行声明而直接使用,即隐式声明。其类型为 Variant 类型。 注意: 在通用声明处加 Option Explicit 语句可强制显式声明变量。 在VB菜单中,选工具--选项--编辑器(要求变量声明)

13 常量 常量有两类:一类是用户声明常量 ,一类是系统提供的常量。 用户声明常量 格式:Const 常量名 〔As类型/类型符〕=表达式 其中:
表达式:可以是数值常数,字符串常数及运算符组成的表达式。 字符串常数:"Hello!” 数值常数:十进制数: 1, 2.5, , 2.36E14 十六进制数:&HB4 八进制数: &O150 eg: Const MAX as Integer = &O144 Const CompanyName =“沈阳理工大学” Const Counts# =45.67

14 查看内部常量方法: 视图→对象浏览器 对象库中列出了vb的常量。 eg:窗口状态属性WindowsState可以接受下列常量:
系统提供的常量 VB内部已定义,可以直接使用的常量。 查看内部常量方法: 视图→对象浏览器 对象库中列出了vb的常量。 eg:窗口状态属性WindowsState可以接受下列常量: Form1. WindowsState= vbMinimized 等价于 Form1. WindowsState=1 通过系统常量的使用,可以使程序变得易于阅读和编写。 常量 描述 vbNormal 正常 vbMinimized 1 最小化 vbmaximized 2 最大化

15 3.4 运算符和表达式 运算符 和其他语言一样,VB中也具有丰富的运算符,通过运算符和操作数组合成表达式,实现程序编制中所需的大量操作。

16 算术运算符 Ia=3 注意:算术运算符两边的操作数应是数值型,若是数字字符或逻辑型,则自动转换成数值类型后再运算。 eg :30-True 结果是31,逻辑量True转为数值-1 False转为数值0 False "4" 结果是14

17 字符串运算符有两个:& 、+ 功能是将字符串连接起来 区别:
字符串运算符有两个:& 、+ 功能是将字符串连接起来 区别: + 两旁的操作数应均为字符型;若均为数值型则进行算术加运算;若一个为字符型,另一个为数值型,则出错。 & 两旁的操作数不管是字符型还是数值型,先转换成字符型后再连接。 eg: 操作 结果 "abc" & 123 "abc123 " "abc" + 123 出错 “123” & 456 “123456” “123”+“456” "123456"

18 关系运算符 关系运算符是将两个操作数进行大小比较,若关系成立,则返回True,否则返回False。操作数可以是数值型、字符型。
比较时注意以下原则: 如果两个操作数是数值型,则按其大小比较。 如果两个操作数是字符型,则按字符的ASCII码值从左到右一一比较。 关系运算符优先级相同。 运算符 含义 表达式例子 = 等于 “ABC”=“ABD” F <> 或 >< 不等于 “AB”<>”ab” T < 小于 23< F > 大于 “ABC”>”ABR” F <= 小于或等于 “23”<=“3” T >= 大于或等于 “bc”>=“abc” T Like 字符串匹配 ”ABCDE”LIKE”*C*” T Is 比较对象变量

19 逻辑运算符作用是将操作数进行逻辑运算,结果是逻辑值True或False。 Not : 取反 当操作数为假时,结果为真。
And: 与 两个操作数均为真时,结果为真。 Or : 或 两个操作数有一个为真时,结果为真。 Xor : 异或 两个操作数为一真一假时,结果为真。 Eqv : 等价 两个操作数相同时,结果为真。 Imp : 蕴含 第一个操作数为真,第二个操作数为假时,结果为假,其余结果都为真。 X Y NOT X X AND Y X OR Y X XOR Y X EQV Y X IMP Y T F

20 表达式 组成 由变量、常量、函数、运算符和圆括号共同组成。 书写规则 (1) 运算符不能相邻。例a+ -b是错误的。
(2) 乘号不能省略。例x 乘以y 应写成:x*y (3) 括号必须成对出现,均使用圆括号。 (4) 表达式从左到右在同一基准上书写,无高低、大小。 不同数据类型的转换 运算结果的数据类型采用精度高的数据类型. Integer<Long<Single<Double<Currency 优先级 算术运算符>字符运算符>关系运算符>逻辑运算符

21 3.5 常用内部函数 调用方法: 函数名(参数列表) 有参函数 函数名 无参函数 说明: (1)使用库函数要注意参数的个数及其参数的数据类型
3.5 常用内部函数 VB提供了上百种内部函数(库函数),供编程时调用 调用方法: 函数名(参数列表) 有参函数 函数名 无参函数 说明: (1)使用库函数要注意参数的个数及其参数的数据类型 (2)要注意函数的定义域(自变量或参数的取值范围) (3)要注意函数的值域。

22 数学函数 -4 3 Int(-3.5) Int(3.5) 取小于或等于 N的最大整数 Int(N) 2.3 Log(10) 自然对数
Log(N) -3 Fix(-3.5) Fix(3.9) 取整 Fix(N) 20.086 Exp(3) ex Exp(N) 1 Cos(0) 余弦函数 Cos(N) 3.5 Abs(-3.5) 取绝对值 Abs(N) 结果 实例 含义 函数名

23 Tan(0) 正切函数 Tan(N) 3 Sqr(9) 平方根 Sqr(N) Sgn(-3.5) 符号函数 Sgn(N) Sin(0)
Tan(0) 正切函数 Tan(N) 3 Sqr(9) 平方根 Sqr(N) -1 Sgn(-3.5) 符号函数 Sgn(N) Sin(0) 正弦函数 Sin(N) -4 4 Round(-3.5) Round(3.5) 四舍五入取整 Round(N) [0,1)之间的数 Rnd 产生随机数 Rnd[(N)] 结果 实例 含义 函数名

24 说明: (1) 在三角函数中的自变量是以弧度为单位。 如:sin30°→ sin(π/180*30)
(2) Rnd函数返回0 ~ 1(包括0和不包括1)之间的双精度随机数。 产生a~b的之间的随机整数: Int(Rnd *(b-a+1)+a)。如要产生[30,50]之间的随机整数,可用下面表达式: Int(Rnd*21+30) 若要产生1-100的随机整数: Int(Rnd *100)+1

25 2. 数学函数 "ABC" Ucase$("abc") 小写字母转为大写字母 Ucase$(C) "144" Oct$(100) 十进制转换成八进制 Oct[$](N) "123.45" Str$(123.45) 数值转换为字符串 Str$(N) 123 Val("123AB") 数字字符串转换为数值 Val(C) "abc" Lcase$("ABC") 大写字母转为小写字母 Lcase$(C) 64 Hex(100) 十进制转换成十六进制 Hex(N) "A" Chr$(65) ASCII码值转换成字符 Chr$(N) CDate("2003/11/13") 转换成日期型 CDate 65 Asc("A") 字符转换成ASCII码值 Asc(C) 结果 实例 功能 函数名

26 (1) Chr和Asc函数互为反函数。 (2) Val将数字字符串转换为数值类型 Val("abc123") 值为:0, Val("1.2sa10") 值为1.2 注意: Val( )函数只将最前面的数字字符转换为数值。 例如:Val(" ty3")结果为 。 (3) Asc(“Abcd”) 值为: 65 (只取首字母的Ascii值) 说明: 要区别两个取整函数Int()和Fix() Fix(N)为截断取整,即去掉小数后的数。 Int(N)不大于N的最大整数。 例如: Fix(9.59) =9, Int(9.59) =9 Fix(-9.59) =-9, Int(-9.59) =-10

27 3、字符串函数 "BCD" Mid("ABCDE",2,3) 取字符子串 Mid(C,N1[,N2]) "ABCD"
LTrim("ABCD") 去掉字符串左边空格 LTrim(C) "A3AB3" Replace("ACDABCD","CD","3") 用C2替代C1 Replace(C,C1,C2) 8 LenB("AB教育") 字符串所占的字节数 LenB(C) 4 Len("AB教育") 字符串长度 Len(C) "ABC" Left("ABCDE",3) 取字符串左边n个字符 Left(C,N)  "123abc" A=Array("123","ab","c") :Join(A,"") 将数组A各元素连接成字符串变量 Join(A[,D]) 7 InStr(2,"EFABCDEFG","EF") 从n开始,在C1中找C2 InStr([N,]C1,C2[,M]) 结果 实例 说明 函数名

28 "ABCD" TRim(“ABCD") 去掉字符串两边的空格 TRim(C) "DCBA" StrReverse("ABCD") 将字符串反序 StrReverse(C) "AAA" String(3,"ABC") 重复首字符n次 String(N,C) S(0)="123" S(1)=“ab" S=Split("123,ab",",") 将字符串分隔成字符数组。与Join作用相反 Split(C[,D]) “" Space(3) 产生n个空格的字符串 Space(N) RTrim("ABCD") 去掉字符串右边空格 RTrim(C) “BCD" Right("ABCD",3) 取字符串右边n个字符 Right(C,N) 结果 实例 说明 函数名

29 说明: 如果返回是字符型,则函数后有“$”字符。当然一般也可以不写,习惯都写上。 例如: len("This is a book!") Left$("ABCDEFG",3) "ABC" Mid$("ABCDEFG",2,3) "BCD" InStr(2, “ABCDEFGEF”, “EF”) (第一次出现的位置)

30 4、日期函数 Second(#1:12:56PM#) 返回秒(0~59) Second(C|N) Time 返回系统时间 Time[()]
Year(365) 返回年代号(1753~2078) Year(C|N) Now 返回系统日期和时间 Month("2003,05,01") 返回月份代号(1~12) Month(C|N) Minute(#1:12:56PM#) 返回分钟(0~59) Minute(C|N) Hour(#1:12:56PM#) 返回小时(0~24) Hour(C|N) Day("2003,05,01") 返回日期代号(1~31) Day(C|N) Date 返回系统日期 Date[()] 实例 说明 函数名

31 5、Format函数 形式: Format (表达式[, "格式字符串"]) 功能:按用户指定格式返回表达式,常常用在Print方法中。
使用形式:Print Format$(表达式[,“格式字符串”]) 表达式:可以是数值、日期或字符串型表达式。 格式字符串:表示输出表达式时采用的输出格式。不同数据类型所采用的格式字符串是不同的。

32 6、 Shell函数 Shell函数可调用各种应用程序。格式如下: Shell(命令字符串[,窗口类型]) 其中:
命令字符串:要执行的应用程序名,包括路径,它必须是可执行文件(扩展名为.com、.exe、.bat)。 窗口类型:表示执行应用程序的窗口大小,0~4,6的整型数值,一般取1,表示正常正常窗口状态。 函数成功调用的返回值为一个任务标识ID,它是运行程序的惟一标识,若不成功,则会返回0。 提示:如果不知道应用程序的路径名,可用Start命令启动程序 例 i = Shell(start & "calc.exe")

33 3.6基本语句 赋值语句 是最基本的语句,作用是把右边表达式的值赋给左边的变量。VB使用赋值号“=”来赋值。 形式:[LET]变量名=表达式
其中: LET: 通常省略 表达式:其类型应与变量名的类型一致,即同为字符型或数值型。同为数值型精度不同时,强制转换成左侧精度。 eg:sngrate!= ‘给单精度型变量sngrate‘赋值。 Text1.text=“Visual Basic” ‘为文本框text属性赋值。

34 与用户交互函数和过程 VB与用户的直接交互是通过InputBox函数MsgBox函数和MsgBox过程进行的。 InputBox函数
功能:打开一个对话框,等待用户输入正文或按下按钮,当用户单击“确定”按钮后,函数返回文本框内输入的字符串。

35 格式: InputBox (提示 [,标题] [,缺省] [,x坐标位置,y坐标位置])
参数: 提示( Prompt):必需的。为字符串表达式,最大长度1024 个字符,如果 prompt 包含多个行,则可在各行之间用回车符 (Chr(13))和换行符 (Chr(10)) 或来分隔。 标题(Title):可选的。对话框标题栏中的字符串表达式。如省略 ,则把应用程序名放入标题栏中。 缺省值(Default):可选的。显示在文本框中的字符串表达式,在没有其它输入时作为缺省值。如果省略 default,则文本框为空。 X坐标(xpos):可选的。数值表达式,成对出现,指定对话框的左边与屏幕左边的水平距离。如果省略 xpos,则对话框会在水平方向居中。 Y坐标(ypos):可选的。数值表达式,成对出现,指定对话框的上边与屏幕上边的距离。如果省略 ypos,则对话框被放置在屏幕垂直方向距下边大约三分之一的位置。

36 MsgBox函数和MsgBox过程 功能:打开 一个信息框,等待用户选择一个按钮,函数返回值为单击按钮的整数值。 格式:变量〔%〕=MsgBox(提示[, 按钮] [, 标题]) MsgBox过程与MsgBox函数的功能和参数完全相同,但没有函数返回值,适用于一些不需要返回值的消息框。格式为:MsgBox(提示[, 按钮] [, 标题])

37 参数 : 提示(Prompt):必需的。字符串表达式,作为显示在对话框中的消息。prompt 的最大长度大约为 1024 个字符,内容超过一行,可以用回车符 (Chr(13))和换行符 (Chr(10)) 将各行分隔开来。 按钮(Buttons):可选的。为数值表达式,是值的总和,决定显示按钮的数目及形式,使用的图标样式,缺省按钮是什么以及消息框的强制回应等。如果省略,则 buttons 的缺省值为 0。 标题(Title):可选的。在对话框标题栏中显示的字符串表达式。如果省略 title,则将应用程序名放在标题栏中。

38 它是由以下4组数组成,每组之中取一个数,将4个数相加得来的。
Buttons的值 它是由以下4组数组成,每组之中取一个数,将4个数相加得来的。 组1 按钮数目 内部常数 描述 vbOKOnly 只显示 “确定 ”按钮 VbOKCancel 1 显示 “确定 ” 及 “取消” 按钮 VbAbortRetryIgnore 2 显示 “终止”、“重试” 及 “忽略” 按钮 VbYesNoCancel 3 显示 “是”、“否” 及 “取消” 按钮 VbYesNo 4 显示 “是”及 “否” 按钮 VbRetryCancel 5 显示 “重试”及 “取消” 按钮

39 组2 图标类型 常数 描述 VbCritical 16 显示 关键信息 图标 VbQuestion 32 显示 询问信息 图标 VbExclamation 48 显示 警告信息 图标 VbInformation 64 显示 信息 图标

40 组3 缺省按钮 常数 描述 vbDefaultButton1 第一个按钮是缺省值 vbDefaultButton2 256 第二个按钮是缺省值 vbDefaultButton3 512 第三个按钮是缺省值

41 组4 强制回应模式 常数 值 描述 vbApplicationModal
组 强制回应模式 常数 描述 vbApplicationModal 应用程序强制返回;应用程序一直被挂起,直到用户对消息框作出响应才继续工作 vbSystemModal 4096 系统强制返回;全部应用程序都被挂起,直到用户对消息框作出响应才继续工作

42 MsgBox函数返回所选按钮整数值 常数 所选按钮 vbOK 1 确定 VbCancel 2 取消 VbAbort 3 终止 vbRetry 4 重试 vbIgnore 5 忽略 VbYes 6 VbNo 7

43 例:试验Msgbox的功能 程序要求:在屏幕上开辟一个对话框,对话框的下部有三个按钮,其中左边按钮中标有“终止”,中间按钮中标有“重试”,右边按钮中标有“忽略”。对话框内提示语为“Are you continue to?”,对话框标题“功能测试”,显示“?”图标,并把第一个按钮作为默认活动按钮。输出函数的返回值,单击终止,打印返回值3;单击重试,打印返回值4;单击忽略,打印返回值5。

44 选择结构 选择结构:就是对条件进行判断,根据判断结果,选择执行不同的分支。 VB中提供了多种形式的条件语句来实现选择结构,主要包括If条件语句、Select case语句以及IIf函数。

45 If条件语句 If条件语句有四种格式:单分支结构,双分支结构,多分支结构和嵌套。 单分支结构条件语句 格式: If 条件 Then 语句块
End If If 条件 Then 语句 其中:条件为表达式,表达式值按非零值为True,零为False进行判断。 语句块可以是一句或多句语句。 语句可以是一句或用冒号分隔的多句语句 。 功能: 如果条件为真,则执行语句块(语句),然后执行If语句的下一条语句;如果条件为假,则直接执行If语句的下一条语句。

46 x y t 例:已知两个数x和y,比较它们的大小,使得x大于y。 语句如下: If x<y then t=x x=y y=t
End if 或 if x<y then t=x: x=y: y=t 将存放在两个变量中的数进行交换,必须借助于第三个变量。 x y t 1 3 2

47 双分支结构条件语句 格式: If 条件 Then 语句块1 Else 语句块2 End If If 条件 Then 语句1 Else 语句2 功能: 如果条件为真,则执行语句块1(语句1),否则执行else后面的语句块2 (语句2)。

48 例1: 双分支语句: If a/3 = int(a/3) Then Print “a能被3整除” Else Print “a不能被3整除” 等同于两条单分支语句: If a/3=int(a/3) Then Print "a能被3整除" If a/3<>int(a/3) Then Print “a不能被3整除"

49 例2: 输入三个数a , b , c ,输出三者之中最大者。 分析:问题可以描述为 (1)输入三个数值; (2)从中找出最大值; (3)输出结果。 算法设计 (1)用InputBox函数把三个数值输入到变量a , b , c 中; (2)首先假设a最大,放在变量max中,然后分别与b,c进行比较,保留其中最大的数在变量max中; (3)用Print方法输出max的值。

50 代码如下: a = val(InputBox(“请输入第 1 个数:”)) b =val(InputBox("请输入第 2 个数:"))
Dim a!, b!, c!, max As Single a = val(InputBox(“请输入第 1 个数:”)) b =val(InputBox("请输入第 2 个数:")) c = val(InputBox("请输入第 3 个数:")) max = a If b > max Then max = b If c > max Then max = c Print Print a; “、”; b; “ 与 ”; c; “ 之中最大值是:” Print max

51 例3 : 输入系数 a,b ,编程序解方程ax + b = 0。
分析: 当a≠0时,x = –b/a ; 当a = 0,b≠0时,方程无解。 因为用0作除数会产生溢 出的运行错误,所以在计算x 的值之前,要先判断a是否为0。

52 代码如下: Private Sub Command1_Click() Dim a!, b!, x As Single a = Val(InputBox(“请输入系数a:” b = Val(InputBox(“请输入系数b:”) ) If a <> 0 Then x = -b / a : Print "x = "; x Else Print "方程无解!" End Sub

53 多分支结构条件语句 格式: If 条件1 Then 语句块1 [ElseIf 条件2 Then 语句块2 ElseIf 条件3 Then 语句块3] ...... [Else 语句块n+1] End If 功能: 如果条件1为真,执行语句块1;条件1为假,测试条件2,如果条件2为真,执行语句块2;一直这样执行下去,如都为假,则执行语句块n+1。其中,不管有多少分支,执行了一个分支后,其余不再执行。

54 例4: 如果成绩大于100,显示“成绩错误”;在90-100之间,显示“成绩优秀”;80-89之间,显示“成绩良好”;60-79之间,显示“及格”;0-59之间,显示“不及格”。 Private Sub Form1_Click() Dim iGrade As Integer iGrade = Val(InputBox("请输入成绩:")) If iGrade > 100 Then Print "成绩错误" ElseIf iGrade >= 90 Then Print "成绩优秀" ElseIf iGrade >= 80 Then Print "成绩良好" ElseIf iGrade >= 60 Then Print "及格" Else Print "不及格" End If End Sub

55 If语句的嵌套 是指If或Else后面的语句块中又包含If语句。 格式: If<条件1> Then If <条件2> Then …. End If 其中,为了增加程序的可读性,书写时采用锯齿型;If语句的形式若不在一行上书写,必须与End If配对,多个End If与它最接近的End If配对。

56 例5: 编一帐号和密码输入的校验程序。对输入的帐号和密码规定如下: 帐号不能超过6位数字,密码为4位字符。 “gong” 密码输入时屏幕显示“*”。 当帐号及密码输入不正确时,显示下图相关信息,若选择“重试”,则清除原输入的内容,若选择“取消”,结束程序,焦点定位在原输入的文本框。

57 控件属性设置: 默认控件名 Name属性 Caption属性 其他属性 label1 lblno 帐号 label2 lblpas 密码
Text1 txtno Maxlength=6 text2 txtpas Maxlength=4 Passwordchar=“*” command1 cmdok 确定

58 代码如下: Private Sub Txtno_LostFocus() If Not IsNumeric(Txtno) Then
MsgBox “账号有非数字字符”, vbExclamation, “输入账号” Txtno.text=“” Txtno.SetFocus End If End Sub Private Sub Form_Load() Txtpas.Text = ""

59 Private Sub Cmdok_Click( )
If Txtpas.Text = "gong" Then MsgBox "输入正确" Else i = MsgBox(“密码错误”, 5 + vbExclamation, “输入密码”) If i <> 4 Then End Txtpas.Text = "" Txtpas.SetFocus End If End Sub

60 select case 语句(情况语句) 格式: Select Case 变量或表达式 Case 表达式列表1 语句块1
语句块2 ... Case 表达式列表n 语句块n [Case Else 语句块n+1] End Select 功能: 计算表达式的值,如果表达式的值和Case项中的值相等,则执行相应的语句体。执行完语句体后,执行End Select。如果没有合适的项,执行Case Else后面跟的语句体。 当条件范围重叠时, 即表达式的结果两个case都符合,只执行位置在前面的case里的命令

61 其中:“变量或表达式”可以是数值型或字符串表达式,“表达式列表”的类型必须与其相同,可以是如下形式:
例如: Case ‘与一个值比较 表达式[,表达式],... 例如:Case “讲师”,“副教授”,“教授” 表达式1 To 表达式2 表达式1的值必须<表达式2的值,值可以是字符串。 例如:Case 60 To Case “a” To “z” ‘与一个范围比较 Is 关系运算表达式 用于对象变量引用比较。 Is后面必须跟关系运算符,且只用一次Is 例如:Case 2,4,6,8,Is>10

62 Select case语句是IF多分支语句的另一种形式
例:在变量strc中存放一个字符,判断其是字母,数字,还是其他字符。 If strc>=“a” And strc<=“z” Or strc>=“A” And strc<=“Z” Then Print strc + “is alpha character” Elseif strc>=“0” And strc<=“9” Then Print strc+ “is numeral character” Else Print strc+”other character” End if Select case strc Case “a” to “z” , “A” to “Z” Case “0” to “9” Case else Print strc+“other character” End select

63 例6:某商场为了促销,采用购物打折的优惠办法,每位顾客一次购物
(1)1000元以上,按九五折优惠 (2)2000元以上,按九折优惠 (3)3000元以上,按八五折优惠 (4)5000元以上,按八折优惠 编写程序,输入购物款数,计算并输出优惠价。

64 IIf函数(条件函数) 格式:IIf(条件,表达式1,表达式2) 功能:如果条件为True,返回表达式1的值,为False返回表达式2的值。
例: 如果成绩>=60,给变量赋值“及格”,否则赋值“不及格”。 strMsg = IIf (iGrade>=60,"及格","不及格") 例: 求x,y中大的数。放入变量T中。 T=IIf(x>y, x, y)

65 循环结构 为了解决某一问题,或求取某一计算结果,程序中往往反复地按某一模式进行操作,即在指定条件下多次重复执行一组语句,即循环。VB提供了多种形式的循环结构,如For循环语句,DO…LOOP循环语句等。

66 For循环语句 格式: For 循环变量=初值 To 终值 [Step 步长] [循环体] [Exit For] Next 循环变量
其中:循环变量:必须为数值型。 步长:一般为正,初值小于终值 ;若为负,初值大于终值 。缺省步长为1。 循环体:可以是一句或多句语句。 Exit For:遇到该语句时,退出循环,执行Next的下一句语句。 功能:用于控制循环次数已知的循环结构。

67 For循环执行过程: 第一步:循环变量被赋初值,仅被赋值一次。 第二步:判断循环变量是否在终值内; 如果是,运行循环体;否,结束循环,转到Next的下一句运行。 第三步:运行到Next语句,循环变量=循环变量+步长。 转到第二步开始 处继续循环。(循环一次完成)

68 For循环流程图 步长 < 0 步长 > 0 如步长为零时,循环变量值不变,因此循环体内如果无Exit For 语句,则进入死循环。在设计时运行程序进入死循环可以使用Ctrl+Break,终止程序执行。

69 例7:求N!(N为自然数),n值从键盘输入。
由阶乘的定义可知: N! = 1 * 2 * …… * ( N – 2 ) * ( N – 1 ) * N = ( N – 1 )! * N 也就是说,一个自然数的阶乘,等于该自然数与前一个自然数阶乘的乘积,即从1开始连续地乘下一个自然数,直到N为止。

70 Do…Loop循环语句 Do…Loop循环语句用于控制循环次数未知的循环结构。有两种语法形式。形式1:先判断后执行条件形式,形式2:先执行后判断条件形式。

71 形式1: 先判断后执行格式 Do {While|Until}< 条件> 语句块 [Exit Do] Loop 其中: 1)循环体有可能一次也不执行。 2) 关键字While用于指明条件为真( True )时执行循环体中的语句块。Until指明条件为假( False )时执行循环体中的语句块。 3) Exit Do 表示遇到该语句时,退出循环,执行Loop下一句的语句。

72 Do While…Loop循环 Do Until…Loop循环
流程图 Do While…Loop循环 Do Until…Loop循环

73 形式2: 先执行后判断条件形式 Do 语句块 [Exit Do] Loop {While|Until}< 条件> 先执行后判断条件形式的Do…Loop语句与形式1的区别是首先执行循环体,然后测试循环条件,决定是否继续循环。所以,这种结构的语句至少执行一次循环体。

74 流程图

75 例8:用辗转相除法求两自然数m,n的最大公约数和最小公倍数。
算法分析: 对于m和n,使m>n; M除以n得余数r; 若r=0,则n为求得的最大公约数,结束。否则执行④ 将n赋值给m,r赋值给n,再重复执行② 求得最大公约数之后,最小公倍数等于原两数乘积除以最大公约数。

76 循环的嵌套: '正确的嵌套方式 ‘错误的嵌套方式
在一个循环体内又包含了一个完整的循环结构称为循环的嵌套。循环嵌套使用时,循环变量必须使用不同的变量名,而且不可以书写交叉的For循环语句。 '正确的嵌套方式 For i=1 To 9       For j=1 to 9             Print i,j        Next j  Next i ‘错误的嵌套方式 For i=1 To 9         For j=1 to 9                 Print i,j    Next i        Next j

77 其他辅助控制语句 GOTO语句 格式:GoTo 标号|行号 功能:是无条件转向标号或行号指定的那行语句。 其中:
标号、行号:标号是一个以冒号结尾的标识符;行号是一个整形数,不以冒号结尾。标号和行号,在程序中必须存在,且是唯一的。 注意:GoTo语句容易破坏程序的结构,强烈不建议使用

78 End 语句 功能:用于结束一个程序的运行。 With 语句 格式: With 对象 语句块 End with 功能:可以对某个对象执行一系列的语句,而不用重复指出对象的名称。 例:with mylabel .height=2000 .width=2000 .fontsize=20 .caption=“this is mylabel” end with 其中: 当程序进入with语句块,对象就不能改变 ,因此不能用一个with语句来设置多个不同的对象。 属性前面的“.”不能省。

79 3.6数组 数组的概念 静态数组与动态数组 数组的基本操作

80 数组的概念 在实际处理数据时,经常需要处理大批量同类型数据,为此,我们引入了数组。数组不是一种数据类型,而是一组相同类型的变量的集合。
在计算机内存中,数组占据了一块连续的存储区域,数组名就是这块空间的名称。区域中每个单元都有自己的地址,该地址用下标表示,表示数组中的各个元素。数组应该先定义后使用,定义数组的目的是通知计算机为其留出所需的存储空间。 一个数组名代表一批数据

81 静态数组与动态数组 数组的划分: 我们按内存开辟空间的时机来划分数组,在声明时确定大小的数组称为静态数组,声明时未确定大小的数组称作动态数组。静态数组的大小一经定义,就不可改变,动态数组的大小在运行时可以改变。

82 在声明时已经确定了大小的数组称为静态数组。 一维数组
静态数组及声明 在声明时已经确定了大小的数组称为静态数组。 一维数组 声明一维数组形式如下: Dim 数组名(下标) [ As 类型] 其中: 下标:必须为常数,不可以为表达式或变量。 下标的形式:[下界 TO] 上界,省略下界,其默认值为0。 数组的大小:上界-下界+1 As 类型:如果缺省,是变体数组。 例如:Dim mark(1 to 100)As Integer 声明了一个一维数组,数组名为mark,类型为整型,下标范围为1 to 100,数组各元素是mark(1), mark(2),… mark(100)

83 多维数组 声明多维数组形式如下: Dim 数组名(下标1[,下标2,…]) [ As 类型] 其中:
下标个数:决定了数组的维数,最多允许有60维。 数组的大小:为每一维的大小的乘积。 例1:Dim array1(0 to 3,0 to 4)as long 或 Dim array1(3,4)as long 声明一个长整型的二维数组array1,(往往称为4行5列的数组)第一维的下标范围为0-3,第二维的下标范围为0-4,数组的大小为4*5=20 例2:Dim a(1,2,3)as Integer 声明一个整型的三维数组a,第一维的下标范围为0-1,第二维的下标范围为0-2,第三维的下标范围为0-3,数组的大小为2*3*4=24 例3:Dim a1(3,4)as Integer, a2(4,5)as Integer 声明两个整型的二维数组a1, a2 当希望数组下标从1开始时,可以使用Option Base 1命令来设置(此命令的Option Base 0为默认情况)。

84 动态数组及声明 在声明时未确定数组的大小(括号内为空),当要使用时随时用Redim语句重新指出数组的大小的称为动态数组。
建立动态数组的方法: 使用Dim、Private、Public语句声明括号内为空的数组。 形式如下: Dim 数组名( ) [ As 类型] 然后在过程中用ReDim语句指出数组大小。 ReDim语句形式如下: ReDim 数组名(下标1[,下标2…]) 例1: Dim sarray() as single Sub Form-Load() Redim sarray(4,8) End sub 声明了动态数组sarray,在Form-Load()事件中重新指明二维数组的大小为5行9列。

85 注意: 在静态数组声明中的下标只能是常量,在动态数组redim语句中的下标可以是常量,也可以是有了明确值的变量。 在过程中可以多次使用ReDim语句改变数组大小和维数。 每次使用ReDim语句都会使原来数组中的值丢失,可以在ReDim语句后加Preserve参数来保留数组中的数据,但使用Preserve只能改变最后一维的大小,前面几维大小不能改变。 例2:Redim语句和Preserve语句的使用。 Dim a() as Integer Private sub Form-Click Redim a(3,2) Redim Preserve a(3,4) End sub

86 数组的基本操作 数组元素的引用 定义了数组之后就可以使用数组了,具体操作时是针对每个数组元素进行的,使用时必须将数组元素的具体下标写清楚。
例: Option Base 1 '要求声明的数组元素下标从1开始 Dim a(5) '声明了一个数组a,它有5个元素 a(1)= '将a数组中下标为1的元素内容赋值78 a(5)= '将a数组中下标为5的元素内容赋值56 Print a(5) ‘打印a数组下标为5的元素的内容

87 给数组元素赋初值 在使用数组时,需要将一批数据放入数组元素中,赋值方法为 利用循环结构
For i=1 to 10 a(i)=0 Next i 使用Array函数直接将数组元素的赋值在一条命令中完成。 例:WeekDay=Array("Mon","Tue","Wed","Thu","Fri","Sat","Sun") 使用Array函数创建了一个数组,将数组赋值给WeekDay变量,而未经过声明的变量WeekDay此时经过赋值成为一个数组变量。 例:a=Array(1,2,3,4,5) Array函数说明: 数组元素值是一个用逗号隔开的值表,这些值用于给数组的各元素赋值。 声明的数组其类型只可以是变体型 。 此函数只用于一维数组。

88 数组元素的输入 可以通过文本控件输入,也可以通过Inputbox函数输入。 For i=0 to 3 For j=0 to 4
a(i,j)= Inputbox( “输入”& i & “,” & j &“的值” ) Next j Next i

89 数组元素的输出 可以使用for循环语句结合print方法实现数组元素的输出。 For i=0 to 4 For j=0 to i
sc(i,j)=i*5+j print sc(i,j);“ ” Next j Print Next i

90 求数组中最大元素和所在下标及各元素之和 Dim a(1 to 10) as integer
Dim max as integer,Imax as integer,sum as integer 。。。。 Max=a(1) Imax=1 Sum=a(1) For i=2 to 10 Sum=sum+a(i) If a(i)> max then max=a(i) Imax=i END if Next i

91 交换数组中各元素 例: 定义10个整数,并放入一个一维数组中,将数组中第一个元素与最后一个交换,第二个与倒数第二个交换…,即第1元素与第10元素互换,第2元素与第9元素互换…分别输出数组原来各元素的值和对换后各元素的值。

92 Option Base 1 Private Sub Form_Click() Dim i as Integer, t as Integer arr = Array(1, 3, 5, 7, 9, 2, 4, 6, 8, 10) Print "原来数组:" For i = 1 To 10 Print arr(i); Next i Print For i = 1 To 5 t = arr(i) arr(i) = arr(10-i+1) arr(10-i+1)= t Print "对换后的数组" End Sub


Download ppt "第三章 VB基本语言 3.1编程基础 3.2数据类型 3.3 变量与常量 3.4 运算符和表达式 3.5 内部函数 3.6 基本语句 3.7数组."

Similar presentations


Ads by Google