VB课件第4章分支结构.docx

上传人:b****5 文档编号:6007686 上传时间:2023-01-02 格式:DOCX 页数:22 大小:529.70KB
下载 相关 举报
VB课件第4章分支结构.docx_第1页
第1页 / 共22页
VB课件第4章分支结构.docx_第2页
第2页 / 共22页
VB课件第4章分支结构.docx_第3页
第3页 / 共22页
VB课件第4章分支结构.docx_第4页
第4页 / 共22页
VB课件第4章分支结构.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

VB课件第4章分支结构.docx

《VB课件第4章分支结构.docx》由会员分享,可在线阅读,更多相关《VB课件第4章分支结构.docx(22页珍藏版)》请在冰豆网上搜索。

VB课件第4章分支结构.docx

VB课件第4章分支结构

第4章分支结构

我们在处理问题的过程中,经常会碰到需要根据不同条件进行不同处理的事情

例如:

现在需要设计一个程序,处理下面问题:

求变量的x的绝对值

x当x>=0

|x|=

-x当x<0

分支结构有两种语句:

IF

Selectcase

§1单行结构条件语句

一、格式:

If<条件>Then<语句1>[Else<语句2>]

二、功能:

如果“条件”为True,执行“语句1”,否则执行“语句2”。

Else缺省时:

如果“条件”为True,执行“语句1”,否则执行后继语句。

三、说明:

1、其中“条件”通常是关系表达式或布尔表达式,也可以是数值表达式。

若为数值表达式,则非0为真,0为假。

2、单行条件结构语句要求在一行内书写完毕,即不能超过一行1023个字符的限度。

其中:

语句1和语句2可以是单个语句,也可以是冒号分隔的多个语句序列。

当语句1或语句2中又包含条件语句时,成为条件语句的嵌套,嵌套深度没有限制。

但受到语句行长度的限制。

四、举例

例4_1_1输入三个数a,b,c,输出三者之中最大者。

1.分析:

问题可以描述为:

1)输入三个数值

2)从中找出最大值

3)输出结果

2.细化:

1)界面设计

2)算法设计

1、用InputBox函数把三个数值输入到变量a,b,c中

2、首先假设a最大,放在变量max中,然后分别与b,c进行比较,保留其中最大的数在变量max中。

3、用Print方法输出max的值。

3)事件代码编写:

OptionExplicit

PrivateSubCommand1_click()

Dima!

b!

c!

max!

