版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章VB基本语言
为开发较为复杂的应用程序,VB的学习者必须首先掌握VB的基本语法和基本语言,
有了扎实的程序设计语言基础,才能够对数据处理和功能复杂的窗体和模块进行编程工作,
使之满足工作需要,进而顺利完成应用程序的程序设计工作。
【本章教学目标】
知识点:
1.VB中使用的数据类型及定义方法。
2.常量及变量的定义方法。
3.运算符及表达式的使用。
4.常用内部函数的作用及调用方法。
5.结构化程序设计的三种程序结构。
6.数组的应用。
7.自定义函数和子程序。
8.创建多个窗体。
技能点:
1.理解并能正确掌握VB的语法规则及书写习惯。
2.熟悉并基本掌握VisualBasic程序的流程控制。
3.熟练掌握基本程序模块的编制方法。
4.正确掌握程序的调试方法。
§3.1编码基础
【教学目标】
学会VB编程的基本方法,以及编程中应遵循的规则与书写要求。
【教学要求】
了解:注释语句在程序书写中的作用。
理解:VB源程序的编写规则。
掌握:几个常用方法的作用及使用方法。
【本节重点】
重点掌握Print方法的作用及使用方法。
VB源程序的编写规则和书写要求。
一、VB语法规则
1、VB代码不区分大小写。
2、在同一行中可写多个语句,但须用:号隔开。
3、一行最多允许255个字符。
4、语句可以续行,续行标志为“空格加下划线”。
二、VB中的注释语句
VB用单引号和Rem定义符作为注释语句。注释语句不但用于程序的注解,以增加源程
序的可读性,而且经常用于程序的调试。
三、VB中常用的方法
VB中常用的方法较多,下面先介绍三个方法,其中Print方法和Cls方法基本延用了原
Basic中的语句,其功能主要用于学习和练习VB的基本语句,在应用程序的开发方面,基
本没有实际意义。
1、Print方法
Print方法可在对象上输出文本或表达式的值。其语法格式为:
[对象.]Print[{Tab(n)|Spc(n)}][表达式列表][;|,]
说明:
(1)“对象”可以是Form、PictureBox、Printer,省略对象,则在窗体上输出。
(2)“表达式列表”是用“,”或“;”隔开的一个或多个表达式。如选用“;”隔开,
则各项之间无间隔。如选用“,”隔开,则各项的宽度为14。
(3)Tab函数:Tab(n)Tab函数的功能是在其后面的表达式前加n个空格。
(4)Spc函数:Spc(n)Spc函数的功能是在下一个表达式之前加n个空格。
例:在窗体上的一行内每隔5个空格分别打印输出4个“#”号和4个“@”号。
PrintTab(5);"#####";Spc(5);"@@@@"
2、Cls方法
Cls方法用以清除程序在运行时在窗体或图形中显示的文本或图形。其语法格式为:
[对象.]Cls
使用Cls方法后,图形坐标中两坐标轴的x与y值均被置为0,并清除运行时窗体上显
示的文本及图形,但不清除窗体在设计时的文本和图形。“对象”选项省略时指窗体。
3、Move方法
Move方法用于移动窗体或控件,并改变其大小。其语法格式为:
[对象.]Move<左边距离>[,上边距离[,宽度[,高度]]]
说明:
(1)“对象”可以是除时钟、菜单外的所有控件,省略对象时默认对象为窗体。
(2)左边距离、上边距离、宽度、高度:数值表达式,以twip(缇)为单位。如果对
象是窗体,则“距离”以屏幕为参照,否则以窗体为参照。
例:首先编程设置图形控件Image1在窗体中的位置,并向Image1中装载图形。然后令
该图形控件移动并放大。
PrivateSubForm_Load()
‘设置图形控件Image1在窗体中的位置,并向Image1中装载图形
Image1.Top=100
Image1.Left=100
Image1.Picture=LoadPicture("MYCOMP.ICO")
EndSub
PrivateSubImage1_Click()
‘令图形控件移动并放大
Image1.Stretch=True
Image1.MoveImage1.Left+100,Image1.Top+100,_
Image1.Width+100,Image1.Height+100
EndSub
四、源程序的书写要求
1、在主要的程序段落应用汉语对程序的功能进行标注,以增加程序的可读性。
2、书写的程序要具有锯齿形风格,即每当书写到条件判断和循环等结构语句时,结构
内的语句应有规律地后移,遇到嵌套结构时,嵌套结构内的语句不但需要后移而且要分出层
次。每一个程序员都要培养此种书写程序的风格与习惯,以便在编写复杂和大程序时仍能保
证程序语法和逻辑的正确性。
§3.2数据类型
【教学目标】
掌握VB中主要的数据类型及其表示方法。
【教学要求】
了解:数据类型的概念及种类。
理解:各种标准数据类型的应用场合。
掌握:各种标准数据类型的表示方法及表示范围。
【本节重点】
自定义数据类型。
各种标准数据类型的表示方法及表示范围。
一、标准数据类型
1、数值(Numeric)数据类型
(1)整型(Integer)和长整型(Long)
整形用于保存整数,整数运算速度快,但所表示数的范围小。其中Integer的取值
范围是:-32768~32767,占2个字节,类型符是%号;Long的取值范围是:
-2147483648~2147483647,占4个字节,类型符是&号。
(2)单精度型(Single)
Single用于保存浮点实数,其取值范围是±1.4E-45~±3.4E38,占4个字节,
类型符是!号。
(3)双精度型(Double)
Double也用于保存浮点实数,但所保存数值的精确度比Single高,其取值范围是
±4.9E-324~±1.8E308,占8个字节,类型符是#号。Double是应用程序中存贮数
据的常用类型。
(4)字节型(Byte)
Byte用于存储二进制数,取值范围0~255,占1个字节。
(5)货币型(Currency)
Currency型用于存储定点实数或整数,可保留4位整数及15位小数,在所表示的
数后会自动增加@符号。
2、日期类型(Date)
Date型按8个字节的浮点数进行存储,表示日期的范围从100年1月1日到9999
年12月31日。这种数据在引用时一定要用#号前后括起来。如:#2004-02-24#。
3、逻辑类型(Boolean)
Boolean型只有两个常量:True和False。当逻辑数据转换为整型数据时,True转
换为-1,False转换为0。
4、字符类型(String)
String型存放字符型数据,String型数据必须用单引号或双引号前后括起来,占8
个字节,类型符是$号。
5、对象类型(Object)
对象数据类型用来表示应用程序中的对象,可用Set语句来指定一个被声明为
Object的变量,去引用应用程序中的任何实际对象。如:
SubForm_Click()
DimTempAsObject
SetTemp=Form1
EndSub
于是,Temp即为对象类型,表示Form1
6、变体类型(Variant)
Variant是一种特殊的数据类型,是所有未定义的变量的缺省数据类型,它对数据的
处理完全取决于程序上下文的需要,它可以包括数值型、日期型、字符型、对象型的数据,
此外,还可以包含四种特殊的数据:
①Empty:空,表示未确定的数据。
②Null:无效,表示这个数据不合法。
③Error:出错,指出过程中出现了一个错误条件。
④Nothing:无指向,表示数据还没有指向一个具体对象。
上述四种特殊数据,在我们进行数据库应用程序的开发中经常使用。如Error常用于程
序中,假设在程序中写入:OnErrorResumeNext语句,则当程序出现错误语句时,VB不
会中断程序的运行,继续执行后面的语句。
二、自定义类型
在VB中,用户也可以根据自己的需要自定义数据类型。自定义类型通过Type语句实
现,其形式为:
Type<自定义类型名>
<元素名>[(下标)]As<类型名>
……
<元素名>[(下标)]As<类型名>
EndType
说明:
(1)元素名:表示用户自定义的一个数据类型;
(2)下标:表示定义数组;
(3)类型名:标准类型。
例:定义一个关于高考考生信息的自定义类型。
TypeStud‘自定义高考考生信息类型
NomAsInteger‘定义考生编号为整型
NamAsString*20‘定义考生姓名为字符型
SexAsString*1‘定义考生性别为字符型
EndType
定义了类型之后,便可在变量声明中使用该类型。如:
DimStudentasStud
在程序中使用变量的元素的形式为:
<变量名>.<元素名>
如:Student.Nom
注意:
(1)自定义类型必须在标准模块(.BAS)中定义,默认为Public。
(2)自定义类型中的元素类型可以是字符串,但必须是定长字符串。
(3)请注意将自定义类型与变量区分开。
§3.3常量与变量
【教学目标】
学习VB中常量及变量的基本概念和定义方法。
【教学要求】
了解:常量及变量的基本概念。
理解:为何要使用常量及变量。
掌握:常量、变量的定义及使用方法。
【本节重点】
变量的作用域。
系统常量的表示方法。
一、常量与变量的命名规则
1、必须以字母或汉字开头,由字母、汉字、数字或下划线组成,长度不大于255。
2、不能使用VB中的保留字。
1、不区分大小写。
二、变量声明
1、使用Dim语句
语句格式:
Dim<变量名表>[As类型]
例如:
DimS_1,S_2,S_3Asstring
DimSSAsDate
2、用Static语句说明
语句格式:
Static<变量名>[As数据类型]
用Static语句说明的变量称为静态变量,即执行一个过程后,这种变量的值会保留,
下次再调用此过程时,该变量的值是上次保留的值。
3、用Public语句说明
语句格式:
Public<变量名>[As数据类型]
这种变量称为全局变量,可被一个工程中的各个模块引用。
4、隐式声明
VB允许对未经声明的变量直接使用,未经声明的变量在使用时可以视为被隐式声
明,所有隐式声明的变量都是Variant类型。
注意:数组在使用前必须给出声明。
三、常量
1、用户声明常量
语句格式:
Const<常量名>[as类型]=<表达式>
例:定义两个常量pi和s1。
Constpi=3.1416
Consts1asInteger=100
2、系统提供的常量
VB提供系统已定义的常量,这些常量位于对象库中,如:
PrivateSubCommand1_Click()
x=MsgBox("确定",vbOKCancel,"aaaa",10,100)
EndSub
在上述过程中,赋值语句中的vbOKCancel就是一个VB的系统常量。
§3.4运算符和表达式
【教学目标】
学会正确地书写VB的表达式,能够熟练地使用VB中的函数。
【教学要求】
了解:表达式、函数的概念。
理解:运算符、表达式、函数的分类。
掌握:运算符的使用;表达式的书写方法;常用内部函数的作用及使用方法。
【本节重点】
正确识别并使用运算符。
掌握表达式的书写规则。
常用内部函数的使用方法。
一、运算符
VB中的运算符可分为:算术运算符、字符串运算符、关系运算符和逻辑运算符四类。
1、算术运算符
∧(乘方)―(负号)*(乘)/(除)\(整除)Mod(同余)
+(加)―(减)
2、字符串运算符
+(合并运算)&(合并运算)
说明:+运算符两边数据的类型必须为字符型,否则出错。&运算符两边的数据允许
不是字符型,VB会在操作前自动将两边的数据先转换成字符型,然后进行合并运算。
3、关系运算符
<(小于)<=(小于等于)<>(不等)=(等于)>=(大于等于)
>(大于)Like(字符串匹配)Is(对象引用比较,用于两个变量引用比较)
说明:
(1)关系运算的结果为True或False,分别用“―1”、“0”表示。
(2)若两个操作数是数值型,按大小比较;若为字符型,按ASCII码(拼音)值进行
比较。
(3)Like用于字符串之间的匹配比较,如:"ABCDEF"like"*CD*"的值为true。
4、逻辑运算符
Not(非)And(与)Or(或)Xor(异或)Eqv(等价)Imp(蕴含)
逻辑运算符对数值进行运算,以数字的二进制值逐位进行逻辑运算。如:
10and7的运算是:1010and0111
结果为:0010,即十进制的2。
二、表达式
1、表达式的组成
表达式是由常量、变量、运算符、对象及圆括号按一定规则组成的式子。
2、表达式的书写规则
(1)常量、变量和函数是表达式的特例。
(2)“*”号不能省略,也不能用其它符号代替。
(3)按运算的优先顺序运算,同级由左向右,括号优先。
(4)在同一基准行用小写字母书写。
3、不同数据类型的转换
在算术运算中,若操作数具有不同的精度,则运算结果用精度高的数据类型。但Long
和Single运算后的数据类型为Double。
4、运算的优先级
VB表达式中的运算优先级依次为:算术运算、关系运算、逻辑运算。
在算术运算和逻辑运算中对每一个具体运算还存在优先级。具体如下:
(1)算术运算
①乘方最优先,优先级为:1
②负号优先级为:2
③乘法和除法优先级为:3
④整除优先级为:4
⑤取模优先级为:5
⑥加法和减法优先级为:6
(2)逻辑运算
①Not最优先,优先级为:1
②And优先级为:2
③Or和Xor优先级为:3
④Eqv优先级为:4
⑤Imp优先级为:5
注意:在VB表达式中()运算优先于一切。
三、常用的内部函数
VB中的内部函数,在编程中有不可替代的作用,必须认真学习和掌握。VB的内部函
数很多,我们仅介绍常用的内部函数。在下面的函数自变量中,N表示算术表达式,C表示
字符表达式,D表示日期表达式,每个函数后面标注的是其含义。
1、数学函数
(1)Abs(N)│N│
(2)Cos(N)cosx
(3)Exp(N)ex
(4)Log(N)lnx
(5)Rnd(N)
Rnd(N)函数生成(0,1)区间的均匀分布的随机数(伪随机)。若要生成真随机
数,使用Randomize语句,其语法格式为:
Randomize[number]
其中,number将Rnd函数的随机数生成器初始化。若省略之,则用系统计时器返
回的值做为number值。
(6)Sin(N)sinx
(7)Sgn(N)符号函数
(8)Sqr(N)N的平方根
2、转换函数
(1)Asc(C)求C中第一个字符的ASCII值
(2)Chr$(N)求ASCII值为N的字符
(3)Fix(N)取整
(4)Int(N)取不大于N的最大整数
(5)Lcase$(C)大写字母转换成小写字母
(6)Ucase(C)小写字母转换成大写字母
(7)Str$(N)将数值转换成字符串
(8)Val(C)将字符串转换成数值
(9)Cdate(D)将日期转换成字符
3、字符串函数
(1)InStr([N1,]C1,C2)
InStr([N1,]C1,C2)的功能是在C1中从N1位置起开始找C2,并返回C2在C1中
第一次出现的位置值,若没找到C2则返回数值0。若省略N1,则在C1中从头找C2。
(2)Left$(C,N)取出C左边的N个字符
Right$(C,N)取出C右边的N个字符
Mid$(C,N,K)取出C第N个字符开始的K个字符
(3)Len(C)求C的长度
(4)Trim(C)去掉C前后的空格
Ltrim(C)去掉C左面的空格
Rtrim(C)去掉C右面的空格
(5)Space$(N)产生N个空格
注意:在内部函数中,函数名中的$符号可以省略。如Space$可以写为Space。
4、日期函数
(1)Date生成系统日期
(2)Day(D)求日期(结果为N型)
(3)Month(D)求月份(结果为N型)
(4)Year(D)求年份(结果为N型)
(5)Now生成系统日期和时间
(6)Time生成系统时间
(7)DateAdd()增减日期函数
DateAdd()函数的语法形式为:DateAdd("要增减的日期形式",增减量,要增减
的日期变量)
例:DateAdd("ww",2,#2004-03-03#)
表示在指定的2003年3月3日的日期上加2周,结果为:#2004-03-17#
(8)DateDiff()计算日期相差函数
DateDiff()函数的语法形式为:DateDiff("要间隔的日期形式",日期1,日期2)
例:DateDiff("dd",#2004-03-03#,#2004-03-17#)
函数用2004年3月17日减2004年3月3日,结果为14。
DateDiff函数中"要间隔的日期形式"的符号与含义对照表如下:
日期形式Yyyyqmydwwwhns
含义年季月一年的天数日一周的日数星期时分秒
5、格式输出函数
格式化输出函数Format可以使数值、日期、字符串按指定的格式输出,此函数主要用
于文档输出中,其形式如下:
Format(表达式[,格式字符串])
说明:表达式是要格式化的数值、日期和字符串表达式,格式字符串要加引号""。
(1)数值格式化
①格式符“0”用于表示数字,若实际数值位数小于格式位数,则补“0”;
②格式符“#”用于表示数字,若实际数值位数小于格式位数,则不补“0”,此时按四
舍五入计算;
③在数值前可强行加“+”号、“-”号、“$”号,在数值中间可强行加小数点“.”、千
分位“,”;
④数值若按百分比输出,可在格式中加“%”;
⑤数值也可按指数格式输出。
例:对数值12345.657分别用以下格式输出:
数值表达式格式化字符串输出结果
12345.657"###,###,##0.00"12,345.66
12345.657"000000.0000"012345.6570
12345.657"######.####"12345.657
12345.657"$00000.00"$12345.66
12345.657"######.##%"1234565.7%
说明:
①Format能自动对数值型数据根据格式进行四舍五入。
②函数值的类型为字符型。
注意:在经济类应用程序的报表输出中,常用的格式化字符串为:"###,###,##0.00"。
此种格式化字符串的使用,可以使得输出的报表格式统一,并在报表的函数所定义列中按小
数点对齐,小数位不足,可自动补0。
(2)日期和时间格式化
①缺省格式为yy-mm-dd(年年-月月-日日)
②若使用中文日期,在yyyy、mm、dd后分别加“年”、“月”、“日”
例:将当前日期与时间赋值给变量rq,并按以下格式打印输出:
rq=Now
PrintFormat(rq)
PrintFormat(rq,"yy-mm-dd")
PrintFormat(rq,"yyyy-mm-ddhh:mm:ss")
PrintFormat(rq,"yyyy年mm月dd日hh:mm:ss")
执行了以上输出语句后,在窗体上的输出的结果如下:
2004-2-2815:20:26
04-02-28
2004-02-2815:20:26
2004年02月28日15:20:26
(3)字符串格式化
①格式符“>”表示将字符强行大写,“<”表示将字符强行小写;
②格式符“@”表示实际字符位数小于格式位数,前后补空格;
③格式符“&”表示实际字符位数小于格式位数,前后不补空格;
例:给t变量中赋值字符串“abcd”,然后在窗体上用以下格式打印输出:
t="abcd"
PrintFormat(st,">")
t=UCase(st)
PrintFormat(st,"<")
PrintFormat(st,"@@@@@@@@")
PrintFormat(st,"&&&&&&&&")
执行了以上输出语句后,在窗体上打印输出的结果如下:
ABCD
Abcd
ABCD
ABCD
6、Shell函数
在VB中利用Shell函数可调用外部可执行程序,其格式如下:
Shell(命令字符串[,窗口类型])
说明:
(1)命令字符串:用于指示要执行可执行程序的路径及文件名。
(2)窗口类型:表示执行应用程序窗口的大小,一般取“1”。
例如,如下语句执行的结果是显示计算器界面:
I=Shell("C:\windows\calc.exe")
注意:Shell函数是一个很重要的函数,它可以使我们在所开发的应用程序中嵌入其他
的应用软件,完成各种复杂的综合应用。
7、DoEvents函数
DoEvents是一个较为特殊的函数,它既可以作为函数,又可以作为VB的语句,其格
式如下:
[窗体号=]DoEvents[()]
DoEventsd主要功能是:当应用程序在执行循环的过程中进行其他操作。
注意:DoEvents函数不能滥用,当应用程序的某些关键部分需要独占计算机时间,以
防止被键盘、鼠标或其他程序中断的情况下,不得使用DoEvents函数。
§3.5基本语句
【教学目标】
通过运用VB的基本语句编制中小型程序,来培养和训练学习者的编程能力。
【教学要求】
了解:表达式、函数的概念。
理解:控制程序流程的三种程序结构的程序执行过程。
掌握:赋值语句、条件语句、循环语句的使用;两个交互性函数的使用方法。
【本节重点】
两个交互性函数的使用方法。
条件语句的嵌套。
循环语句的不同使用格式及区别;循环嵌套的使用及注意事。
一、赋值语句
格式:
<变量名>=<表达式>
功能:
先计算表达式的值,然后将表达式的值赋给赋值号左边的变量。
二、与用户交互的函数和过程
VB与用户交互可以通过InputBox函数、MsgBox函数和MsgBox过程进行。
1、InputBox函数
格式:
InputBox(提示信息[,标题][,缺省][,X坐标位置][,Y坐标位置])
说明:
(1)提示信息:不可省略;
(2)标题:若省略标题,系统将自动以应用程序名代之;
(3)缺省:“确省”表示输入过程中的默认值。即若用户没有在输入对话框中输入任何
值,则以该确省值作为输入的内容;
X坐标位置,Y坐标位置用于确定InputBox对话框在计算机屏幕上的位置。
注意:
①各参数次序必须一一对应,若省略某项,也要使用“,”占位。
②函数返回字符型数据。
③若程序运行时按下“取消”按钮,则函数无值。
例:在InputBox函数的使用中设置输入的默认值为“男”。
DimTSAsString
TS=InputBox("请输入性别",,"男",100,100)
2、MsgBox函数
格式:
MsgBox(提示[,按钮][,标题])
3、MsgBox过程
格式:
MsgBox提示[,按钮][,标题]
(1)MsgBox函数和MsgBox过程中语法格式项说明
其中函数和过程中的“提示信息”不可省略;若省略标题,系统将自动以应用程序
名代之。
其中函数和过程中“按钮”项的值用VB系统常数表示,常用的有:
0-VbOkOnly(只显示“确定”按钮)
1-VbOkCancel(显示“确定”、“取消”按钮)
2-VbAboutRetryIgnore(显示“终止”、“重试”、“忽略”按钮)
3-VbYesNoCancel(显示“是”、“否”、“取消”按钮)
4-VbYesNo(显示“是”、“否”按钮)
5-VbRetryIgnore(显示“重试”、“忽略”按钮)
(2)MsgBox函数和MsgBox返回值说明
由于MsgBox函数和MsgBox过程均具有人机交互的功能,因此两者均有返回值,
返回值可以用VB系统常数及其数值代码表示。返回的VB系统常数及其数值代码表如
下:
1-VbOk(表示用户按“确定”按钮)
2-VbCancel(表示用户按“取消”按钮)
3-VbAbout(表示用户按“终止”按钮)
4-VbRetry(表示用户按“重试”按钮)
5-VbIgnore(表示用户按“忽略”按钮)
6-VbYes(表示用户按“是”按钮)
7-VbNo(表示用户按“否”按钮)
MsgBox函数和MsgBox过程是VB中十分重要的对话框,两者的功能和对话框界
面都相同,只是在书写格式和编制判断程序时有所区别。
例:编制一个输入密码程序。人机界面是一个窗体,命令按钮Command1表示输
入密码“确认”功能。设计要求是:设用户的操作密码是:ABCD,当用户三次输入错
误,显示警告信息,并退出程序。
PrivateSubCommand1_Click()
Dimi,jAsInteger
DimmmAsString
mm=InputBox("请输入密码",,,2000,2000)
j=1
DoWhilej<=2
IfUCase(mm)<>"ABCD"Then
i=MsgBox("输入错误!是否重新输入?",VbYesNoCancel,"输入密码")
Ifi<>6Then
End
Else
mm=InputBox("请输入密码",,,2000,2000)
j=j+1
EndIf
Else
MsgBox"输入正确"
End
EndIf
Loop
MsgBox"非法操作者!!!",48
EndSub
三、选择结构
1、If—Then语句
(1)形式1:
If<条件>Then
<语句组>
EndIf
(2)形式2:
If<条件>Then<语句>
说明:
If—Then语句中的“条件”一般是逻辑表达式或关系表达式,如果是数值表达式,当
表达式值非零时为True。
例:用If—Then语句判断x和y变量值的大小,若x的值小于y,则将两变量中的值
互换。下面用If—Then语句的“形式1”和“形式2”分别编制判断和互换的程序语句:
形式1:形式2:
Ifx<ythenIfx<ythent=x:x=y:y=t
t=x:x=y:y=t
Endif
2、If—Then—Else语句
形式1:
If<条件>Then
<语句组1>
Else
<语句组2>
EndIf
形式2:
If<条件>Then<语句1>Else<语句2>
例:编程输入a,b,c的值,求一元二次方程ax2+bx+c=0的解。
PrivateSubCommand1_Click()
Dima,b,c,d,x1,x2AsSingle
a=InputBox("输入a的值",,,1000,1000)
b=InputBox("输入b的值",,,1000,1000)
c=InputBox("输入c的值",,,1000,1000)
d=b*b-4*a*c
Ifd>0Then
x1=(-b+Sqr(d))/2/a
x2=(-b-Sqr(d))/2/a
Print"x1=";x1,"x2=";x2
Else
MsgBox"输入有错",,2
EndIf
EndSub
3、If—Then—ElseIf语句
语句形式:
If<条件1>Then
<语句组1>
ElseIf<条件2>Then
<语句组2>
ElseIf<条件3>Then
<语句组3>
……
[Else
语句组n+1]
Endif
例:设已在strC中存入了一个字符,编程判断该字符是英文字母、数字、其它,并显
示结果。
IfstrC>="a"andstrC<="z"orstrC>="A"andstrC<="Z"Then
PrintstrC+"是英文字母"
ElseIfstrC>="0"andstrC<="9"Then
PrintstrC+"是数字
Else
PrintstrC+"是其它字符"
Endif
4、If语句的嵌套
例:编程比较三个变量x,y,z的大小,并按从小到大的顺序排列,结果仍存放在x,
y,z变量中。
Ifx>yThen
t=x:x=y:y=t
Ifx>zThen
t=x:x=z:z=t
EndIf
Ify>zThen
t=y:y=z:z=t
EndIf
Else
Ifx>zThen
t=x:x=z:z=t
EndIf
Ify>zThen
t=y:y=z:z=t
EndIf
EndIf
5、SelectCase语句
语句形式:
SelectCase<变量或表达式>
Case表达式列表1
<语句组1>
Case表达式列表2
<语句组2>
……
Case表达式列表n
<语句组n>
[CaseElse
语句组n+1]
EndSelect
例:编程判断strC中字符的类型。
SelectCasestrC
Case"a"to"z","A"to"Z"
PrintstrC+"是英文字母"
Case"0"to"9"
PrintstrC+"是数字
CaseElse
PrintstrC+"是其它字符"
EndSelect
6、条件函数
(1)IIf函数
形式:
IIf(<条件表达式>,<表达式为真>,<表达式为假>)
例:编程将x,y中值较大者的值赋给z。
z=IIf(x>y,x,y)
(2)Choose函数
形式:
Choose(<字符类型变量>,<值为1的返回值>,<值为2的返回值>,……)
例:假设变量Nop中存放了1、2、3、4中的某一个值,编程将变量Nop中的值转换成
算术四则运算符,其中1转换为+;2转换为-;3转换为×;4转换为÷,并将转换结果
存放到OP变量中。
Op=Choose(Nop,"+","-","×","÷")
四、循环结构
1、For—Next语句
语句形式:
For<循环变量>=<初值>To<终值>[Step步长]
<语句组1>
[exitfor]
<语句组2>
Next[循环变量]
注意:若缺省“Step步长”选项,系统默认步长为1。
例:编程计算1到100中奇数之和。
Dimi,sAsInteger
s=0
Fori=1To100Step2
s=s+i
Nexti
Prints
例:编程将ASCII码制成表格在图形控件Picture1中输出,每行打印7个字符。
PrivateSubPicture1_Click()
Dimasc,IAsInteger
Picture1.PrintTab(30);"ASCII码对照表"
Picture1.Print
Forasc=32To126
Picture1.PrintTab(10*I+2);Chr(asc);"=";asc;
I=I+1
IfI=7Then
I=0
Picture1.Print
EndIf
Next
EndSub
2、Do-Loop语句
语句形式:
DoWhile<循环条件>
<语句组1>
[exitdo]
<语句组2>
Loop
Do-Loop循环语句在执行时先判断循环条件,若循环条件为真,执行循环体内的语
句,否则终止循环。
例1:编程计算自然对数e的近似值,要求计算的误差小于0.000001,计算自然对数e
的公式为:e=1+1/1!+1/2!+1/3!+1/4!+…+1/n!+…。
PrivateSubCommand1_Click()
Dimi,nAsInteger
Dime,sAsDouble
s=1
e=1
DoWhiles>0.000001
i=i+1
s=s/i
e=e+s
Loop
Printe
EndSub
例2:编程用转辗相除法求两个正整数m,n的最大公约数和最小公倍数。求两个正整
数m,n的最大公约和最小公倍数的算法如下:
①求两个正整数m,n的最大公约数算法:
第一步:对已知的m和n,先使m>n.;
第二步:m除以n,得余数r;
第三步:若r=0,则n为所求的最大公约数,计算结束;否则将n的值赋值给m,将r
的值赋值给n,然后重复执行第二步,直至r=0。
②求两个正整数m,n的最小公倍数算法:
当取得m和n的最大公约数后,将m和n相乘再除以最大公约数就可得到m和n
的最小公倍数。
求两个正整数m,n的最大公约数和最小公倍数的源程序如下:
PrivateSubCommand1_Click()
Dimm,n,p,mnAsInteger
m=Val(Text1)
n=Val(Text2)
Ifm<=0Orn<=0ThenEnd
Ifm<nThent=m:m=n:n=t
DoWhile(n<>0)
r=mModn
m=n
n=r
Loop
Print"最大公约为";n
Print"最小公倍为";m*n/n
EndSub
在循环结构中,VB还有Do-Until等循环语句,由于语句的功能与上述两种循环语句
基本相同,不再赘述,感兴趣的同学可自学。
3、循环的嵌套
在一个循环体内又包含一个完整的循环结构称为循环的嵌套。循环的嵌套是编程中常用
技术,是每一个计算机程序设计员必须掌握的技术。计算机语言中,循环可以并列,可以嵌
套,但不能相交。
例1:古代数学中有一个“百文买百鸡”的问题,题目是:“鸡翁一值三文,鸡母一值
二文,鸡雏三值一文,问:百文买百鸡,各买几何?”。用现代数学方法来考虑这一问题,
可以发现这是一个简单的三元一次方程组的求解问题,方程组的数学公式为:
设公鸡买X只,母鸡买Y只,小鸡买Z只,根据已知条件可列出以下方程组:
X+Y+Z=100其中X的取值范围:1-33;Y的取值范围:1-50;
3X+2Y+Z/3=100其中Z的取值范围:1-99。
由于方程组中有三个未知量,而方程只有两个,因此方程为多解。解该方程的程序如下:
PrivateSubCommand1_Click()
DimX,Y,ZAsInteger
ForX=1To33
ForY=1To50
ForZ=1To99
If3*X+2*Y+Z/2=100AndX+Y+Z=100Then
PrintX,Y,Z
EndIf
Next
EndSub
例2:用循环语句编制一个在图形控件Picture1中打印“九九乘法表”的程序。
PrivateSubPicture1_Click()
DimssAsString
Picture1.PrintTab(40);"九九乘法表"
Picture1.Print
Fori=1To9
Forj=1Toi
ss=j&"X"&i&"="&i*j
Picture1.PrintTab(j*8);ss;
Next
Picture1.Print
Picture1.Print
Next
EndSub
五、其它辅助控制语句
1、GoTo语句
语句格式:
GoTo<行号|标号>
GoTo语句的作用是无条件地转移到行号或标号指定的语句行。
注意:在VB程序设计中要尽量少用或不用GoTo语句,以保证所编程序的结构化。
2、End语句
End语句用于结束一个程序的运行,返回Windows。在一个应用程序中,逻辑上只允许
有一个End语句。
3、With_EndWith语句
语句格式:
With<对象>
<语句组>
EndWith
With_EndWith语句用于在不重复指出对象名称的情况下,对某对象执行一系列的语
句。
例:对照下面两个过程,就可以认识到With_EndWith语句的作用:
PrivateSubCommand1_Click()PrivateSubCommand1_Click()
WithLabel1Label1.Height=2000
.Height=2000Label1.Width=2000
.Width=2000Label1.FontSize=24
.FontSize=24Label1.Caption="标签"
.Caption="标签"EndSub
EndWith
EndSub
§3.6数组
数组是按一定顺序排列,具有相同类型的变量的集合。VB中将数组分为静态数组和动
态数组,静态数组在声明时必须指明数组的维数和变量的个数;动态数组在声明时仅定义数
组的名称和类型,然后在执行程序的过程中,根据实际需要再用ReDim语句定义数组的维
数及变量的个数,而且允许使用简单变量来进行数组中变量个数的定义。
数组的使用在管理信息系统软件的程序设计中有着不可替代的作用,离开数组的使用,
某些程序的编制将会变得非常麻烦,甚至导致程序编制的失败,因此数组是程序设计人员必
须熟悉和掌握的必备知识。
【教学要求】
了解:数组的概念。
理解:静态数组和动态数组的区别;控件数组的作用。
掌握:数组的定义及使用方法;控件数组的应用。
【本节重点】
动态数组的应用。
控件数组的应用。
【本节难点】
动态数组的应用。
一、静态数组及声明
1、一维数组
一维数组的定义如下:
Dim<数组名>([下界To]上界)[As类型]
若缺省下界,系统默认为0。
例:Dimnum(1To50)AsInteger
2、多维数组
VB中数组的维数允许最多可达60维。多维数组的定义格式如下:
Dim<数组名>([下界1To]上界1,[下界2To]上界2……)[As类型]
例:DimA(12,50),C(10)AsDouble
二、动态数组
动态数组在声明时只定义数组名或数组名及类型,不指定大小,在执行程序的过程中,
再根据需要用Redim语句重新定义数组的大小。重新定义动态数组的语句格式如下:
Redim<数组名>(下标1[,下标2……])
注意:
(1)Redim语句中的下标可以是已被赋值的变量。
(2)在过程中可多次使用Redim来改变数组的大小和维数。
(3)每次使用Redim语句都会使原数组中的数据丢失,如需要保留原数组数据,可用
Preserve参数来保留,使用该参数只能改变最后一维的大小。
例:在程序运行时由操作者指定一个一维数组的变量个数,然后由计算机自动产生一组
随机数存放到一维数组中,并将此组随机数在窗体上打印出来。完成此项工作的源程序如下:
Dimx()AsDouble
PrivateSubForm_Click()
W=InputBox("请问需要产生多少个随机数?",,,100,100)
W=Val(W)
ReDimx(W)
Fori=1ToW
x(i)=Rnd
Printx(i);"";
Next
EndSub
注意:动态数组主要用于编程时尚不能确定数组中变量的个数,而只能在程序执行过程
中根据统计或外部提供的信息才能确定数组中变量个数的情况。
三、数组的基本操作
1、用循环语句为数组元素赋初值
例:使用For-Next语句为一维数组赋初值0。
PrivateSubForm_Load()
Dima(10)AsInteger
Fori=0To10
a(i)=0
Next
EndSub
2、使用Array函数给数组赋值
例:给a数组赋值5个奇数;给b数组赋值3个英文字母。
DimaAsVariant,bAsVariant,I%
a=Array(1,3,5,7,9)
b=Array("x","y","z")
注意:
(1)利用Array函数对数组各元素赋值,声明的数组是可调数组,并且其类型只能是
Variant。
(2)数组的下界为0,上界由函数括号中的参数个数决定。
四、数组的应用举例
例1、排序:令计算机用随机函数自动生成20个10-100之间的整数,将其按由
小到大的顺序排列,并将这20个随机数打印出来。
DimX(20)AsInteger
Dimi,j,kAsInteger
PrivateSubForm_Load()
Randomize
Fori=1To20
X(i)=Rnd*90+10
Next
EndSub
PrivateSubForm_Click()
Fori=1To19
Forj=i+1To20
IfX(i)>X(j)Then
k=X(i):X(i)=X(j):X(j)=k
EndIf
Next
PrintX(I);
Next
EndSub
例2、编程实现:当用户由键盘输入一串英文字母到文本框Text1中后,令计算机自
动统计出Text1中各种英文字母出现的次数(不区分大小写),并将统计结果打印出来。
PrivateSubCommand1_Click()
DimssAsString
Dima(1To26)AsInteger,i,kAsInteger
k=Len(Text1.Text)
Fori=1Tok
ss=UCase(Mid(Text1.Text,i,1))
Ifss>="A"Andss<="Z"Then
a(Asc(ss)-64)=a(Asc(ss)-64)+1
EndIf
Next
Fori=1To26
PrintChr(i+64)&"=";a(i);"";
IfiMod8=0ThenPicture1.Print
Next
EndSub
五、控件数组
1、控件数组的概念
控件数组是由一组相同类型的控件组成,它们共用一个控件名,并享用同样的事件过程。
系统自动赋予每个控件唯一下标索引(Index),Index从0开始,然后按自然数依次编号。
控件数组最多可有32767个元素。
2、建立控件数组的方法
建立控件数组的方法有以下两种:
(1)在设计时建立
在设计时建立控件数组的方法及其过程如下:
①在窗体上制作第一个控件,并设置其相关属性;
②选中该控件,对第一个控件进行复制;
③在窗体中粘贴控件,粘贴时在“创建一个控件数组吗?”对话框中选择“是”,系统
就会自动创建这个控件的控件数组;
④根据需要,可多次粘贴,以满足控件数量的需求。
⑤建立共享的事件过程。
例:编制一个狮子选大王的游戏程序。
图3.1
设有16头狮子,要从中选一个大王,选择的方法是:
第一步:首先将16头狮子编号并围成一圈;
第二步:确定一个间隔数,如3;
第三步:从16头狮子中任意选择一头狮子,作为起始;
第四步:从起始狮子开始绕狮子圈依次数3,将被数到3的狮子淘汰出局,取消作大王
的资格;
第五步:重复绕狮子圈依次数3,并淘汰被数到3的狮子,最后所剩的唯一一头狮子就
是大王。
例题界面设计:
在窗体中创建狮子画面的图形控件组:Image1(0)、Image1(1)、Image1(2)、…Image
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 校园食品安全宣传教育活动
- 努力奋斗规划
- 写给老师的感谢信模板集锦八篇
- 猝死患者的护理查房
- 节约用水演讲稿集锦10篇
- 猫教案集锦八篇
- 商场光棍节活动策划
- 小孩不笨观看心得10篇
- 小学德育工作总结
- 乒乓球比赛作文集合8篇
- 2024年中国电信广东公司招聘笔试参考题库含答案解析
- 2024年中国华电集团招聘笔试参考题库含答案解析
- 中国心血管病预防指南(2017)
- 空调维保投标方案(技术方案)
- 【教学创新大赛】《数字电子技术》教学创新成果报告
- 咖啡因提取的综合性实验教学
- GONE理论视角下宜华生活财务舞弊案例分析
- 初中语文默写竞赛方案
- 2023电力建设工程监理月报范本
- 汽车空调检测与维修-说课课件
- 氨水浓度密度对照表
评论
0/150
提交评论