编程基础.docx
《编程基础.docx》由会员分享,可在线阅读,更多相关《编程基础.docx(17页珍藏版)》请在冰豆网上搜索。
![编程基础.docx](https://file1.bdocx.com/fileroot1/2022-12/14/2e53610a-78bd-426f-93b9-d6bc31bf5d74/2e53610a-78bd-426f-93b9-d6bc31bf5d741.gif)
编程基础
在我们设计完用户界面后,我们将开始了编写指令代码的过程。
这是一个相对枯燥但却是必须的过程。
§1VisualBasic编程概述
一、事件驱动应用程序
简单地说就是当事件发生时程序才工作,否则程序将等待事件的发生。
在事件驱动程序中,用户的操作或系统事件执行一个事件过程,这样,程序执行的顺序就由哪一个事件的发生决定,由用户的操作决定。
就是用户管理,代码响应。
二、事件过程
用户界面对事件响应的三个部分是:
1.窗体
2.控件
3.菜单
编写程序代码的通常过程是:
1.确定哪一个对象(窗体,控件或菜单)做出反应——单击此对象选中它;
2.打开代码窗口——简单的方法是按F7键或者双击对象;
3.找到响应的事件;
代码窗口的Object列表框可以选择对象,旁边的Proc列表框可以选择对象的事件。
如果事件已经有了代码的话,那么在Proc列表框里这个事件名用黑体显示。
空的事件代码都由两行组成。
如:
PrivateSubForm_Load()
|
EndSub
4.编写程序代码。
三、变量
程序总是要做三件事:
1.输入数据;
2.处理数据;
3.输出数据。
在程序运行时,这些数据被储存在变量里,变量可理解为计算机内存条上的一个微观的东西。
一旦关机,变量就消失了。
变量在VisualBasic里有两种类型:
1.程序员建立的变量;
2.对象的属性往往也看成变量。
变量必须满足:
1.字母开头;
2.不超过40个字;
3.只包括字母,数字,下划线;
4.不是保留字。
创建变量的方法:
1.用Dim语句说明它;
2.可以省略声明语句而用变量声明字符生成确定类型的变量。
在程序执行时若要生成变量并指定数据类型,可加入下表所示的变量声明字符后缀。
符号
数据类型
举例
$
String
A$,messageText$
%
Integer
Counter%,var%
&
Long
Population&,colorValue%
!
Single
Distance!
#
Double
ExactDistance#
3.把一个值赋给一个名称,VisualBasic就把这个名称看成变量。
Dim语句的语法是:
DimVariableNameAsType
例如:
DimMyName
AsType部分可以省略,它涉及到我们将要讲的关于数据类型的问题。
Dim语句的作用是声明变量并分配存储空间。
赋值语句的语法是:
VariableName=Value或VariableName1=VariableName2
与数学中的等号意义不同,这里等号只表示把后者的值赋给前者,所以,A=A+1在VisualBasic里是合法的。
例如:
cmdExit.Caption=“Exit”(这是一个改变对象属性的例子)
四、数据类型
变量可以存放数字或字符串等东西,但是MyName变量并不需要存放数字,所以你可以限制存放的数据类型。
你可以规定MyName只能字符串。
VisualBasic提供了七种数据类型:
1.整型(Integer)
2字节整数,标识符(同上面的变量声明字符)为百分号(%),范围从-32768到32767,运算很快。
2.长整型(Long)
4字节整数,标识符为&,范围从-2147483648到2147483647,运算很快。
4.单精度型(Single)
4字节浮点数,标识符为!
,范围可达38位数字,前7位可靠,运算比整型和长整型慢。
5.双精度型(Double)
8字节浮点数,标识符为#,范围可达300多位,但是可靠的只有前16位数字。
5.字符串型(String)
标识符为$,在32位版本的VisualBasic4.0中,字符串可容纳高达200兆字节的内容。
6.货币型(Currency)
8字节定点数,标识符为@,小数点右边4位,左边15位。
7.日期型(Date)
用于存放日期,范围从#January1,100#到#December31,9999#,日期的格式取决于系统的设定,赋值方法是:
New=#January1,2000#。
8.字节型(Byte)
VisualBasic4.0新增加的数据类型,用于存放0到255的整数。
9.布尔型(Boolean)
只有True或False两个值。
10.变体型(Variant)
如果你不告诉VisualBasic你的变量是什么类型,VisualBasic就自动把它看成变体型。
变体型的意思就是它没有类型,或者是任何类型。
如果声明了Variant变量而未赋值,则其值为Empty。
例如:
DimMyNameAsString
事实上,语句DimMyName只是将MyName变量声明为变体类型罢了,因为变体类型是VisualBasic的缺省类型。
但是,我们使用数据类型的原因是什么呢?
1.使用最小的数据类型可节省内存;
2.程序员可以容易地找出每一变量所存放的数据类型;
3.可以防止数据类型存放错误引起的错误。
例如:
PrivateSubForm_Load()
DimMyNameAsString
MyName=“DongShan”
EndSub
●变换变量类型
有时需要将一种变量类型变成另一种变量类型,下表列出了进行变量类型转换的函数:
函数
说明
函数
说明
Cbool
将变元变成布尔值
CLng
将变元变成长整型值
Cbyte
将变元变成字节值
CSng
将变元变成单精度值
CCur
将变元变成货币型值
CStr
将变元变成字符串值
CDate
将变元变成日期值
Cvar
将变元变成变体值
CDbl
将变元变成双精度值
CVErr
将变元变成错误值
CInt
将变元变成整型值
例如要将如下的初始化变量:
DimAAsInteger
变成双精度值,可用下列函数:
B=CDbl(A)
●用户自定义的数据类型------记录
保存多个相同或不同类型数值的结构称为记录(record)。
在VISUALBASIC中定义记录,用Type语句,其语法如下:
TypevarType
Variable1AsvarType
Variable2AsvarType
…
VariablenAsvarType
EndType
例如定义一个名为CheckRecord的记录:
TypeCheckRecord
CheckNumberasInteger
CheckDateasDate
CheckAmountasSingle
EndType
CheckRecord结构可以像普通变量类型一样使用。
要定义这个类型的变量,使用如下语句:
Dimcheck1AsCheckRecord
要对结构的各个字段访问,可使用如下语句:
check1.CheckNumber=123
check1.CheckDate=#08/14/1996#
check1.CheckAmount=240.00
●强制的变量声明
VisualBasic并不要求变量声明,但对于编写大型应用程序时,变量声明的确很有好处。
因此VisualBasic提供强制声明的方法,只要在窗体或模块的声明部分加上一条语句:
OptionExplicit
这个语句使编译器检查每个变量的声明,如果要用的变量没有声明,则发出一个错误消息!
●数组
单个变量只能存放单个实体,而数组可以存放一组相关的数据。
像变量一样,数组有名称,存放在数组中的数值通过一个索引来访问。
数组的定义必须用Dim语句声明,如下:
DimNames(9)AsString'也可以不指定数据类型
Names是保存了10个元素的数组,Names(0)是第一个元素,Names(9)是最后一个元素。
数组元素的赋值如下:
Names(0)="John"
Names
(1)="Tom"
…
Names(9)="Xionghui"
数组的第一个元素的索引可以不是0,可以在Dim语句中指定下限:
DimNames(1To16)
DimNames(5To16)
●动态数组
有时可能不知道需要多大的数组,这时可以生成动态数组,其长度可以在运行程序时改变。
定义动态数组,和平常一样用Dim语句(或Private和Public),但不要指定长度(或维数):
DimDynArray()
后面等能确定维数的时候,再用ReDim语句重新确定实际长度(或维数):
ReDimDynArray(UserCount)
ReDim语句只能出现在过程之中,它是可执行语句。
但每次执行ReDim语句,数组中原先存放的所有当前值会消失。
但有时可能想改变数组的长度,而不损失原有的数据,幸好VisualBasic提供了Preserve关键字,它就能作到!
例如下面语句将数组加大一个元素而不改变原有数据:
ReDimPreserveDynArray(Ubound(DynArray)+1)
五、变量的使用范围
VisualBasic的变量有三种使用范围。
1.局部变量;
2.模块级变量,也可以叫做窗体级变量,因为窗体和模块是同级的;
3.全局变量。
局部变量只存在于说明它的过程里,为说明一个局部变量,应在一个事件过程中说明。
模块级变量可存在于这个窗体或模块中,可以被所有窗体内的事件过程所引用和改变,说明模块级变量的方法是:
1.按F7键打开代码窗口;
2.在Object列表框中选择(general);
3.在Proc列表框里选择(declarations);
4.用Dim语句说明。
全局变量从程序开始时存在至程序结束,不过全局变量的错误也许会导致致命的错误,你不得不读遍程序来寻找到底在说明地方改变了全局变量。
创建全局变量的方法是:
1.从Insert菜单里选Module项,这个命令为一个BAS模块文件显示代码窗口;
2.在Object列表框中选择(general);
3.在Proc列表框中选择(declarations);
4.用Public语句说明全局变量。
六、算术,逻辑,比较运算符
1.算术运算
尽管一台计算机看来很高科技,但它在算术运算方面并不比一个计算器强多少。
运算符
运算
运算符
运算
+
加(也是字符串拼接)
\
整数除
-
减(也是取负值)
Mod
取余数
*
乘
^
乘方
/
浮点数除
&
字符串拼接
2.逻辑运算
逻辑运算是对True和False进行操作的运算。
VisualBasic将True的值看成-1,将False的值看成0。
运算符
使用
意义
And
变量1And变量2
两个量均为True,才返回True
Or
变量1Or变量2
只要有一个量为True,返回值就为True
Xor
变量1Xor变量2
两个量一个为True,一个为False才返回True
Not
变量1Not变量2
简单地把True变为False,把False变为True
3.比较运算
比较运算是比较两个数或字符串的大小。
运算符
意义
运算符
意义
<
小于
>=
大于等于
<=
小于等于
=
等于
>
大于
<>
不等于
有时候,复杂的运算会把我们搞晕,良好的习惯是加括号。
如:
x=(5*(8+9))^2,则计算机先处理(8+9),再处理(5*(8+9)),最后才是乘方。
再如:
x=(5*6)/2,这个括号加得似乎没什么意义,但它使我们清晰地知道是从哪儿开始运算的。
七、字符串操作
有时程序需要对字符串进行操作,比如从一个文件的完整路径名中找出文件的名称。
下面介绍几个常用的函数。
1.Len函数
返回字符串的长度。
如Length=Len(“string”),则Length=6。
2.LCase函数,UCase函数
LCase函数把字符串变为小写字母。
UCase函数把字符串变为大写字母。
如:
x=LCase(“DONGSHAN”)
x=UCase(“visualBasic”)
3.Left函数,Right函数
语法是:
Left(VariableName,N)
Right(VariableName,N)
Left函数从字符串的左边提出N个字符。
Right函数从字符串的右边提出N个字符。
4.Mid函数
语法是:
x=Mid(VariableName,n,m)
Mid函数从VariableName字符串的第n个字符开始取出m个字符。
5.Instr函数
语法是:
Instr(VariableName1,VariableName2)
Instr函数从VariableName1里找出VariableName2的位置。
如:
x=Instr(“ABCD”,”CD”),此时x=3。
如果计算机没找到要找的字符串,则这个函数返回0。
6.LTrim函数,RTrim函数,Trim函数
LTrim函数将去掉字符串前的空格。
RTrim函数将去掉字符串后的空格。
Trim函数将去掉字符串前后的空格。
如:
x=RTrim(“John“),此时x=“John”。
7.Val函数
语法是:
x=Val(VariableName)
这个函数将字符串里的数字字符串转化为数字。
如:
Y=Val(“123”),则Y=123。
当VisualBasic发现下一个字符不是数字时就停止继续转化。
8.Str函数
与Val函数相反,Str函数将数字转化为字符串。
语法是:
x=Str(VariableName)
八、常量及注释
1.使用常量
如果我们编一个程序从每笔收入中拿出40%用于饭卡的消耗,则在程序中我们会总是用到0.4这个数字。
这时粮食涨价了,我们不得不把0.4全都改成0.5,这就显得非常麻烦。
我们本可以定义并使用一个常量为0.4,在涨价时把它小小调整一下就可以了。
常量命名的要求与变量一样。
常量的使用范围也与变量一样,分为:
局部常量(在过程里用Const说明)、模块级常量(在窗体,模块的声明区用Const说明)、全局常量(在模块的声明区用PublicConst说明)
2.使用注释
用“‘“注释。
如:
‘ThisSubisusedtogetWindowsversion
撇号右边的东西VisualBasic通常用绿色的字来显示,而且VisualBasic将忽略注释的东西。
在VisualBasic所附的示例程序里使用了大量的注释,这样使其他人(也包括自己)能更好地读懂程序,所以使用注释是一个好习惯。
注释的忽略性也有一些小用处,如:
x=(3.5^2-4)*(5+6.73*7\2)-10.89
现在你需要测试这一语句是否是必要的,于是你把它删除,再运行看是否能得出正确的答案,如果它是不必要的,那就很顺利,如果它是必要的,你就不得不痛苦地再输入一遍而且还有输错的可能。
现在你可以选择把它注释掉,这样程序运行将忽略它的存在,也可达到上面测试的目的。
§2VisualBasic的语句
一、条件选择语句
人们面临选择的时候精神会变得脆弱,这就是为什么我们总是轻信偷看来的答案。
因此,选择对于人类来说是一件复杂的事情,而对于计算机来说,则非常简单。
它头脑简单,因而永远不会发出哈姆雷特式的疑问——“是生,还是死?
”
1.条件式
条件式必然代表一个值,是真(True)或者是假(False)计算机可以检测出这个值以做出相应的行动。
下面就是判断的例子,其中加下划线的部分就是指条件式。
IfLove=TrueThen...
与之相同的简略的形式是:
IfLoveThen...
而IfLove=FalseThen...与IfNotLoveThen...的意义是相同的。
条件式中可加入逻辑运算符,如:
Ifx<20Andx>15Then表示当15Ifx<15Orx>20Then表示当x<15或x>20时程序将做什么。
2.If-Then语句
语法是:
IfConditionThenInstruction
例如:
Ifn>25ThentxtABC.Text=“ABC”
3.If-Then-EndIf语句
IfConditionThen
Instruction1
Instruction2
EndIf
这种结构可指示计算机执行一串语句。
4.If-Then-Else语句
IfConditionThen
Instructions1
Else
Instructions2
EndIf
这种结构指示计算机在条件不成立时应该做的事,这样保证了计算机至少执行一些语句。
5.If-Then-ElseIf语句
IfCondition1Then
Instructions1
ElseIfCondition2Then
Instructions2
ElseIfCondition3Then
Instructions3
Else
Instructions4
EndIf
类似这样的完整的语句可做出多次判断,又保证计算机至少执行一些代码。
6.Select-Case语句
被选择的值为许多定值时,这个语句就更有用一些。
SelectCaseVariableName
CaseValue1
Instructions1
CaseValue2
Instructions2
CaseValue3
Instructions3
EndSelect
Select-Case语句的不足是它需要确切的值。
7.嵌套结构
我们可以把许多各式各样的条件语句嵌套在一起,而且这种嵌套在理论上没有限制。
但事实上嵌套使用得越少,代码就越容易被理解。
在嵌套时最好使用便于观察的缩排的格式。
如:
SelectCaseGrade
Case"95"
IfClass="31"Then
Dorm="1106-1108"
ElseIfClass="33"Then
Dorm="1104-1105"
EndIf
EndSelect
二、循环语句
计算机擅长反复地做一件事,循环语句将发挥它的这种优势。
1.Do-Loop循环
Do-Loop循环基本上是一个死循环,所以需要在循环时判断一些条件。
(1)DoWhile循环当Condition条件为真时执行循环
DoWhileCondition
Instructions
Loop
While也可以放在Loop语句上。
(2)Do-LoopWhile循环
Do
Instructions
LoopWhileCondition
这两种循环的不同之处是:
DoWhile循环先判断条件,所以,DoWhile循环可能一次都不执行。
DoLoopWhile循环先执行指令,再判断循环条件。
所以DoLoopWhile循环至少执行一次指令。
但它们都是当一定条件为真时的循环。
(3)DoUntil循环当一定条件为假时执行循环
DoUntilCondition
Instructions
Loop
DoUntil先判断条件,所以循环可能一次都不执行,它是当一定条件为假时的循环。
DoUntil等同于:
DoWhileNotCondition
Instructions
Loop
(4)DoLoopUntil循环
Do
Instructions
LoopUntilCondition
DoLoopUntil先执行指令再判断循环条件,所以指令至少被执行一次。
DoLoopUntil是当一定条件为假时的循环。
2.计数的循环For-Next
(1)For-Next循环必须有一个控制变量,这个控制变量一般为整型。
语法是:
ForCounter=StartToEnd
Instructions
NextCounter
这里的Counter就是控制变量。
如果想运行5次,可用下面的循环:
Fori=1To5
Instructions
Nexti
这时,每循环一次,i的值就加1。
(2)向前向后计数
ForCounter=StartToEndStepIncrement
Instructions
NextCounter
Increment表明每次循环控制变量所加的值。
如下面代码也可循环5次:
Fori=5To1Step-1
Instructions
Nexti
只有当Counter<=End时循环才执行,当Counter>End的时候循环就不执行了。
所以
Fori=1To10Step7
Instructions
Nexti
循环将执行两次,一次是当i=1时,一次是当i=8时。
最好不要在循环内改变控制变量的值,这样往往会导致逻辑上的错误。
3.与条件语句一样,循环语句也可以嵌套。
如:
DoWhileCondition
Fori=1To5
Instructions
Nexti
Loop
循环总是先从内部开始的。
比较:
Fori=1To4Fori=1To4
Forj=1To5Forj=1To5
NextjNexti
NextiNextj
是允许的这种For-Next的缠绕是不允许的
4.从循环中快速退出
通过使用命令ExitDo和ExitFor,我们可以在循环未结束前跳出循环。
但我们应该保证所需的动作完成后再跳出来,否则也许会遇到新的错误。
而且不要试图用Goto语句从循环外跳入循环。
下面的代码可以检测出3至20之间的质数。
其中使用了循环的嵌套及条件语句,并且当发现i不是质数时立即用ExitFor转向对下一个数的检测。
SubForm_Click()
Dimi,j,xAsInteger
Fori=3To20
x=False
Forj=2Toi-1
If(iModj)=0ThenExitFor
Ifj=i-1Thenx=True
Nex