版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VisualBasic的程序语句顺序结构选择结构循环结构其他控制语句第四章
程序设计基础4.2顺序结构4.2.1数据输出4.2.2数据输入返回退出4.2顺序控制结构
顺序结构就是各语句按出现的先后次序执行。一般的程序设计语言中,顺序结构的语句主要是赋值语句、输入/输出语句等。在VB中也有赋值语句,而输入/输出可以通过文本框、print方法等实现,也可以通过系统提供的函数和过程来实现。
4.2.1赋值语句赋值语句的一般形式如下:
变量名=表达式
对象.属性=表达式程序执行时,先计算右边表达式的值,然后将值赋给左边的变量或属性。
例如:
X=100
‘把数值赋给变量X;
Text1.Text="VB欢迎你"
‘把字符串赋给Text1的Text属性
Label1.Caption=Date()
‘把Date函数的结果赋给Label1的Caption属性
Label1.Top=Label1.Top-100
‘把表达式的值赋给Label1的Top属性
在赋值语句中,赋值运算符"="代表赋值操作,而不代表等量关系。
4.2.1数据输出
1Print方法2与Print方法有关的函数3使用位置属性4清除方法CLS5使用“标签”控件的输出1Print方法Print方法的语法格式为:object.Print{Spc(n)|Tab(n)}expressioncharpos其中:object:窗体、图片框、打印机等对象。Expression:要打印的数值表达式或字符串表达式。Charpos:逗号或分号,指定下个字符的插入点。2.与Print方法有关的函数与Print相配合的函数:(1)Tab函数与Print#语句或Print方法一起使用,对输出进行定位。格式:Tab[(n)]当在一个Print方法中有多个Tab函数时,每个Tab函数对应一个输出项,各输入项之间用分号隔开。例题PrivateSubForm_Click()Print"12345678901234567890"PrintTab(5);"5";Tab(10-2);"8","'注意这里10-2>当前位置5,故同行显示"PrintTab(5);"5";Tab(10-6);"4";Tab(20-15);"5";"'注意这里10-6<当前位置5,故换行显示;20-15>当前位置4,故同行显示"EndSub程序执行结果见图4-1。程序中已经对程序显示特点做出解释。图4-1Print方法与Tab()函数结合(2)Spc函数格式:Spc(n)在显示或打印列表中的下一个表达式之前插入n个空白数,n为0~32767之间的整数。Spc函数与输出项之间用分号隔开。如果n小于输出行的宽度,则下一个打印位置将紧接在数个已打印的空白之后。如果n大于输出行的宽度,则Spc利用下列公式计算下一个打印位置:当前位置+(nMod行宽)Spc函数与Tab函数的作用类似,可以互相代替。但应注意,Tab函数从对象的左端开始记数,而Spc函数只表示两个输出项之间的间隔。3.使用位置属性位置属性CurrentX和CurrentY常用来把文本精确地输出到窗体、图片框或打印页上。这两个属性分别表示当前输出位置的横坐标与纵坐标。格式:[对象名称].CurrentX[=x][对象名称].CurrentY[=y]例如:下面程序将图片框相对于窗体居中显示,图片框中的文字居中显示。PrivateSubForm_Click()Dimstr1AsStringstr1="图片框相对窗体、文字相对图片框居中显示"Picture1.FontName="宋体"'图片框中文字的字体
Picture1.FontSize=16'图片框中文字的字号
Picture1.Left=(ScaleWidth-Picture1.Width)/2'图片框水平位置
Picture1.Top=(ScaleHeight-Picture1.Height)/2'图片框垂直位置
Picture1.CurrentX=Picture1.ScaleLeft+Picture1.Width/2-Picture1.TextWidth(str1)/2'输出水平位置
Picture1.CurrentY=Picture1.ScaleTop+Picture1.Height/2-Picture1.TextHeight(str1)/2'输出垂直位置
Picture1.Printstr1'在图片框中输出字符串str1EndSub各对象的其他参数保持默认值。程序设计时和运行结果见图4-2。无论怎样调整窗体,只要单击窗体,都会按题目要求调整图片框和文本的位置。TextWidth()为求文本宽度的函数。
(a)设计时(b)运行时图4-2位置属性的应用4.清除方法CLSCls将清除图形和打印语句在运行时所产生的文本和图形,清除后的区域以背景色填充。但是设计时在Form中使用Picture属性设置的背景位图和放置的控件不受Cls影响。语法:[〈对象名称〉.]Cls例如,为了在运行时双击窗体时清除图片框中的文本,编写的程序为:PrivateSubForm_DblClick()Picture1.Cls'清除图片框中的文本EndSub如果将代码由Picture1.Cls改为.Cls,将无法清除图片框中的文本。5.使用“标签”控件的输出标签(Label)是VB中最常用的输出文本信息的工具,目前几乎完全取代了Print方法。例如:建立一个Label控件和Command控件,按表4-1设置设计时属性。加入如下代码,运行程序。PrivateSubCommand1_Click()Label1.WordWrap=TrueLabel1.AutoSize=TrueLabel1.BorderStyle=1Label1.BackColor=&H80000014EndSub由运行结果可知,单击命令按钮后,标签控件可以自动适用内容,并自动换行,且加上边框,背景色为白色以突出显示文字。表4-1属性设置对象属性设计时属性值说明Command1Caption单击此按钮,令WordWrap=True,AutoSize=True命令按钮标题Label1Caption将WordWrap属性设置为True,则Caption属性的内容自动换行并垂直扩充;将AutoSize属性设置为True,控件自动适应内容标签控件的内容WordWrapFalse不自动换行AutoSizeFalse控件不能自动调整Font宋体、三号(a)设计时(b)运行结果图4-3利用标签控件输出4.2.2数据输入
1使用“文本框”控件进行输入2SetFocus方法3与用户交互的函数和过程1使用“文本框”控件进行输入例4-1:,设计建立四个标签控件和三个文本框控件,各要求在运行时,双击填写意见的文本框,可以将该文本框放大至窗口的1/2。设计步骤如下:(1)建立应用程序用户界面单击“文件|新建工程”,进入窗体设计器。增加四个标签Label1~Label4和三个文本框Text1~Text3。(2)属性设置设置各对象的属性值,其他属性值不变。(3)编写代码双击Text3文本框,打开Text3的代码窗口,在过程下拉列表框中选择“DblClick”,编写Text3的DblClick事件的代码:PrivateSubText3_DblClick()Text3.Left=0Text3.Width=Width'Text3的宽度为窗口宽度Text3.Height=Height/2'Text3的高度为窗口高度的1/2Label4.Top=Text3.Top+Text3.Height+100'Label4始终在Text3之下EndSub2SetFocus方法使某个控件获得焦点,可以有多种方法:(1)直接单击这一控件。(2)按Tab键(或Tab+Shfit组合键)按规定的次序在各控件之间移动焦点。(3)在代码中使用SetFocus方法使得某一控件获得焦点。使用SetFocus方法的格式为:<对象名称>.SetFocus其中:<对象名称>:为对象表达式,其值为可以获得焦点的控件对象名称。例4-2:在上述工程中,增添一个命令按钮,单击该按钮时将清空所有文本框中的内容(完善的工程将要编写保存用户信息的代码)。(1)增加Command命令按钮。在窗体的合适位置增加一个Command命令按钮,调整其大小。(2)设置属性可以将Caption属性值设置为“发送”。设置Font属性符合整体风格。(3)编写Command1的Click事件的代码PrivateSubCommand1_Click()Text1.Text=""Text2.Text=""Text3.Text=""Text1.SetFocusEndSub并在上例代码的后面增加一行如下代码:Command1.Top=Text3.Top+Text3.Height+100'Command1始终在Text3之下该代码使得Command1控件始终保持在Text3控件之下。3与用户交互的函数和过程
1.InputBox函数作用:在一对话框中显示提示,等待用户输入正文或按下按钮,并返回包含文本框中内容,函数值的类型为String类型。语法格式:
[变量[%]]=InputBox(<提示>[,<标题>][,<默认>][,<x坐标位置>][,<y坐标位置>][,<helpfile>,<context>])2.MsgBox函数和MsgBox过程作用:在对话框中显示信息,等待用户单击按钮,并返回一个整数以标明用户单击了哪个按钮。语法格式[变量[%]]=MsgBox(<提示>[,<按钮>][,<标题>][,<helpfile>,<context>])例4-3:在上述实例中,要求单击“发送”命令按钮后,显示如下对话框,提示您输入身份证号,并将输入内容保存在变量strIDcard中。增添的代码为:PrivateSubCommand1_Click()DimstrIDcardAsString,strTextAsStringstrText="请输入您的身份证号并单击“确定”"+Chr(13)+Chr(10)+"重新填写请单击“取消”"strIDcard=InputBox$(strText,"身份证号",,100,100)Text1.SetFocusEndSub如果单击“确定”按钮,则strIDcard的值为输入值“123456789”,否则为空字符串。图4-5使用InputBox
函数(2)MsgBox函数和MsgBox过程MsgBox函数在对话框中显示信息,等待用户单击按钮,并返回一个整数以标明用户单击了哪个按钮。其语法格式为:[变量[%]]=MsgBox(<提示>[,<按钮>][,<标题>][,<helpfile>,<context>])MsgBox语句的用法为:MsgBox<提示>[,<按钮>][,<标题>][,<helpfile>,<context>]其中:<提示>、<标题>、<Helpfile>和<context>的意义同InputBox函数。<按钮>可选项。整型表达式,指定显示按钮的数目及形式,使用的图标类型,缺省按钮的种类以及消息框的强制回应等。如果省略,则<按钮>的缺省值为0。表4-3<按钮>设置值及其意义分组系统常数值描述按钮数目vbOKOnly0只显示
OK按钮。VbOKCancel1显示
OK及
Cancel按钮。VbAbortRetryIgnore2显示
Abort、Retry及
Ignore按钮。VbYesNoCancel3显示
Yes、No及
Cancel按钮。VbYesNo4显示
Yes及
No按钮。VbRetryCancel5显示
Retry及
Cancel按钮。图标类型VbCritical16显示
CriticalMessage图标。VbQuestion32显示
WarningQuery图标。VbExclamation48显示
WarningMessage图标。VbInformation64显示
InformationMessage图标。默认按钮vbDefaultButton10第一个按钮是缺省值。vbDefaultButton2256第二个按钮是缺省值。vbDefaultButton3512第三个按钮是缺省值。模式vbApplicationModal0应用程序强制返回;应用程序一直被挂起,直到用户对消息框作出响应才继续工作。vbSystemModal4096系统强制返回;全部应用程序都被挂起,直到用户对消息框作出响应才继续工作。表4-4MsgBox函数的返回值系统常数返回值描述VbOK1确定vbCancel2取消vbAbort3终止vbRetry4重试vbIgnore5忽略VbYes6是VbNo7否单击“是”:完成提交操作,显示如图4-7对话框,单击“确定”结束程序。单击“否”:返回Command1_click事件,重新显示如图4-5所示输入对话框。单击“取消”:没有提交操作,显示如图4-8对话框,单击“确定”结束程序。图4-6MsgBox对话框的应用(a)例4-4:在上例中,如果要求在单击InputBox对话框中的“确定”按钮后,弹出一个如图4-6所示的对话框,以便用户进行审查并作出如下选择:
图4-7MsgBox对话框的应用图4-8MsgBox对话框的应用修改的Command1_click事件代码为:PrivateSubCommand1_Click()DimintMsginAsIntegerDimstrmsgAsStringstrText="请输入您的身份证号并单击“确定”"+Chr(13)+Chr(10)+"重新填写请单击“取消”"strIDcard=InputBox$(strText,"身份证号",,100,100)strmsg="请确认您的身份证号码:"+Chr(13)+Chr(10)+strIDcard'图4-9对话框显示的内容IfstrIDcard<>""ThenintMsgin=MsgBox(strmsg,vbYesNoCancel+vbQuestion+vbDefaultButton2,"确认身份证")EndIfSelectCaseintMsginCase6'……..提交意见单的代码略MsgBox"您的意见已经提交,谢谢!",vbOKOnly+vbInformation,"已经提交"Case7Command1_Click'重新执行Command1_Click事件Case2MsgBox"您已经放弃提交意见,欢迎下次参加!",vbOKOnly+vbCritical,"放弃提交"EndSelectEndEndSub例
编写一医生工作站的登录检验程序,运行界面如图。对登录名(医生工号)和密码的规定如下:(1)医生工号不超过6位数字,密码为6位字符,密码输入时显示为“*”。本题假设密码为“cljuan”。(2)当医生工号输入非数字字符,密码不正确时,显示相关信息。(3)若单击“重试”按钮,则清除原来输入的内容,焦点定位在原输入文本框,等待用户输入。若单击取消按钮,程序停止运行。
本程序运行结果如图所示,程序代码见后页。例4-2程序代码如下:PrivateSubCommand1_Click()DimIAsIntegerIFNotText2="cljuan"ThenI=MsgBox("密码错误",5+64+0+VBSystemModel,"登录密码")IFI=2ThenEndElseText2=""‘用户单击“取消”按钮返回按钮值
‘用户单击”重试”按钮文本框置空,等待用户重新输入
Text2.SetFocus‘将焦点设置在文本框2上,方便用户输入EndIFEndSubPrivateSubText1_LostFocus()‘焦点离开文本框1时触发LostFocus事件IFNotIsNumeric(Text1)Then‘利用IsNumeric()函数判断文本框中输入的是否为数字字符
MsgBox"医生工号必须是数字字符"Text1=""Text1.SetFocusEndIFEndSub4.3选择结构程序设计
4.3.1If条件语句4.3.2SelectCase4.3.3条件函数返回退出4.3.1If条件语句
1.单分支条件结构(If...Then语句)2.双分支结构(If...Then...Else语句)3.多分支结构(If…Then…ElseIf语句)4.If语句的嵌套1.单分支条件结构(If...Then语句)用If...Then结构有条件地执行一个或多个语句。单行语法和多行块语法都可以使用:(1)If<
表达式>
Then<语句块>(2)If<
表达式>Then<语句块>EndIf下面两个例子等价:(1)IftodayDate<NowThentodayDate=Now(2)IftodayDate<NowThentodayDate=NowEndIf注意:If...Then的单行格式不用EndIf语句。如果<表达式>为True时要执行多行代码,则必须使用多行块If...Then...EndIf语法。例如:IftodayDate<NowThentodayDate=NowTimer1.Enabled=False'定时器控制失效。EndIf
<表达式>TrueFalse<语句>空
todayDate<NowTrueFalsetodayDate=Now空Timer1.Enabled=False图4-12单分支条件语句图4-13单分支条件语句实例1.IF……Then语句(单分支结构)语句形式:(1)IF<表达式>Then
语句块
EndIF(2)IF<表达式>Then语句块表达式语句块FT单分支结构流程示意图其中:表达式:一般为关系表达式、逻辑表达式,也可以为算术表达式。表达式的值按非零为True,零为False进行处理。语句块:可以是一条或多条语句。如果采用形式(2)表示则语句之间要用冒号分隔,并且一定写在同一行上。例4-3已知两个变量x和y,比较它们的大小,使x中的值大于y。(要实现两个变量中的数互相交换通常以使用第三变量为过渡,在此为t)语句如下:IFx<yThent=x
‘将变量x中的值暂时存放于变量t中
x=y‘用变量y中的值替代变量x中的值
y=t‘再将原变量x中的值替代变量y中的值EndIF或者
IFx<yThent=x:x=y:y=t2.双分支结构(If...Then...Else语句)可以用If...Then...Else块定义几个语句块,执行其中一个语句。其语法格式也有两种形式:(1)If<表达式>Then<语句块1>Else<语句块2>EndIf(2)If<表达式>Then<语句1>Else<语句2>当<表达式>的值为真时,执行Then后面的语句块1(或语句1),否则执行Else后面的语句块2(或语句2)。其流程见图4-11。y=
<表达式>TrueFalse<语句块1><语句块2>图4-14双分支结构流程2.IF……..Then……Else(双分支结构)语句形式:
IF<表达式>Then
<语句块1>
Else
<语句块2>
EndIF或者:IF<表达式>Then<语句块1>Else<语句块2>如果表达式的值为非零或True执行语句块1,否则执行语句块2。
表达式语句块1语句块2FT双分支结构流程示意图
x≥0TrueFalse
例如:计算分段函数y=
本题在选择条件时,可以选择x<0作为条件,也可以选择x≥0作为条件。这里选择x≥0作为条件。画出如图4-12所示流程图。y=图4-12双分支结构流程实例y=3*x*x+4*x-51)用单分支结构实现y=3*x*x+4*x-5Ifx≥0Theny=或Ifx<0Theny=3*x*x+4*x-5Ifx≥0Theny=但是,不能这样表示:Ifx≥0Theny=(2)用双分支结构实现Ifx≥0Theny=Elsey=3*x*x+4*x-5EndIfy=3*x*x+4*x-53.多分支结构(If…Then…ElseIf语句)多分支结构可以处理两个或两个以上分支。其语句形式为:If<表达式1>Then<语句块1>ElseIf<表达式2>Then<语句块2>…[Else<语句块n+1>]EndIfVisualBasic首先测试<表达式1>。如果它为False,VisualBasic就测试<表达式2>,依次类推,直到找到一个为True的条件。当它找到一个为True的条件时,VisualBasic就会执行相应的语句块,然后执行EndIf后面的代码。作为一个选择,可以包含Else语句块,如果条件都不是True,则VisualBasic执行Else语句块。3.IF……Then……ElseIF(多分支结构)语句形式:
IF<表达式1>Then
<语句块1>
ElseIF<表达式2>Then
<语句块2>
[Else
<语句块n+1>]
EndIFTTTTTT表达式1表达式2表达式n语句块1语句块2语句块n语句块n+1FFF多分支结构流程示意图……<表达式1>语句块1<表达式2>语句块2……语句块n语句块n+1<表达式n>图4-13多分支结构流程FalseTrueTrueFalseTrueFalse语句块n+1
语句块n
例4-5:利用If...Then...Else语句编写求函数y=的值的程序,要求只要在文本框Text1中输入自变量x的值,就在标签栏label1上显示函数值。根据题意,在窗体上添加一个文本控件Text1和标签控件label1,代码应包含在Text1_change事件中。代码为:PrivateSubText1_Change()DimxAsDouble,yAsDoubleLabel1.Caption=""'清空Label1的内容
x=CDbl(Text1.Text)'将字符串类型转化为双精度类型
If(x<1#)Theny=1#-xElseIf(x>=1#Andx<=2#)Theny=(1#-x)*(2#-x)Elsey=-(2#-x)EndIfLabel1.Caption=y'在Label1上显示结果EndSubx<1#x>=1#Andx<=2#TrueFalsey=(1#-x)*(2#-x)
y=-(2#-x)图4-14多分支结构流程实例TrueFalsey=1#-x例4-6:大学录取新生时,根据学生总分情况给与奖励,条件如下:(1)四门总分不低于700分,特等奖。(2)四门总分680分(含680分)~700分(不含700分),优秀奖。(3)前三门单科不低于145分,第四门不低于280分),特别奖。(4)奖励按特等奖、优秀奖、特别奖由高到低,不重复计奖(包括单科)。要求:四科成绩(intmark1、intmark2、intmark3、intmark4)依次在四个文本框中输入,总分(intmark0)在标签控件上显示。单击命令按钮Command1后,在对话框中显示获奖情况。分析:获奖条件表达式分别为:(1)intmark0>=700(2)intmark0>=680ANDintmark0<700(3)intmark1>=145ORintmark2>=145ORintmark3>=145ORintmark4>=280流程图见图4-18。设计步骤如下:(1)建立应用程序用户界面按如图4-19建立四个文本框(Text1~Text4)接受成绩输入,两个标签控件(Label1~Label2),一个命令按钮Command1,设置各控件的属性,其中Command1的Caption属性值为“查询”。intmark0>=700TrueFlase特等奖优秀奖intmark1>148ORintmark2>148ORintmark3>148ORintmark4>148intmark0>=680ANDintmark0<700特别奖您没有获奖图4-15多分支结构流程实例TrueFlaseTrueFlase图4-16应用程序运行情况(2)编写程序代码根据流程图,编写出Command_click事件的代码为:PrivateSubCommand1_Click()Dimintmark0AsInteger,intmark1AsIntegerDimintmark2AsInteger,intmark3AsInteger,intmark4AsIntegerintmark1=CInt(Text1.Text)intmark2=CInt(Text2.Text)intmark3=CInt(Text3.Text)intmark4=CInt(Text4.Text)intmark0=intmark1+intmark2+intmark3+intmark4Label3.Caption=intmark0Ifintmark0>=700ThenMsgBox"您获得了特等奖",vbOKOnly+vbInformation,"获奖通知"ElseIfintmark0>=680ThenMsgBox"您获得了优秀奖",vbOKOnly+vbInformation,"获奖通知"ElseIfintmark1>=145Orintmark2>=145Orintmark3>=145Orintmark4>=280ThenMsgBox"您获得了特别奖",vbOKOnly+vbInformation,"获奖通知"ElseMsgBox"很遗憾,您没有获奖",vbOKOnly+vbInformation,"获奖通知"EndIfEndSubPrivateSubCommand1_Click()Dimx,yPicture1.Clsx=Val(Text1.Text)‘将文本转换为数值型后赋值给变量x,yy=Val(Text2.Text)IFx<90Andy<60Then
Picture1.Print"血压偏低"ElseIFx<=140Andy<=90Then
Picture1.Print"血压正常"ElseIFx<160Andy<95Then
Picture1.Print"临界高血压"Else
Picture1.Print"高血压"EndIFEndSubPrivateSubCommand2_Click()EndEndSub例按照世界卫生组织(WHo)建议使用的血压标准是:凡正常成人收缩压应小于或等于140MmHg,舒张压小于或等于90MmHg。如果成人收缩压大于或等于160MmHg,舒张压大于或等于95MmHg为高血压;血压值在上述两者之间,亦即收缩压在141—159MmHg之间,舒张压在91-94MmHg之间,为临界高血压。低血压通常指血压低于90/60MmHg。运行界面与程序代码如下:4.If语句的嵌套上面学习了If语句的基本形式,可以通过这些基本形式加以复合,获得更为复杂的If结构,称为If语句的嵌套。一般形式如图4-17所示。图4-18为在Else块中嵌套If结构的形式。可根据实际情况选择采用何种结构。图4-17If语句复合结构的一般形式图4-18在Else块中嵌套If结构的形式图4-19正确与错误的转向例4-7:求a、b、c中三个实数的最大值、最小值,程序中不得使用循环结构和转向语句。a、b、c三值从三个文本框中输入,当单击命令按钮时将结果显示在窗体上。画出流程图。(1)设计流程图根据题意,画出如图4-20所示流程图。
a<bTrueFalseb<cTruea<c
Mininabc=aMininabc=cMaxinabc=ba<cMaxinabc=ab<c图4-20求三个数极值的流程Maxinabc=cMininabc=aFalseTrueMaxinabc=aMaxinabc=cMininabc=bMininabc=cTrueFalseMininabc=bFalseTrueMaxinabc=c(2)设置界面与控件属性在窗体上添加三个文本框,一个命令按钮,设置各自的属性(主要是Caption属性和Font属性)。FalseIF语句的嵌套语句形式:
IF<表达式1>Then
语句块1
IF<表达式2>Then
语句块2
…
EndIF
语句块3
…
EndIF例
输入3个整数,按从小到大的顺序输出。程序运行界面如图程序代码如下:PrivateSubCommand1_Click()Dimx%,y%,z%,t%Form1.Clsx=Val(InputBox("请输入1个整数"))y=Val(InputBox("请输入1个整数"))z=Val(InputBox("请输入1个整数"))Print"您输入三个的数是:";x;Spc(1);y;Spc(1);zIFx>yThen‘如果x>y则x,y交换
t=x:x=y:y=tEndIFIFy>zThen
t=y:y=z:z=tIFx>yThen
t=x:x=y:y=tEndIFEndIFPrint"从小到大的顺序是:";x;Spc(1);y;Spc(1);zEndSubPrivateSubCommand2_Click()EndEndSub例在文本框中输入1-1000之间的数字,如果输入非数值,或数值超出范围,给予提示,并重新输入。运行效果及程序代码如下:PrivateSubForm_Load()Text1.Text=""Text2.Text=""EndSubPrivateSubText1_KeyPress(KeyAsciiAsInteger)IfKeyAscii=13Then'回车键的ASCII码值为13IfIsNumeric(Text1.Text)Then'判断是否是数值
x=Val(Text1.Text)Ifx<0Orx>1000ThenText1.Text=""Text1.SetFocus'焦点回到文本框
Text2.Text="数值超出范围,再输入!"'文本框中显示提示信息
ElseText2.Text="输入正确!"EndIfElseText1.SetFocusText2.Text="请输入数字!"EndIfEndIfEndSub4.3.2SelectCaseSelectCase的结构形式为:SelectCase<测试表达式>[Case<表达式列表1>[<语句块1>]][Case<表达式列表3>[<语句块2>]]…[Case<表达式列表n>[<语句块n>]][CaseElse[<语句块n+1>]]EndSelectSelectCase选择结构执行的过程为:(1)计算<测试表达式>的值(2)将<测试表达式>的值与Case语句中的<表达式列表>中的每一个值逐一进行比较。如果与其中的一个值相匹配,则执行该语句中的<语句块>。如果不止一个Case与<测试表达式>相匹配,则只对第一个匹配的Case执行与之相关联的<语句块>。如果在表达式列表中没有一个值与测试表达式相匹配,则VisualBasic执行CaseElse子句(此项是可选的)中的语句。最后执行EndSelect语句。<测试表达式>图4-22SelectCase选择结构流程V<表达式列表1><语句块1>……<语句块n+1><表达式列表n+1><表达式列表n><语句块n>……4.3.2SelectCase语句SelectCase语句是多分支结构的又一种表示形式,又称情况语句。语句形式:
SelectCase变量或表达式
Case表达式列表1
<语句块1>
Case表达式列表2
<语句块2>
……
[CaseElse
<语句块n+1>]
EndSelectF表达式列表1语句块1表达式列表2语句块2表达式列表n语句块n…..语句块n+1TTTSelect语句流程示意图FF…..例4-8:表4-5为华中航空总公司机票打折表。试根据此表编写程序。日期、机票数从文本框中输入,打折情况在窗体上输出。如图4-23。
表4-5机票优惠率月日订票数(张)优惠率(%)1、2、3、6、11、12全部>=3025<30104、928~30>=3035<3015其它>=3025<30105、101~8>=3035<3015其它>=3025<30107、8全部>=3030<3020(2)设计应用程序用户界面添加6个标签控件Label1~Label6,按顺序见图4-23所示。Label1~Label5的Caption属性依次为:“请输入日期”、“月”、“日”、“请输入订票数”、“张”,Label6的Caption属性设计时为空白,运行时用来显示优惠率。添加3个文本框控件Text1~Text3,按顺序见图4-23所示。添加一个命令按钮Command1。图4-23机票优惠率查询系统(3)编写代码根据流程图,编写出Command1_Click事件的代码如下:PrivateSubCommand1_Click()DimintnnAsLongDimintssAsInteger,strdateAsIntegerintnn=Clng(Text3.Text)strdate=Cint(Trim(Text1.Text)&Trim(Text2.Text))SelectCasestrdateCase428To431,51To57,928To931,101To107Ifintnn>=30Thenintss=35Elseintss=15Case71To79,710To731,81To89,810To831Ifintnn>=30Thenintss=30Elseintss=20CaseElseIfintnn>=30Thenintss=25Elseintss=10EndSelectLabel6.Caption="您所订机票优惠率为:"&str(intss)&"%"EndSub另外,可以取系统的日期作为输入日期,该事件可以指定为Text1_DbClick事件,即双击Text1发生的事件,代码为:PrivateSubText1_DblClick()Text1.Text=Month(Now)Text2.Text=Day(Now)EndSub当要重新输入数据时,可以自动清空各文本框的内容。其中单击Text1清空所有文本框的内容,单击其他文本框,只清空被单击的文本框的内容。PrivateSubText1_Click()Text1.Text=""Text2.Text=""Text3.Text=""EndSubPrivateSubText2_Click()Text2.Text=""EndSubPrivateSubText3_Click()Text3.Text=""EndSub此外,还应为每一个文本框的键盘按下事件编写如下代码,表明当按回车键时,自动跳到下一个必要的控件:PrivateSubText1_KeyPress(KeyAsciiAsInteger)IfKeyAscii=13ThenText2.SetFocusEndSubPrivateSubText2_KeyPress(KeyAsciiAsInteger)IfKeyAscii=13ThenText3.SetFocusEndSubPrivateSubText3_KeyPress(KeyAsciiAsInteger)IfKeyAscii=13ThenCommand1.SetFocusEndSub7月~8月<3010
日期
>=30<30>=30<30>=3035153020104/28~5/7,9/28~10/7
>=30
7月~8月图4-24机票优惠率计算流程图其他满足条件>=30>=3025<30<30<301030203515PrivateSubCommand1_Click()DimcodeAsStringcode=Trim(Text2.Text)SelectCasecode
Case"+"
Text4.Text=Val(Text1)+Val(Text3)
Case"-"
Text4.Text=Val(Text1)-Val(Text3)
Case"*"
Text4.Text=Val(Text1)*Val(Text3
Case"/"
IFVal(Text3)=0Then
MsgBox("除数不能为0,请重新输入")
Text3="“
Text4.Text=""
Text3.SetFocus
Else
Text4=Val(Text1)/Val(Text3
EndIFEndSelectEndSubPrivateSubCommand2_Click()EndEndSubPrivateSubCommand3_Click()Text1=""Text2=""Text3=""Text4=""Text1.SetFocusEndSub例4-7编写一个简便四则运算器,应用SelectCase判断运算符。运行界面如图【程序代码】4.3.3条件函数1.IIf函数2.Choose函数IIf函数的功能是根据表达式的值,来返回两部分中的其中一个。其语法格式为:IIf(<测试表达式>,<真值部分>,<假值部分>)例如,求分段函数:y=函数值的语句可以简单地表示为:y=Iif(x<0,2*x+3,4-3*x)Choose函数的功能是:从参数列表中选择并返回一个值。其语法格式为:Choose(<整数表达式>,<选项1>[,
<选项2>,...[,<选项n>]])下面的示例使用Choose函数来显示某天的执勤人员情况,strDay参数传递到过程之中的索引。FunctionGetChoice(strDayAsstring)strName=Choose(strDay,"王大虎","谢伟烽","马家栋","何右嘉","吴仁杰",)EndFunction当strDay的值为1时,返回字符串“王大虎”,当strDay的值为2时,返回字符串“谢伟烽”,以此类推。当strDay的值不在1~5之间时,返回NULL。4.3.3条件函数
VB中提供的条件函数:IIF()函数和Choose()函数,适用于简单的判断场合。前者代替IF语句,后者可代替SelectCase语句,IIF()函数函数形式:
IFF(表达式,条件为True时的值,条件为False时的值)例如:求x,y中大的数,放入变量T中,可以应用语句T=IFF(x>y,x,y)Choose()函数函数形式:
Choose(整型表达式,选项列表)其中整型表达式的值决定函数返回选项列表中的哪个值。如果整型表达式为1,则函数返回选项列表中的第一项的值,若整型表达式为2,则函数返回选项列表中的第2项的值,…依次类推。如果整型表达式的值小于1或大于列出的选项数目时,函数返回Null。如果整型表达式的值为非整型时,系统自动取其整数进行判断。例如,根据x是1~4的值,转换成“内科”、“外科”、“妇科”、“儿科”的语句可以写成:kb=Choose(x,“内科”,“外科”,“妇科”,“儿科”)4.4.2While循环4.4.1For循环返回退出4.4.3Do…LOOP循环控制结构4.4.4多重循环4.4循环结构4.4.2Do...Loop语句1.前测型Do...Loop循环在前测型Do...Loop循环中,只要<循环条件>为True就执行<循环体>。其语法格式为:Do[{While|Until}<循环条件>]<循环体>Loop例4-9:编写程序,根据多项式:π=求π的近似值。精度要求<10-12。根据题意和要求可先求出(1)设计流程图根据题目要求,设计出如图4-25所示的流程图。的和。输出循环次数isum=0#;temp=1#;i=1当temp>=1.0E-12sum=sum+tempi=i+1temp=1#/i/i输出π的近似值图4-25求π的近似值流程图(2)设计应用程序界面应用程序所需的控件及其属性值见表4-6。Picture1和Picture2分别用来显示运算次数i的值和π的近似值。控件Caption属性值Label1运算次数Label2近似值Picture1空白(设计时)Picture2空白(设计时)Command1求π的近似值表4-6求π的近似值应用程序控件属性值(3)编写代码根据流程图编写Command1_click事件的代码如下:PrivateSubCommand1_Click()DimsumAsDouble,tempAsDouble,piAsDoubleDimiAsDoublesum=0#temp=1#i=1图4-26求π的近似值的程序运行结果DoWhile(temp>=0.000000000001)sum=sum+tempi=i+1temp=1#/i/iLooppi=Sqr(6#*sum)Picture1.Printi;"次"Picture2.PrintpiEndSub由于程序代码是直接从设计界面拷贝过来,所有代码书写格式已经经过VB格式化。程序运行情况参见图4-26。输入数据nVal(Text1.Text)>2147483647TrueFalse数据溢出,重新输入n当k<=m=1k=k+1nModk=0TrueFalses=0TrueFalse例4-10:编写程序::判断一个数是否为素数。(1)设计流程图根据题目要求,设计出如图4-27所示的流程图。当k<=图4-27求素数流程图n不是素数n是素数Andm=0(2)设计应用程序界面应用程序所需的控件及其属性值见表4-7。控件Caption属性值Label1自然数Label2空白(设计时)Text11空白(设计时)Command1输入自然数后单击此按钮表4-7判断素数应用程序控件属性值(3)编写代码根据流程图,编写Command1_click事件代码如下:PrivateSubCommand1_Click()Dimmasinteger,kasintegerDimnAsLongIfVal(Text1.Text)>2147483647ThenMsgBox"数据溢出,请重新输入",vbOKOnly+vbOKCancel+vbInformation,"数据错误"Text1.Text=""Else图4-28判断素数程序运行实例
n=CLng(Text1.Text)m=0:k=2DoWhilek<=Sqr(n)Andm=0IfnModk=0Thenm=1Elsek=k+1EndIfLoopIfm=0ThenLabel2.Caption="是一个素数"ElseLabel2.Caption="不是一个素数"EndIfEndIfText1.SetFocus
EndSub2.后测型Do...Loop循环Do...Loop语句的另一种演变形式是先执行<循环体>,然后在每次执行后测试<循环条件>。称为后测型Do...Loop循环。这种形式保证<循环体>至少执行1次,其语法格式为:Do
<循环体>Loop[{While|Until}<循环条件>]输入m,nm存放大数,n存放小数输出n求m/n的余数m←n数n←r的余数例4-11:求两个正整数m和n的最大公约数。求最大公约数最常用的方法是辗转相除法。其设计思路是:(1)假设m大于n;(2)用n作除数除m,得余数r。(3)若r≠0,则令m←n,n←r,继续相除得到新的r值,直到r=0为止。(4)最后的n即为最大公约数。解题步骤如下:(1)设计流程图根据题意,设计出如图4-29所示流程图。图4-29求最大公约数的流程图直到r=0(2)设计应用程序界面所需添加的控件的属性值参见表4-8。控件Caption(或Text)属性值Label1请输入两个正整数Label2mnLabel3m和
n的最大公约数是Label4空白(设计时)Text11空白(设计时)Text12空白(设计时)Command1求
解表4-8判断素数应用程序控件属性值(3)编写代码PrivateSubCommand1_Click()DimmAsLong,nAsLong,tempAsLongIf(Val(Text1.Text)=0OrVal(Text2.Text)=0)OrVal(Text1.Text)>2147483647OrVal(Text2.Text)>2147483647ThenMsgBox"输入的数0或溢出,请重新输入!"MsgBox"输入的数0或溢出,请重新输入!",vbInformation+vbOKOnly,"数据错误"Text1.Text=""Text2.Text=""图4-30求最大公约数程序运行实例
Text1.SetFocusElsem=Val(Text1.Text)n=Val(Text2.Text)Ifm<nThentemp=m:m=n:n=tempEndIfDor=mModnm=nn=rLoopWhiler<>0Label3.Caption=mEndIfEndSub4.4.1For...Next语句Do循环使用于在不知道执行多少次<循环体>时。有时,循环的次数是已知的,这时最好使用For...Next循环。与Do循环不同,For循环使用一个叫做计数器的变量,每重复一次循环之后,计数器变量的值就会增加或者减少。For循环的语法如下:For<循环变量>=<初值>To<终值>[Step<步长>]<循环体>Next[<循环变量>]4.4.1循环结构4.4.1For循环语句For循环语句是计数型循环语句,用于控制循环次数预知的循环结构。语句形式:For循环变量=初值To终值[Step步长]
Next循环变量说明:循环变量必须是数值型步长:一般为正数,初值小于终值;若为负数,初值大于终值;
Step缺省时默认为1。语句块:重复执行的部分,构成循环体,可以是一句或多句。ExitFor:退出循环,执行Next后的下一条语句。循环次数:n=Int(
+1)<语句块>
[ExitFor]<语句块>循环体终值-初值
步长TF循环变量=初值循环变量≤终值语句块有ExitFor语句块循环变量=循环变量+步长FT步长>0时For循环语句流程示意图例4-12:求1~1000之间所有能够被13整除的数。按每行各行10个数排满足条件的数。(1)设计流程图根据题意,设计如图4-34所示流程图。图4-31求被1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2023-2024学年天津市红桥区高三(上)期末语文试卷
- 2023年天津市滨海新区高考语文三模试卷
- 2023年药用粉碎机械项目融资计划书
- 2023年抗结剂项目融资计划书
- 《社会工作评估》课件
- 2023年妇科用药项目筹资方案
- 热工基础习题库含参考答案
- 养老院老人生命体征监测制度
- 养老院老人健康饮食制度
- 《右腹股沟斜疝》课件
- 小丑电影课件教学课件
- 浙江省绍兴市2025届高三上学期一模地理试题 含解析
- 广发银行广告合同
- 安全与急救学习通超星期末考试答案章节答案2024年
- 电动车棚消防应急预案
- 金属冶炼知识培训
- 2024-2025学年度广东省春季高考英语模拟试卷(解析版) - 副本
- 商会内部管理制度
- 2024年物业转让协议书范本格式
- 幼儿园小班健康《打针吃药我不怕》课件
- 广州英语小学六年级英语六上册作文范文1-6单元
评论
0/150
提交评论