a=InputBox("请输入第一个数:

")

b=InputBox("请输入第二个数:

")

c=InputBox("请输入第三个数:

")

max=a'设a为最大值

Ifb>maxThenmax=b'比较后保留最大值

Ifc>maxThenmax=c

Printa;"、";b;"与";c;"之中最大值是:

"

Print

Printmax

EndSub

PrivateSubCommand2_click()

End

Endsub

例4_1_2输入系数a,b编程序解方程ax+b=0

分析:

当a≠0时,x=-b/a;

当a=0时,方程无解。

因为用0作除数会产生溢出的运行错误。

所以在计算x的值之前,要先判断a是否为0.

事件过程:

PrivateSubCommand1_Click()

Dima!

b!

x!

a=Val(InputBox("请输入系数a:

"))

b=Val(InputBox("请输入系数b:

"))

Ifa<>0Thenx=-b/a:

Print"x=";xElsePrint"方程无解"

EndSub

1X>0

例4_1_3计算SgnX=0X=0

-1X<0

事件过程:

PrivateSubCommand1_Click()

Dimx!

y%

x=Val(InputBox("请输入x的值:

"))

Ifx>=0Thenifx=0Theny=0elsey=1elsey=-1

Print“X=”;x,”Y=”;y

EndSub

五、使用IIF函数

可以用IIF函数实现一些较简单的分支结构。

1、格式:

IIF(<条件>,<表达式1>,<表达式2>)

2、功能:

条件为真时,返回<表达式1>的值,否则,返回<表达式2>的值。

例如,例4_1_3可以改为:

PrivateSubCommand1_Click()

Dimx!

y%

x=Val(InputBox("请输入x的值:

"))

y=IIf(x>=0,IIf(x=0,0,1),-1)

Print“X=”;x,”Y=”;y

EndSub

§2块结构条件语句

当行结构条件语句中,如果条件分支执行的操作比较复杂,不能在一个逻辑行内书写完毕,可以使用块结构条件语句。

一、一般格式:

If<条件1>Then

<语句块1>

[Elseif<条件2>Then‘elseif必须写在一起

<语句块2>]

[Elseif<条件3>Then

<语句块3>]

[Else

<语句块n>]

Endif

二、功能:

块结构条件语句的功能是:

如果“条件1”为True,执行“语句块1”;否则,如果“条件2”为True,执行“语句块2”;...;否则执行”语句块n”。

三、说明:

1.在VB中,通常把数值表达式看成为逻辑表达式的特例,非0值表示True,0表示False。

即条件语句中的“条件”不但可以是逻辑表达式或关系表达式,还可以是数值表达式。

例如:

If2then

Print“True”

Else

Print“False”

Endif

2.“语句块”中的语句不能与其前面的Then写在同一行上,否则VB认为是一个单行结构的条件语句。

对于块结构语句,必须以EndIF结束,而单行结构不需要Endif

3.当省略Elseif子句和Else子句时,块结构条件语句简化为:

If<>Then

<>

Endif

可见,块结构条件语句完全可以代替单行结构条件语句。

四、举例

例4_2_1例3_3_3、鸡兔同笼问题。

鸡有两条腿,兔子有四条腿。

已知鸡和兔子一共有h只,总腿数有f条,问鸡、兔各有多少只?

分析:

设鸡有x只,兔有y只,则

x+y=h

2x+4y=f

整理,得:

X=2H-F/2

Y=F/2-H

从上面的式子可看到,如果要保证X和Y是非负整数,F必是偶数,H是整数,而且要满足:

2H≤F≤4H

1.程序:

PrivateSubCommand1_Click()

DimhAsLong,fAsLong,xAsLong,yAsLong

h=InputBox("输入头数:

")

f=InputBox("输入脚数:

")

IffMod2=0And2*h<=fAndf<=4*hThen

x=2*h-f/2

y=f/2-h

Printh;"个头:

",f;"只脚:

"

Print"鸡有:

";x;"只"

Print"兔有:

";y;"只"

Else

Print“输入的值不能满足条件!

EndIf

Endsub

试输入:

51,176

例4_2_2从键盘上输入三个数,若这三个数能构成三角形的三条边,则求这个三角形的面积;否则打印相应的错误信息。

1.分析:

三个数能构成三角形的三条边长的充分必要条件是:

1)三个数均大于0

2)任意两条边的和大于第三边

2.程序:

PrivateSubCommand1_Click()

DimaAsSingle,bAsSingle,cAsSingle

DimpAsSingle,sAsSingle

DimtAsBoolean

Cls

a=InputBox("请输入三角形的第一条边:

")

b=InputBox("请输入三角形的第二条边:

")

c=InputBox("请输入三角形的第三条边:

")

t=a>0Andb>0Andc>0

t=tAnd(a+b>cAndb+c>aAnda+c>b)

IftThen

p=(a+b+c)/2

s=Sqr(p*(p-a)*(p-b)*(p-c))

Print"三角形的三条边长:

";a;b;c

Print"三角形的面积为:

";s

Else

Print"数据无效!

不能构成三角形!

"

EndIf

EndSub

 

例4_2_3求一元二次方程Ax2+Bx+C=0的根,A≠0

1.分析:

>0两个实根

b2-4ac=0两个相同实根

<0一对共轭复根

2.程序

PrivateSubcommand1_click()

Dima!

b!

c!

m!

n!

a=Val(InputBox("a="))

b=Val(InputBox("b="))

c=Val(InputBox("c="))

ifa<>0then

m=b^2-4*a*c

n=-b/2/a

Ifm>=0Then

Print"x1=";n+Sqr(m)/2/a

Print"x2=";n-Sqr(m)/2/a

Else

Print"x1=";n;"+i";Sqr(-m)/2/a

Print"x2=";n;"-i";Sqr(-m)/2/a

Endif

Else

Print“a=”;a;”错误!

EndIf

EndSub

例4_2_4输入一个数值(0~6),用中文显示是星期几。

分析:

使用日期函数WeekDayName()

程序:

PrivateSubText1_KeyPress(KeyAsciiAsInteger)

Dimx$

x=Chr(KeyAscii)

Ifx<"0"Orx>"6"Then

Text1.Text=""

Label1.Caption="输入数字"&vbCrLf&"(0~6)"

Else

Text1.Text=""

Label1.Caption=WeekdayName(Val(x)+1)

EndIf

EndSub

PrivateSubForm_Load()

Label1.Caption="输入数字"&vbCrLf&"(0~6)"

EndSub

§3情况语句

当程序具有多个分支时,使用情况语句更为清晰。

一、格式:

SelectCase<测试条件>

[Case<表达式表列1>

[<语句块1>]]

[Case<表达式表列2>

[<语句块2>]]

……

[caseelse

[<语句块n+1>]]

EndSelect

二、功能:

根据”测试条件”值(亦称“测试表达式”),从多个语句块中选择符合条件的一个语句块执行.

先对”测试表达式”求值,然后顺序测试该值与哪一个case子句中的”表达式表列”相匹配;如果找到了,则执行该case分支有关的语句块,然后把控制转移到EndSelect后面的语句;如果没有找到,则执行caseelse分支有关的语句块,然后把控制转移到endselect后面的语句.

五、说明:

1.“测试条件”可以是数值表达式或字符串表达式,通常为变量.

2.“表达式表列”中的表达式必须与“测试条件”的类型相同

3.“表达式表列”称为域值,可以是下列形式或它们的组合

形式

示例

说明

表达式

Case100*a,1000

数值表达表或字符串表达式

表达式To表达式

Case1000To2000

Case“a”To“n”

指定一个值范围

Is关系式

CaseIs<3000

指定一个值范围

六、举例

例4_3_1求SgnX函数的值。

程序PrivateSubForm_Activate()

Dimx!

y%

x=Val(InputBox("x="))

SelectCasex

Case0

y=0

CaseIs>0

y=1

CaseIs<0

y=-1

EndSelect

Print"X=";x,"SgnX=";y

EndSub

例4_3_2(龚P82例4.3)已知输入某课程的百分制成绩mark,要求显示对应五级制的评定,评定条件如下:

优(mark>=90)

良(80<=mark<90)

等级=中(70<=mark<80)

及格(60<=mark<70)

不及格(mark<60)

程序PrivateSubForm_Activate()

Dimmark%,y$

mark=Val(InputBox("请输入成绩:

"))

SelectCasemark

CaseIs<60

y="不及格"

CaseIs<70

y="及格"

CaseIs<80

y="中"

CaseIs<90

y="良"

CaseElse

y="优"

EndSelect

Print"分数:

";mark

Print"等级:

";y

EndSub

例4_3_3(龚P83例4.4)将任意三个数按照大小顺序排列输出.

做法1:

穷举法

程序:

(P4_3_3a)

PrivateSubCommand1_Click()

Dima!

b!

c!

Cls

a=InputBox("a=")

b=InputBox("b=")

c=InputBox("c=")

Ifa>bAndb>cThenPrinta,b,c

Ifa>bAndb<=cAnda>cThenPrinta,c,b

Ifa>bAndb<=cAnda<=cThenPrintc,a,b

Ifa<=bAndb<=cThenPrintc,b,a

Ifa<=bAndb>cAnda>cThenPrintb,a,c

Ifa<=bAndb>cAnda<=cThenPrintb,c,a

EndSub

做法2:

起泡法

程序:

(P4_3_3c)

PrivateSubCommand1_Click()

Dima!

b!

c!

t!

Cls

a=InputBox("a=")

b=InputBox("b=")

c=InputBox("c=")

Ifa

a=b:

b=t

Ifa

a=c:

c=t

Ifb

b=c:

c=t

Printa,b,c

EndSub

例4_3_4(龚P85例4.7)设计10以内四则运算题,当学生输入答案后,计算机能够判断答案是否正确,程序结束时给出成绩。

分析:

(1)操作数n1、n2和运算符n_op的值由RND函数随机给出;

(2)当给出答案后,在文本框中显示试题及答案正确与否;

(3)当结束计算时,显示得分结果。

(4)使用控件

label1:

显示题目

text1:

输入答案

text2:

显示题号、题目、计算结果、正确与否和最后显示得分

command1:

最后计算得分

(5)使用变量

n1、n2:

操作数

n_op:

运算符代码值

op:

运算符

r:

计算机运算结果值

t:

题号

n_c、n_e:

答案正确、错误的计数累加单元

程序:

Dimn_c%,n_e%,r#,t%

PrivateSubForm_Load()‘随机产生题目并在label1上显示

Dimn1%,n2%,n_op%,op$

Randomize

n1=Int(Rnd*10+1)

n2=Int(Rnd*10+1)

n_op=Int(Rnd*4+1)

SelectCasen_op

Case1

op="+":

r=n1+n2

Case2

op="-":

r=n1-n2

Case3

op="×":

r=n1*n2

Case4

op="÷":

r=n1/n2

EndSelect

Label1.Caption=n1&op&n2&"="

EndSub

'在Text1中输入答案后,计算机判断是否真确,并把结果显示在Text2上面

PrivateSubText1_KeyPress(KeyAsciiAsInteger)

IfKeyAscii=13Then

t=t+1

Text2=Text2&"("&t&")"

IfVal(Text1.Text)=rThen

Text2=Text2&Label1.Caption&Text1&"√"&vbCrLf

n_c=n_c+1

Else

Text2=Text2&Label1.Caption&Text1&"×"&vbCrLf

n_e=n_e+1

EndIf

Text1=""

Text1.SetFocus

Form_Load

Text2.SelStart=Len(Text2)‘返回或设置所选择的文本的起始点

‘该属性在这里的作用是每当文本框内容改变时便以改变后的文本框的内容长度为起始点,即将输入焦点移动到文字最后

EndIf

EndSub

'单击Command1开始计分,并把得分结果显示在Text2上

PrivateSubCommand1_Click()

Label1=""

Text2=Text2&String(25,"_")&vbCrLf_

&"一共计算"&(n_c+n_e)&"道题,"_

&"得分:

"&Round(n_c/(n_c+n_e)*100)

Text2.SelStart=Len(Text2)

EndSub

§4计时器(P148)(龚P161)

VB可以利用系统内部的时钟计时,而且可以使用计时器(Timer)控件,由用户定制时间间隔(Interval),在每一个时间间隔触发一个计时器事件。

它的默认名称为TimerX(X=1、2、3…)。

一、属性

1.Interval

格式:

[<对象名>.]Interval[=<表达式>]

整数型。

用于返回或设定计时器触发事件的时间间隔。

时间间隔以毫秒为单位,取值范围0—65535毫秒。

因此,最大时间间隔不能超过65秒。

通常60000毫秒为1分钟,

如果把Interval属性值设为1000,则表示每秒钟产生一个Timer事件。

如果希望每秒钟发生n个Timer事件,则Interval属性值为1000/n。

如果Interval属性值为0,则计时器无效。

2.Enabled

布尔型。

TrueTimer有效。

默认值

二、事件

Timer

计时器只支持Timer事件。

每当经过一个Interval属性规定的时间间隔,就触发一次Timer事件。

即自动执行一次Timer事件程序。

计时器主要用于在程序中监视和控制时间进程。

例4_4_1设计图形闪烁程序。

所谓闪烁,是指图形交替地显示和隐藏。

这可以通过计时器的Timer事件过程,改变对控件的Visible属性达到目的。

程序:

PrivateSubCommand1_Click()

Timer1.Enabled=True‘Timer1.Interval=500

EndSub

PrivateSubCommand2_Click()

Timer1.Enabled=False

Picture1.Visible=True

EndSub

PrivateSubTimer1_Timer()

Picture1.Visible=NotPicture1.Visible

EndSub

例7.9(S7-9P162)用计时器控制蝴蝶动作

DimpickbmpAsBoolean

PrivateSubTimer1_Timer()

IfpickbmpThen

Image1.Picture=Image3.Picture

Else

Image1.Picture=Image2.Picture

EndIf

pickbmp=Notpickbmp

EndSub

PrivateSubCommand1_Click()

End

EndSub

例4_4_2设计流动字幕版(从右至左移动)。

分析:

设置两个命令按钮“开始”和“停止”,当按下“开始”,

将Timer1.Enabled=True,执行Timer事件程序,按下“停止”,

将Timer1.Enabled=False,停止执行Timer事件程序。

 

PrivateSubTimer1_Timer()

IfLabel1.Left+Label1.Width<=0Then

Label1.Left=Form1.Width

Else

Label1.Left=Label1.Left-50

EndIf

EndSub

如果标签往右移动时,程序应改为:

(P4_4_2b)

PrivateSubTimer1_Timer()

IfLabel1.Left>=Form1.WidthThen

Label1.Left=0-Label1.Width

Else

Label1.Left=Label1.Left+50

EndIf

EndSub

 

如果例7、9题使蝴蝶往右上方向飞,飞出窗体后,使它重定位到右下方再向右上方飞,程序怎样设计?

PrivateSubTimer1_Timer()

IfpickbmpThen

Image1.Picture=Image3.Picture

Else

Image1.Picture=Image2.Picture

EndIf

IfImage1.Left<=Form1.WidthThen

Image1.Left=Image1.Left+Form1.Width/50

Image1.Top=Image1.Top-Form1.Height/50

Else

Image1.Left=-Image1.Width

Image1.Top=Form1.Height

EndIf

pickbmp=Notpickbmp

EndSub(S7-9P162a)

例4_4_3动画公鸡

分析:

设置两个计时器。

一个(Timer1)用于处理公鸡的图片变化。

设置8个图像框和7张公鸡的图片。

将公鸡图片预先分别放

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1