第3章VB程序语句与控制结构
一个VB应用程序主要由用户界面和响应各事件的程序代码组成,程序代码是应用程序的核心。本章首先介绍程序代码设计的基础知识,再通过一些典型的例子,使大家逐步掌握编程的思路和技巧。VB虽然是面向对象的程序设计语言,但在代码设计中仍然支持结构化程序设计的三种基本结构,即顺序结构、选择结构和循环结构。本章将主要介绍数据的输入与输出、三种基本程序控制结构及语句。
3.1 数据的输入与输出
VB的输入/输出有多种形式,常用的输入方式有:使用键盘输入数据的函数InputBox 以及文本框等控件。常用的输出方式有: Print方法、MsgBox函数和过程以及图形框、文本框、标签等控件。有关控件的使用在其第六章中介绍,本节主要介绍InputBox函数、MsgBox函数与过程以及Print方法的使用。
3.1.1 InputBox函数
格式:InputBox(提示[,标题][,默认][,x坐标位置][,y坐标位置]) 功能:InputBox函数产生一个对话框,作为输入数据的界面,等待用户输入内容,当用户单击“确定”按钮或按回车键,函数返回输入的值,其值的类型为字符串(String)。
说明:
(1)“提示”:必选项。字符串表达式,在对话框中作为提示信息显示,可为汉字。若要多行显示,必须在每行行末加回车符Chr(13)和换行符Chr(10)符或VB符号常数vbCrLf。
(2)“标题”:可选项。字符串表达式,在对话框的标题区显示;若省略,默认为应用程序名。
(3)“默认”:可选项。字符串表达式,当输入对话框中无输入时,则该默认值作为输入的内容。
(4)“x坐标位置、y坐标位置”:可选项。整型表达式,确定对话框左上角相对于屏幕左上角的x、y坐标,单位为twip。该项省略时,对话框出现在屏幕水平、垂直中间的位置。
【注意】
各项参数次序必须一一对应,除了“提示”一项不能省略外,其余各项均可省略,处于中间的默认部分要用逗号占位符跳过。
例如,运行如下代码段,结果显示如图3-1所示,当单击“确定”按钮后,变量strName 的值为“李林”。
Dim strName as String*20
Title = "InputBox函数示例"
Msg1 = "请输入你的姓名"
StrName=InputBox(Msg1,Title,,200,200)
图3-1
3.1.2 Msgbox 函数与过程
MsgBox用于输出数据,它会在屏幕上显示一个对话框。在对话框中显示消息,等待用户单击按钮,并返回所选按钮的整数值。有函数和过程两种形式。
MsgBox函数格式:变量=MsgBox(提示[,按钮][,标题])
MsgBox过程格式: MsgBox 提示[,按钮][,标题]
说明:
(1)“提示”和“标题”的意义与InputBox函数中对应的参数相同。
(2)“按钮”:可选项。数值表达式,决定信息框按钮的数目和类型及出现在信息框上的图标类型。该数值表达式的值由4部分数值求和得到,它也可以用符号常量表示。其设置见表3.1。
(3)MsgBox函数返回所选按钮整数值的意义见表3.2
(4)MsgBox过程与MsgBox函数的区别是:MsgBox过程没有返回值,也不用圆括号“()”,所以常用于较简单的信息显示。其他用法与MsgBox函数相同。
表3.1“按钮”设置及意义
例如,在代码中加入以下语句,程序在运行中会打开图3-2所示的消息框。
Msg=”程序运行出错,继续吗?”
Title=”Msgbox演示程序”
Resp=MsgBox(Msg,308,Title)
If Resp=6 then
Print “你选择了是!”
Else
Print “你选择了否!”
End If
图3-2
程序中,MsgBox函数的参数308也可以写成符号常量的形式。因308=4+48+256,因而可将数字308写成vbYesNo+vbCritical+vbDefaultButton2的常量表达式的形式;同样,If 语句也可写成If Resp=vbYes then的形式。
【例3.1】输入圆的半径,求圆的面积。
(1)进入代码窗口,编辑程序代码如下:
Private Sub Form_Click()
Const Pi = 3.14 ?定义常量Pi
Dim r As Double, a as Double
r = InputBox("请输入圆的半径")
a = Pi * r * r
MsgBox("圆的面积为:" & a )
End Sub
(2)运行程序,输入半径为5,输入、输出对话框如图3-3所示。
图3-3
3.1.3 Print 方法
Print方法常用于在屏幕上输出信息。在本书第一章1.4.2节中已有介绍。
例如,执行如下代码:
a = 10:b=15
c$ = “欢迎使用Visual Basic”
Print “数值表达式a+b的值为:”;a+b
Print “字符串变量c$的值为:”;c$
运行结果如下:
“数值表达式a+b的值为: 25
“字符串变量c$的值为:欢迎使用Visual Basic
【例3.2】用Print方法输出图形。程序运行结果如图3-4所示。
Private Sub Form_Click()
For i=1 to 5
Print Tab(i);String(6-i,”*”)
Next I
End Sub
图3-4
【注意】
当Tab(i)中i的值小于当前位置的值时,重新定位在下一行的i列。
例如,执行以下语句:
Print tab(5);“abcdefg”;tab(8);“1234567”
运行结果如下:
abcdefg
1234567
3.1.4 打印机输出
Visual Basic除了可以在屏幕上输出以外,还可以在打印机上输出所需要的信息。
1.用PrintForm方法打印
格式:[窗体名.]PrintForm
功能:将指定窗体的信息传送到打印机进行打印。
说明:
(1)缺省窗体名,则打印当前窗体的信息。
(2)PrintForm方法不仅可以打印窗体上的文本,而且还可以打印出窗体上的任何可见的控件及图形。若窗体中包含图形,需要将输出窗体的AutoReDraw属性设置为True。
2.用Printer对象打印
格式:Printer.Print [表达式列表]
功能:把“表达式列表”中的内容输出到打印机上。
例如,下列语句行将字符串“欢迎使用Visual Basic”输出到Windows系统的缺省打印机上。
Printer.Print "欢迎使用Visual Basic"
Printer对象包含多种属性和方法用以控制打印的各种特性。Printer对象的属性不能在属性窗口中设置,只能在运行时通过程序代码来设置。下面介绍一些Printer对象常用的属性和方法。
(1)Page属性
Page属性用来保持和返回当前的页号,格式为:Printer.Page
每当打印完一页后,Page属性值自动增1。通常用Page属性打印页号,例如:Printer.Print "第"; Printer.Page; "页"
(2)NewPage方法
NewPage方法用以结束 Printer 对象中的当前页并前进到下一页,也就是实现换页操作,格式为:Printer.NewPage
执行NewPage方法可以强制使打印机前进到下一个打印页,并将打印位置重置到新页的左上角。调用 NewPage方法时,它将 Printer 对象的 Page 属性加 1。
(3)EndDoc 方法
EndDoc方法用来结束文件打印,格式为:Printer.EndDoc
执行EndDoc方法表明打印操作的结束,并向打印机管理程序发送最后一页的退出信号,并把Page属性重置为1。
(4)KillDoc方法
KillDoc方法用于立即终止当前打印作业,格式为:Printer.KillDoc
执行KillDoc方法将中断Print函数的执行,且清除打印缓冲区中的所有信息。
【例3.3】编写程序,实现连续打印“打印测试页1”和“打印测试页2”两张测试页。
Private Sub Form_Click()
Printer.Print "打印测试页";Printer.Page
Printer.NewPage
Printer.Print "打印测试页";Printer.Page
Printer.EndDoc
End Sub
单击窗体后,打印机打印两页,分别为“打印测试页1”和“打印测试页2”。
3.2 顺序结构
顺序结构就是程序的各语句按出现的先后次序执行。在Visual Basic中顺序结构的语句主要有赋值语句、输入语句、输出语句等。
3.2.1赋值语句
赋值语句是程序设计中最基本的语句,也是为变量和事件的属性赋值的最主要的方法。赋值语句的一般形式为:
变量名 = 表达式
或
对象名.属性 = 表达式
赋值语句的作用:先计算右边表达式的值,然后赋给左边的变量或控件属性。
例如:
sum= 100 ?把数值常量100赋给变量sum
aver=sum/10 ?将表达式sum/10的值赋给变量aver
Text1.Text = ”Hello!”?为文本框显示字符串
Text1.Text= ””?清除文本框的内容
【注意】
(1)表达式可以是任何类型的表达式,一般应与变量名的类型一致,当表达式的类型与变量的类型不一致时,作如下处理:
①若左边是字符型变量,将右边非字符型转换成左边的类型。
例如:
C$=123 ?数值常量123转换为字符型数据”123”赋给c
②若左边是数值型变量,右边表达式为数字字符串时,自动转换成数值类型赋给左边变量。若右边表达式有非数字字符或空串时,则出现类型不匹配错误。
例如:
m%=”100”…数字串”100”转换为数值100赋给变量m
m%=”a100”…出现类型不匹配的错误
m%=””…出现类型不匹配的错误
③若左边是逻辑型变量,右边是数值型表达式,非0转换为True,0转换为False;反之,将逻辑型表达式的值赋给数值型变量时,True转换为-1,False转换为0。
例如:
Dim f as Boolean
x%=10:y%=5
f=x+y … f中结果为True
f=x-10 … f中结果为False
n%=x>y …表达式x>y值为True,n中结果为-1
n%=x<=y …表达式x<=y值为False,n中结果为0
④不管表达式的值是什么类型,都可以直接赋给一个变体类型的变量。
(2)赋值号与关系运算符等于都用“=”表示,但系统不会产生混淆,会根据所处的位置自动判断是何种意义的符号。也就是在条件表达式中出现的是等号,否则是赋值号。
例如:赋值语句a=b与b=a是两个结果不相同的赋值语句,而在关系表达式中a=b与b=a 两种表示方法是等价的。
(3)赋值号左边只能是变量,不能是常量、符号常量、表达式。下列语句均为错误的赋值语句:
5 = x + y '左边是常量
vbcrlf=34 …左边是符号常量
x + y = 5 '左边是表达式
(4)不能在一条赋值语句中,同时给多个变量赋值。
例如:要对x,y,z三个变量值赋初值1,如下面语句书写语法上没错,但结果不正确:Dim x%, y%, z%
x = y = z = 1
执行该语句前x,y,z的变量值默认是0,Visual Basic在编译时,将右边两个“=”作为关系运算符处理,先进行y=z比较,结果为True(-1);接着True=1比较结果False(0);最后将False赋值给x,因此最后三个变量中的值仍为0。正确书写应分别使用三条赋值语句完成,写成:
x=1
y=1
z=1
或
x=1:y=1:z=1 …书写在同一行上
(5)如下赋值语句形式很常用:
sum=sum+x
表示将变量sum、x中的值相加后再赋给sum,与循环结构结合使用,起到累加作用。
n=n+1
表示将变量n的值加1后再赋给n,与循环结构结合使用,起到计数器的作用。
3.2.2 顺序结构举例
【例3.4】输入某位同学的三门课程的成绩,求它们的平均分。
程序代码如下:
Private Sub Form_Click()
Dim s1!,s2!,s3!,aver!
s1=InputBox(“输入第一门课程的成绩”)
s2=InputBox(“输入第二门课程的成绩”)
s3=InputBox(“输入第三门课程的成绩”)
aver=(s1+s2+s3)/3
print “aver=”;aver
End Sub
3.3选择结构
在人们所处理的问题中,常常需要根据某些给定的条件是否满足来决定所执行的操作。选择结构就是对给定条件进行判断,从而选择执行不同分支,一般可由条件语句来完成。VB 中的条件语句包括If语句和Select语句。
3.3.1 If条件语句
1.if…Then语句
语句格式:
(1)If < 表达式> Then <语句>
(2)If < 表达式> Then
<语句块>
End If
语句功能:当<表达式>的值为True或非零时,执行Then后面的语句(或语句块),否则不做任何操作,实现单分支选择结构。其流程如图3-5
图3-5
说明:
(1)表达式一般为关系表达式或逻辑表达式,也可为算术表达式。
例如:
If n=0 Then End
If 年龄<=35 and 职称=”讲师” Then n=n+1
If x-5 Then print “x<>5”
(2)格式(1)中的<语句>是单行语句,若要执行多条语句,语句间用冒号分隔,且必须在一行上。格式(2)中的<语句块>可以是一条或多条语句。
例如,语句If x>y Then x=x-5:y=y+5也可写成
If x>y Then
x=x-5
y=y+5
End If
【例3.5】输入x的值,并输出其绝对值。
程序代码如下:
Private Sub Command1_Click()
Dim x!
x = InputBox("请输入一个数")
If x<0 Then x = -x
Print "绝对值是:"; x
End Sub
2.If…Then…Else语句
语句格式:
(1)If < 表达式> Then <语句1> Else <语句2>
(2)If <表达式> Then
<语句块1>
Else
<语句块2>
End If
语句功能:当<表达式>的值为True或非零时,执行Then后面的语句(或语句块),否则执行Else后面的语句(或语句块),实现双分支选择结构。其流程如图3-6
图3-6
例如:输入一个整数,判断其奇偶性。
程序代码如下:
Private Sub Form_Click()
Dim x as integer
x=InputBox(“请输入一个整数”)
If x mod 2=0 Then Print x;”是偶数” Else Print x;”是奇数”
End Sub
3.If…Then…ElseIf语句
语句格式:
If <表达式1> Then
<语句块1>
ElseIf <表达式2> Then
<语句块2>
…
[Else
<语句块n+1>]
End If
语句功能:根据不同的表达式值确定执行哪个语句块,实现多分支选择结构。其流程如图3-7
图3-7
使用说明:先计算<表达式1>的值,若为真,则执行<语句块1>,并跳过其他分支语句执行If语句的后续语句(即End If后面的语句);若为假,则计算<表达式2>的值,依此类推,直到找到一个为真的条件时,才执行相应的语句块,然后执行End If后面的语句。格式中的Else是可选项,表示若无任何表达式值为真时,则执行<语句块n+1>;若无Else选项,且所有条件表达式值都不为真,则不执行If语句中的任何语句块。
【注意】
当If语句内有多个表达式的值为真时,只执行第一个为真的表达式后的语句块。
【例3.6】在文本框中输入若干字符,统计其中字母字符、数字字符以及其他字符的个数,并显示结果。
程序代码如下:
Dim countX%,countY%,countZ%
Private Sub Text1_KeyPress(KeyAscii As Integer)
Dim c$
c=chr(KeyAscii) …将文本框中输入的字符赋给变量c If Ucase(c)>=”A” And Ucase(c)<=”Z” Then
countX=countX+1
ElseIf c>=”0” And c<=”9” Then
countY=county+1
Else
countZ=countZ+1
End If
If KeyAscii=13 Then …当按回车键字符输入完毕,显示结果
Print “字母字符有”;countX;”个”
Print “数字字符有”;countY;”个”
Print “其他字符有”;countZ;”个”
End If
End Sub
3.3.2 Select Case语句
Select Case语句是多分支结构的另一种表示形式,它可使程序代码更加简单、清晰、易读。
语句格式:
Select Case <条件表达式>
Case <表达式列表1>
<语句块1>
Case <表达式列表2>
<语句块2>
……
[Case Else
<语句块n>]
End Select
语句功能:根据条件表达式的值转向相应的语句块,实现多路分支。其流程如图3-8。
图3-8
使用说明:先求出条件表达式的值,然后从上到下跟各个Case子句中的表达式列表进行匹配,如果找到了相匹配的值,则执行该子句下的语句块。若有多个Case子句的值与条件表达式的值相匹配,则只执行第一个与之匹配的Case子句后面的语句块。如果没有任何Case 子句中的表达式列表与之匹配,则执行Case Else子句中的语句块。
格式说明:
(1)条件表达式可以是数值表达式或字符串表达式,一般为变量。
(2)表达式列表用来描述条件表达式的可能取值情况,可以由多个表达式组成,表达式与表达式之间要用“,”隔开,必须与条件表达式的数据类型相同且有确定的值。表达式列表有以下三种形式:
①表达式或由逗号分隔的多个表达式
例如:Case “A”
Case 1,2,3
Case a,b
②<表达式1> To <表达式2>
例如:Case -10 to 10
Case “A” to “F”
Case a to b
③Is <关系操作符> <表达式>
例如:Is <10
Is>=a+b
【例3.7】某商店进行购物打折优惠活动促销,根据每位顾客一次性购物的消费额给予不同的折扣,具体方法如下:
(1) 购物1000元以上的九五折优惠,
(2) 购物2000元以上的九折优惠,
(3) 购物3000元以上的八五折优惠,
(4) 购物5000元以上的八折优惠。
程序代码如下:
Private Sub Command1_Click()
Dim x As Single, y As Single
x = InputBox("请输入购物金额:")
Select Case x
Case Is < 1000
Print "不优惠"
y = x
Case Is < 2000
Print "九五折优惠"
y = 0.95 * x
Case Is < 3000
Print "九折优惠"
y = 0.9 * x
Case Is < 5000
Print "八五折优惠"
y = 0.85 * x
Case Is >= 5000
Print "八折优惠"
y = 0.8 * x
End Select
Print "优惠后应收款额为:"; y
End Sub
3.3.3 选择结构的嵌套
将一个选择结构放在另一个选择结构内,称为选择结构的嵌套。If语句的多分支格式实际上是一种If结构的嵌套形式。选择结构的嵌套既可以是同一种结构的嵌套,也可以是不同结构之间的嵌套。例如可以在If结构中又包含If语句,或在If结构中包含Select 语句等形式。
例如:若x大于0,则y等于1;若x小于0,则y等于-1;否则,y等于0。
语句如下:
If x>0 Then y=1 Else If x<0 Then y=-1 Else y=0
此例中的If语句的Else子句中又出现If语句,形成了嵌套。
【例3.8】求一元二次方程的根。
程序代码如下:
Private Sub Form_Click()
Dim a%,b%,c%,disc%,s!
a=InputBox(“输入系数a”)
b=InputBox(“输入系数b”)
c=InputBox(“输入系数c”)
If a=0 Then …系数a为0时,方程只有一个根
Print “one root is:”
Print “x=”;-c/b
Else …系数a不为0时
disc=b*b-4*a*c
Select Case disc
Case Is>0 …方程有两个不同实根
s=sqr(disc)
Print “x1=”;(-b+s)/(2*a)
Print “x2=”;(-b-s)/(2*a)
Case Is=0 …方程有两个相同实根
Print “The root is:”
Print “x=”;-b/(2*a)
Case Else …方程没有实根
Print “No real root.”
End Select
End If
End Sub
3.3.4 条件函数
1.IIF函数
使用IIf函数也可以实现简单的双分支选择结构。
语句格式:
result = IIF(条件表达式,<表达式1>,<表达式2>)
语句说明:
(1)“result”是函数的返回值:当条件表达式为真时,函数返回<表达式1>的值,当条件表达式为假时,函数返回<表达式2>的值。
(2)<表达式1>和<表达式2>可以是任何表达式。
例如:语句If x>y Then max=x Else max=Y也可写成:
Max=IIf(x>y,x,y)
2.Choose()函数
使用Choose函数也可以实现简单的多分支选择结构。
语句格式:
result=Choose(整数表达式,选项列表)
语句说明:
Choose函数根据整数表达式的值来决定返回选项列表中的某个值。若整数表达式值是1,则Choose函数会返回列表中的第1个选项。若整数表达式值是2,则会返回列表中的第2
个选项,以此类推。若整数表达式的值小于 1 或大于列出的选项数目时,Choose函数返回Null。
例如:c=Choose(x,”red”,”green”,”blue”)
当x值为1时,返回“red”;当x值为2时,返回“green”;当x值为3时,返回“blue”;当x不在1-3之间,函数返回Null。
3、Switch函数
Switch函数称开关函数,计算一个条件表达式列表,并返回与该表中一个等于True的条件表达式相联系的一个表达式的值。
语句格式:
Result=Switch(<条件表达式1>,<表达式1>[,<条件表达式2>,<表达式2>…])
语句说明:
当条件表达式1为True时,返回表达式1的值;当条件表达式2为True时,返回表达式2的值,依此类推。
例如:y=switch(x>0,1,x=0,0,x<0,-1)
3.4 循环结构
在实际应用中,经常遇到一些需要反复多次处理的问题,例如求若干个数之和、积等。重复执行某一程序块称作循环。Visual Basic提供了多种不同风格的循环结构语句,包括Do … Loop、While … Wend,For … Next,For Each … Next等,其中最常用的是For …Next语句和Do … Loop语句。
3.4.1 计数循环
For循环又称计数循环,常用于循环次数预知的场合。语句格式如下:
For <循环变量> = <初值> To <终值> [Step <步长>]
[<语句块>]
Next [<循环变量>]
说明:
(1)参数<循环变量>、<初值>、<终值>和<步长>都是数值型。
(2)<语句块>内是一系列VB合法的语句,构成循环体。
(3)步长为可选参数,如果没有指定,则默认值为1。步长可以为正,也可以为负。若为正,则初值应小于或等于终值;若为负,则初值应大于或等于终值,这样才能保证执行循环体内的语句;若为0,循环永远不能结束(即出现死循环)。
(4)该语句的执行过程如图3-9所示:
①把“初值”赋给“循环变量”,仅被赋值一次。
②检查循环变量的值是否超过终值,若是就结束循环,执行Next后的下一语句;否则执行一次循环体。
③执行Next语句,循环变量的值增加一个步长,转②继续循环。
图3-9
【例3.9】求1到100的和。
Private Sub Command1_Click()
Dim i As Integer, sum As Integer
sum = 0 …给变量sum赋初值0
For i = 1 To 100
sum = sum + i …累加
Next i
Print sum
End Sub
思考:若要将上例的求和问题改为求积,如求10!,应如何编写代码?
【注意】
(1)一般在循环体内不要修改循环变量的值,否则会影响原有的循环控制状况。
例如以下程序段:
For i=1 To 5
If i Mod 2 = 0 Then i = i + 1
Print i;
Next i
程序执行打印结果为:1 3 5
循环体执行了3次,若没有第二行,程序应执行5次。
(2)如果在循环体中没有修改循环变量的值,则循环的次数可以从For语句中指定的参数直接计算出来:
循环次数=Int((循环终值-循环初值)/步长)+1
如:
For i=1 To 10 Step 3
Print i;
Next i
循环次数=int((10-1)/3)+1=4
【例3.10】求Fibonacci数列的前30个数。这个数列有如下特点:前两个数为1,从第三个数开始,其值是前两个数的和,即:
F1=1 (n=1)
F2=1 (n=2)
F n= F n-1+ F n-2(n≥3)
程序如下:
Private Sub Command1_Click()
Dim i As Integer
Dim f1 As Long, f2 As Long, fn As Long
f1 = 1
f2 = 1
Print f1,
Print f2,
For i = 3 To 30 ' f1,f2已知,从第三个数开始计算
fn = f1 + f2
f1 = f2
f2 = fn '更改f1,f2的值
Print fn,
If i Mod 4 = 0 Then Print '打印4个数后换行打印
Next
End Sub
运行结果如图3-10:
图3-10
3.4.2 条件型循环
条件型循环是根据某个条件决定循环的次数。常用的循环结构有:While循环结构及Do 循环结构。
1. While循环结构
While循环结构用While…Wend语句来实现,语句格式如下:
While <条件表达式>
[<语句块>]
Wend
语句说明:
(1)“条件表达式”可以是关系表达式、逻辑表达式或数值表达式。如果是数值表达式,值为0被作为False,非零值则为True。
(2)语句的执行过程是:先计算条件表达式的值,若为True,则执行循环中的语句块,遇到Wend语句时返回While语句继续判断条件表达式的值,若仍为真,则继续执行语句块,重复上述过程直到条件表达式的值为False,则退出循环结构,执行Wend语句的后续语句。循环环执行过程如图3-11。
(3)如果条件一开始就不成立,则语句块一次也不会被执行。
图3-11
例如,用While循环语句改写例3.9,程序代码如下:
Private Sub Command1_Click()
Dim i As Integer, sum As Integer
sum = 0 :i=1
While i<=100
sum = sum + i
i=i+1
Wend
Print sum
End Sub
2. Do循环结构
Do循环结构的形式较灵活,可分为以下几种:
(1)先判断条件的Do…Loop循环
格式一:
Do While <条件表达式>
[<语句块>]
Loop
语句执行过程:先计算条件表达式的值,若为True,则执行语句块中的语句;若为False 则退出循环结构。循环环执行过程如图3-12。
格式二:
Do Until <条件表达式>
[<语句块>]
Loop
语句执行过程和格式一基本相同,唯一不同的是,它在条件表达式为False时重复执行语句块,直到条件为True时退出循环结构。循环环执行过程如图3-13。
图3-12 图3-13
【例3.11】将10000元存入银行,按3.25%的利率,试问多长时间就会连本带利翻一番。
程序代码如下:
Private Sub Form_Click()
Dim year%,money!,original!,interest!
original=10000
money=original
Interest=3.25/100
Do While money<2*original
year=year+1
money=money+interest*money ?累计每过一年的连本带利的金额
Loop
Print “In”;year;”years,you’ll have”;money
End Sub
请读者自己使用格式二改写上述程序。
(2)后判断条件的Do…Loop循环
格式三:
Do
[<语句块>]
Loop While <条件表达式>
语句执行过程:首先执行语句块中语句,然后计算条件表达式,如果条件表达式值为True,则继续执行语句块,否则退出循环结构。循环体至少执行一次。循环环执行过程如图3-14。
格式四:
Do
[<语句块>]
Loop Until <条件表达式>
格式四的执行过程和格式三基本一样,也是先执行后判断。唯一不同的是,它在条件表达式值为假时重复执行语句块,直到条件表达式值为真时退出循环结构。循环环执行过程如图3-15。
图3-14 图3-15
【例3.12】用辗转相除法求两正整数m,n的最大公约数。
求最大公约数的算法如下:
(1)对于已知两数m,n,使得m>n;
(2)m除以n得余数r;
(3)令m ← n,n ← r;
(4)若r≠0,转到(2)继续执行,直到r=0求得最大公约数为m,循环结束。
程序代码如下:
Private Sub Form_Click()
Dim m%,n%
m = InputBox("输入m")
n = InputBox("输入n")
If m< n Then ’若m小于n,则交换两数,使得m>n
t=m
m=n
n=t
End If
m1=m
n1=n
vb三种基本结构练习题 1、计算圆的面积(顺序结构) dim r,s,c as single r=inputbox("输入r的值") s=3.14*r*r c=2*3.14*r print s print c 2、小明去买电池,2.5元一节,买电池超过10节,超出的部分按八折出售。输入小明买电池的数量,输出小明应付的钱数。(选择语句) dim a as integer dim q as single a=inputbox("输入小明买的电池数") if a>10 then b=25+(a-10)*2.5*0.8 else b=a*2.5 end if print b 3、求1+2+3+4+……+100的和。(循环语句) dim i,sum as integer for i=1 to 100 sum=sum+i next i print sum 4、输入数字n,求n!(n!=1*2*3*……*n)(循环语句) dim i,sum,n as long n=inputbox("输入n的值") sum=1 for i=1 to n sum=sum*i next i print sum
1、在窗体上任意位置画一个文本框和一个命令按钮,编写程序,当用户单击命令按钮时,文本框移动到窗体的左上角,并且文本框的大小是原来的2倍。 2、在窗体上任意位置画一个文本框和一个命令按钮,设置窗体的标题属性为“信息窗口”;命令按钮的标题属性为“确定”。编写程序,当用户单击命令按钮时,在文本框中显示“包头师范学院”,要求字体为隶书、加粗、加下划线、字号为20、颜色为红色。 3、在窗体上任意位置画两个命令按钮,分别设置它们的标题属性为:加载图片、显示信息。编写程序,当用户单击第一个命令按钮时,在窗体上加载一幅图片(图片自定)。当用户单击第二个命令按钮时,在窗体上打印信息“包头师范学院“。 4、例1: 在窗体上部设置一个文本框,文本框的下面设置 3 个命令按钮,其中左边按钮中标有“单击此按钮”,中间按钮中标有“清除”,右边按钮中标有“程序结束”。当程序运行时,用鼠标单击左边按钮时,屏幕上部的文本框中显示“欢迎使用vb 6.0”;如果单击中间按钮,则清除文本框中显示的内容;而如果单击右边的按钮,则结束程序。 5、例2 请根据题目要求,设计VB应用程序: 1、在窗体的上方并排分别创建一个标签控件label1和一个文本框控件 text1; 要求:①窗体的标题命名为“个人简介”、窗体背景颜色为黄色。 ②标签和文本框中显示的字体为隶书、样式为斜体、字体大小为三号的红色字。 2、在两个控件的下方并排创建两个命令按钮控件command1、command2,分别命名为:“姓名”、“单位”。 3、请编写事件过程代码,使得程序运行时,当鼠标按下“姓名”按钮时,将在标签中显示你的名字;当鼠标按下“单位”按钮时,将在文本框中显示你现在所在的系、级、班。 4、完成以上操作后以V1为窗体名保存在D盘自己的文件夹下 上机练习三 1、在窗体上画一个文本框控件,要求运行时在文本框中显示信息“包头师范学院”(form-load事件)。当用户在文本框中选中任意数量的字符时,在窗体上显示所选中的字符数、选中字符数的首字符数及选中的字符内容。 2、在窗体上画两个文本框控件,先在属性窗口中删除两个文本框中的初始text 属性值。要求当程序运行时,当在文本框1中输入任意一个字符时,同时在文本框2中显示出来,同时也在窗体中显示出来。 3、实现“减法器”功能。
V B程序设计试题及答案(一) 一、单选题 1. VB6.0是一种面向B 的编程环境。 (A) 机器(B) 对象 (C) 过程(D) 应用 2. 要使FormI窗体的标题栏显示"欢迎使用VB",以下D 语句是正确的。 (A) Forml.Caption=“欢迎使用VB” (B) Forml.Caption='欢迎使用VB' (C) Forml.Caption=欢迎使用VB (D) Forml.Caption="欢迎使用VB" 3. 若要使命令按钮不可操作,要对A 属性进行设置。 (A) EnabIed (B)Visible (C) Backcolor (D)Caption 4. 如果在窗体上已经创建了一个文本框对象TextI,可以通过C 事件获得输入键值的ASCII码。 (A) Change (B) LostFocus (C) KeyPress (D) GotFocus 5. 下面A 是合法的变量名。 (A) X_yz (B) 123ab。(C) integer (D) X-Y 6. 以下关系表达式中,其值为False的是A 。 (A) "ABC">"AbC" (B) "女">"男" (C) "BASIC"=UCase("basic) (D) "123"<"23" 7. 为了给x、y、z三个变量赋初值1,下面正确的赋值语句是A 。 (A) x=1:y=1:z=1 (B) x=1,y=1,z=1 (C) x=y=z=1 (D) xyz=1 8. VB提供了结构化程序设计的三种基本结构,三种基本结构是D 。 (A)递归结构、选择结构、循环结构 (B)选择结构、过程结构、顺序结构 (C)过程结构、输入输出结构、转向结构 (D)选择结构、循环结构、顺序结构 9. 下面If语句统计满足性别为男、职称为副教授以上、年龄小于40岁条件的人数,不正确的语句是 D 。 (A) If sex="男" And age=4O And InStr(duty,"教授")>O Then n=n+l (B) If sex="男" And age=4O And (duty="教授" Or duty="副教授") Then n=n+l (C) If sex="男" And age=4O And Right(duty,2)="教授" Then n=n+l (D) If sex="男" And age=4O And duty="教授" And duty="副教授" Then n=n+l 10.下列关于Do…Loop循环结构执行循环次数的描述正确的是D 。 (A) Do While…Loop循环和Do…Loop Until循环至少都执行一次 (B) Do While…Loop循环和Do…Loop Until循环可能都不执行 (C) Do While…Loop循环至少执行一次和Do…Loop Until循环可能不执行 (D) Do While…Loop循环可能不执行和Do…Loop Until循环至少执行一次 11.以下B 是正确的For…Next结构。 (A) For x=1 To Step 10 (B) For x=3 To -3 Step -3 ……
《VB程序的三种基本控制结构》 复习课教案 平桂高级中学陀君一、案例背景信息 模块:算法与程序设计 年级:高一年级 所用教材版本:粤教版《算法与程序设计》 学时数:1课时(40分钟) 二、教学设计: 1、教学目标: 知识与技能:能根据流程图正确区分VB程序的三种基本结构,并记住相关语句格式,能编写出简单明了的程序关键代码; 过程与方法:充分认识VB程序中三种基本结构的实用性,体会生活中算法的存在和精彩。 情感态度与价值观:培养学生在学习过程中积极思考、自我探究的能力和学以致用的意识。 2、教学重点:顺序、选择(分支)和循环三种基本结构的区分及其对应的VB 语句的使用。 教学难点:for循环结构,各类语句关键代码的编写。 三、教学实录 1.复习引入 师:我们之前学过VB的基本结构,通常程序有三种最基本的结构,是哪三种结构? 大部分学生在底下小声回答,师让某生回答,说:顺序模式、分支模式、循环模式。
师:分支模式也可称为? 部分学生:选择模式。 师:非常好,接下来看下这三种结构的流程图,然后分别指出这三个流程图是什么结构。(出示三种流程图结构) 2.正题 (1)顺序结构P38: 执行第一条语句后,必然从第二条语句继续,顺序执行所有的语句,直到执行完最后一条语句为止。 例1:例1、 a=1 b=2 c=a+b a=c-a b=c-a
最后,变量b的值是( 1 ) (2)选择结构(分支结构):P42 根据条件判断其是否成立,如果成立执行成立的分支;否则执行另一分支。其一般形式为: If 条件Then 语句序列1 Else 语句序列2 End If 单行形式为: If 条件Then 语句组1 Else 语句组2 例2、a =10 If a>=10 Then a=a+1 Else a=a-1 End If 该程序段运行后,变量a的值是( D ) A. 8 B. 9 C. 10 D. 11 【师读题,学生思考。请同学回答,让同学们思考a=5结果是多少】 (3)循环结构:P51 根据条件判断其是否成立,如果条件成立则重复执行循环体(循环结构中某语句序列),直到条件不成立,退出循环结构为止。 循环结构的常用形式为: for 循环变量= 初值to 终值[step 步长] [循环体] next [循环变量]
第二章 一、问答题 1.叙述建立一个完整的应用程序的过程。 答:界面设计编写事件过程代码运行、调试保存文件 2.当建立好一个简单的应用程序后,假定该工程仅有一个窗体模块。问该工程涉及到几个文件要保存?若要保存该工程中的所有文件,正确的操作应先保存什么文件?再保存什么文件?若不这样做,系统会出现什么信息? 答:涉及到两个文件要保存。先保存窗体文件(.frm),再保存工程文件(.vbp)。若先保存工程文件,系统也会先弹出“文件另存为”对话框,要求把窗体文件先保存。 3.假定在W indows环境中,要保存工程文件时,若不改变目录名,则系统默认的目录是什么? 答:VB98 4.当标签框的大小由Caption属性的值进行扩展和缩小,应对该控件的什么属性进行何种设置? 答:将标签的Autosize设置为True. 5.VB6.0提供的大量图形文件在哪个目录下?若你的计算机上没有安装,则怎样安装这些图形文件? 答:VB6.0提供的图形文件在Graphics目录。 6.在VB6.0中,命令按钮的显示形式可以有标准和图形两种选择,这通过什么属性来设置?若选择图形的,则通过什么属性来装入图形?若已在规定的属性里装入了某个图形文件,但该命令按钮还是不能显示该图形,而显示的是Caption属性设置的文字,怎样改正?答:按钮Style的属性设置为Graphical(或1)。通过Picture属性来装入图形。不能显示图形是因为Style的属性设置为Standard(或0),只要改为Graphical(或1),一般还将Caption 属性的值设置为空。 7.标签和文本框的区别是什么? 答:文本是否可编辑。 8.当窗体上有三个文本框和一个命令按钮,若程序运行时,需把焦点定位在第三个文本框处,应对何控件的什么属性进行何种设置? 答:应对Text3控件进行Text3.TabIndex=0的设置。 9.简述文本框的change与keypress事件的区别。 答:文本框内容变化,change与keypress事件都会发生,所不同的是Keyprees还将返回一个Keyasii参数 10.当某文本框输入数据后(按了回车键),进行判断认为数据输入错,怎样删除原来数据?怎样使焦点回到该文本框重新输入? 答:假定文本框的名称为Text1,则事件过程如下: Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then If 出错条件判断成立Then Text1=””…先删除原来数据 Text1.SetFocus …焦点回到Text1 End If …… End If End Sub
VB程序设计试题及答案(一) 一、单选题 1. VB6.0是一种面向B 的编程环境。 (A) 机器(B) 对象 (C) 过程(D) 应用 2. 要使FormI窗体的标题栏显示"欢迎使用VB",以下D 语句是正确的。 (A) Forml.Caption=“欢迎使用VB” (B) Forml.Caption='欢迎使用VB' (C) Forml.Caption=欢迎使用VB (D) Forml.Caption="欢迎使用VB" 3. 若要使命令按钮不可操作,要对A 属性进行设置。 (A) EnabIed (B)Visible (C) Backcolor (D)Caption 4. 如果在窗体上已经创建了一个文本框对象TextI,可以通过C 事件获得输入键值的ASCII 码。 (A) Change (B) LostFocus (C) KeyPress (D) GotFocus 5. 下面A 是合法的变量名。 (A) X_yz (B) 123ab。(C) integer (D) X-Y 6. 以下关系表达式中,其值为False的是A 。 (A) "ABC">"AbC" (B) "女">"男" (C) "BASIC"=UCase("basic) (D) "123"<"23" 7. 为了给x、y、z三个变量赋初值1,下面正确的赋值语句是A 。 (A) x=1:y=1:z=1 (B) x=1,y=1,z=1 (C) x=y=z=1 (D) xyz=1 8. VB提供了结构化程序设计的三种基本结构,三种基本结构是D 。 (A)递归结构、选择结构、循环结构 (B)选择结构、过程结构、顺序结构 (C)过程结构、输入输出结构、转向结构 (D)选择结构、循环结构、顺序结构 9. 下面If语句统计满足性别为男、职称为副教授以上、年龄小于40岁条件的人数,不正确的语句是 D 。 (A) If sex="男" And age=4O And InStr(duty,"教授")>O Then n=n+l (B) If sex="男" And age=4O And (duty="教授" Or duty="副教授") Then n=n+l (C) If sex="男" And age=4O And Right(duty,2)="教授" Then n=n+l (D) If sex="男" And age=4O And duty="教授" And duty="副教授" Then n=n+l 10.下列关于Do…Loop循环结构执行循环次数的描述正确的是D 。 (A) Do While…Loop循环和Do…Loop Until循环至少都执行一次 (B) Do While…Loop循环和Do…Loop Until循环可能都不执行 (C) Do While…Loop循环至少执行一次和Do…Loop Until循环可能不执行 (D) Do While…Loop循环可能不执行和Do…Loop Until循环至少执行一次 11.以下B 是正确的For…Next结构。 (A) For x=1 To Step 10 (B) For x=3 To -3 Step -3
VB程序设计试题及答案(一) 一、单选题 1、VB6、0就是一种面向B 的编程环境。 (A) 机器(B) 对象 (C) 过程(D) 应用 2、要使FormI窗体的标题栏显示"欢迎使用VB",以下D 语句就是正确的。 (A) Forml、Caption=“欢迎使用VB” (B) Forml、Caption='欢迎使用VB' (C) Forml、Caption=欢迎使用VB (D) Forml、Caption="欢迎使用VB" 3、若要使命令按钮不可操作,要对A 属性进行设置。 (A) EnabIed (B)Visible (C) Backcolor (D)Caption 4、如果在窗体上已经创建了一个文本框对象TextI,可以通过C 事件获得输入键值的ASCII码。 (A) Change (B) LostFocus (C) KeyPress (D) GotFocus 5、下面A 就是合法的变量名。 (A) X_yz (B) 123ab。(C) integer (D) X-Y 6、以下关系表达式中,其值为False的就是A 。 (A) "ABC">"AbC" (B) "女">"男" (C) "BASIC"=UCase("basic) (D) "123"<"23" 7、为了给x、y、z三个变量赋初值1,下面正确的赋值语句就是A 。 (A) x=1:y=1:z=1 (B) x=1,y=1,z=1 (C) x=y=z=1 (D) xyz=1 8、VB提供了结构化程序设计的三种基本结构,三种基本结构就是D 。 (A)递归结构、选择结构、循环结构 (B)选择结构、过程结构、顺序结构 (C)过程结构、输入输出结构、转向结构 (D)选择结构、循环结构、顺序结构 9、下面If语句统计满足性别为男、职称为副教授以上、年龄小于40岁条件的人数,不正确的语句就是 D 。 (A) If sex="男" And age=4O And InStr(duty,"教授")>O Then n=n+l (B) If sex="男" And age=4O And (duty="教授" Or duty="副教授") Then n=n+l (C) If sex="男" And age=4O And Right(duty,2)="教授" Then n=n+l (D) If sex="男" And age=4O And duty="教授" And duty="副教授" Then n=n+l 10、下列关于Do…Loop循环结构执行循环次数的描述正确的就是D 。 (A) Do While…Loop循环与Do…Loop Until循环至少都执行一次 (B) Do While…Loop循环与Do…Loop Until循环可能都不执行 (C) Do While…Loop循环至少执行一次与Do…Loop Until循环可能不执行 (D) Do While…Loop循环可能不执行与Do…Loop Until循环至少执行一次 11、以下B 就是正确的For…Next结构。 (A) For x=1 To Step 10 (B) For x=3 To -3 Step -3 …… Next x Next x