第4章VB控制结构_第1页
第4章VB控制结构_第2页
第4章VB控制结构_第3页
第4章VB控制结构_第4页
第4章VB控制结构_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第4章VB控制结构4.1

顺序结构4.2

选择结构4.3

循环结构4.4程序示例4.1顺序结构流程结构(如右图)自上而下一句一句地执行先执行语句A再执行语句B【例4.1】假设10存放在变量x中,20存放在变量y中,交换x和y中的值,使得20存放在x中,10存放在y中。temp=xx=yy=temp4.1顺序结构程序代码:PrivateSubCommand1_Click()DimxAsInteger,yAsInteger,tempAsInteger

x=InputBox("inputx:",,10)y=InputBox("inputy:",,20)temp=xx=yy=tempPrint"交换后:"&x&","&yEndSub4.1顺序结构4.2选择结构4.2.1If语句4.2.2SelectCase语句4.2.3IIf函数4.2.1If语句单分支结构(If…Then语句)双分支结构(If…Then…Else语句)多分支结构(If…Then…[ElseIf…][Else…]EndIf语句)If语句的嵌套1.单分支结构(If…Then语句)单行形式:If

<条件>

Then

<语句块A>多行形式:

If<条件>Then

<语句块A>

End

If

语法格式:1.单分支结构(If…Then语句)单行形式:Ifx<yThent=x:x=y:y=t例:通过比较与交换x、y中的数,使得x大于y

多行形式:Ifx<yThent=xx=yy=tEndIf2.双分支结构(If…Then…Else语句)语法格式:单行形式:If

<条件>

Then

<语句块A>

Else

<语句块B>多行形式:

If

<条件>

Then

<语句块A>Else<语句块B>End

If

2.双分支结构(If…Then…Else语句)例:用双分支条件语句计算以下分段函数的值。代码设计:

PrivateSubCommand1_Click()DimxAsSingle,yAsSinglex=Val(Text1.Text)

If

x<=0

Then

y=Abs(x)

Else

y=x^2+1Text2.Text=yEndSubIf

x<=0

Then

y=Abs(x)

Else

y=x^2+1End

If3.多分支结构语法格式:If

<条件1>

Then

<语句块1>[ElseIf

<条件2>

Then

<语句块2>]…[Else

语句块n+1]End

If

3.多分支结构说明:不管有几个分支,程序执行了一个分支后,其余分支不再执行。根据流程,当多分支中有多个条件都为True,则只执行第一个为True的分支的语句块。ElseIf子句和Else子句是可选项,若省略前者则退化为双分支结构,若两者都省略则退化为单分支结构。3.多分支结构例4.3:编程计算下列分段函数值PrivateSubCommand1_Click()DimxAsSingle,yAsSinglex=Text1.Text

Ifx<=0Theny=2-x

ElseIfx<=2Theny=x+2

ElseIfx<=5Theny=x^2

Elsey=25-x

End

IfText2=yEndSub代码界面4.If语句的嵌套在If语句(单分支,或双分支,或多分支结构)的语句块中又包含一个If语句(单分支,或双分支,或多分支结构)。格式If

<表达式1>

Then

If

<表达式11>

Then

End

If

…End

If

说明:(1)对于嵌套结构,为了增强程序的可读性,应该采用缩进形式书写;(2)If语句是多行形式时,If必须有EndIf与之配对,表示If结构的结束。对于多层If嵌套,EndIf与它最接近的If配对。4.If语句的嵌套【例4.4】用If语句的嵌套形式,编程计算例4.5的分段函数值。4.If语句的嵌套代码设计:PrivateSubCommand1_Click()DimxAsSingle,yAsSinglex=Text1.Text

Ifx<=2Then

Ifx<=0Then

y=2-xElse

y=x+2EndIf

Else

Ifx<=5Then

y=x^2Else

y=25-xEndIf

EndIfText2=yEndSub4.2.2Select

Case语句SelectCase<测试表达式>

Case<表达式列表1>

语句块1[Case<表达式列表2><语句块2>]…[Case<表达式列表n><语句块n>][CaseElse<语句块n+1>]EndSelect格式:说明:(1)<表达式列表>有四种形式

①表达式

例:Case2

②表达式1To表达式2

例:Case60To100

③Is关系运算符表达式

例:CaseIs<60

④用逗号分隔的以上3种形式的列表

例:Case1To4,10,13,Is>15注:To指定范围,小值在前,大值在后。例:Case10To1×不能用逻辑运算符将多个Is指定的范围组合在一起。例:CaseIs>60AndIs<70×

(2)SelectCase语句与多分支If语句的功能类似。一般来说,可以使用多分支If语句的地方,也可以使用SelectCase语句。(3)根据流程,“测试表达式”与多个Case子句相匹配,只执行第一个匹配的Case子句的语句块,然后就执行EndSelect语句。4.2.2Select

Case语句【例4.5】编程求指定的某一年某个月份的天数。分析:月份有三种情况,即31天的月份、30天的月份和28或29天的月份。第三种情况与是否闰年有关,闰年的二月为29天,非闰年的二月为28天。能被4整除但不能被100整除的年(如2004年),或者能被400整除的年(如2000年)都为闰年。4.2.2Select

Case语句代码设计一:界面设计:PrivateSubCommand1_Click()DimyeaAsInteger,monAsIntegeryea=Val(Text1.Text)mon=Val(Text2.Text)

SelectCasemon

Case2 '2月

If(yeaMod4=0AndyeaMod100<>0)Or(yeaMod400=0)ThenText3.Text=29

ElseText3.Text=28

EndIf

Case4,6,9,11 '小月

Text3.Text=30

CaseElse ‘大月

Text3.Text=31EndSelectEndSubSelectCase…End

Select部分代码可以用多分支If语句替代,如何改?4.2.2Select

Case语句代码设计二:界面设计:PrivateSubCommand1_Click()DimyeaAsInteger,monAsIntegeryea=Val(Text1.Text)mon=Val(Text2.Text)

Ifmon=2Then'如果是2月

If(yeaMod4=0AndyeaMod100<>0)Or(yeaMod400=0)ThenText3.Text=29

ElseText3.Text=28

EndIf

ElseIfmon=4Ormon=6Ormon=9Ormon=11ThenText3.Text=30

ElseText3.Text=31

EndIfEndSub可以看出,使用SelectCase语句来判断月份,简化了条件的书写。4.2.2Select

Case语句4.2.3IIf函数(选讲)语法格式:IIf(条件,表达式1,表达式2)说明:(1)“条件”是一个逻辑量,或类型转换得到的逻辑量。(2)IIf函数与If…Then…Else语句作用类似。例:r=IIf(x>0,x,-x)

与Ifx>0Thenr=xElser=-x等价小结顺序结构赋值语句条件结构单分支结构(If…Then语句)双分支结构(If…Then…Else语句)多分支结构(If…Then…[ElseIf…][Else…]EndIf语句)If语句的嵌套练习1、输入一学生VB成绩,评定其等级。方法是:90~100分为“优秀”,80~89分为“良好”,70~79分为“中等”,60~69分为“及格”,60分以为“不合格”。2、编写程序,根据用户在文本框Text1中输入的文本,统计其中数字(0~9)的个数、英文字母(区分大小写)的个数和其他字符的个数,并在窗体中输出统计结果。4.3循环结构

4.3.1For循环结构4.3.2Do…Loop循环结构4.3.3While…Wend循环结构4.3.4循环的嵌套4.3.1For循环结构引例:利用For循环求累加和,s=1+2+…+100PrivateSubCommand1_Click()DimiAsInteger,sAsIntegerFori=1To100Step1s=s+iNextiPrintsEndSub4.3.1For循环结构For

循环变量=初值To终值[Step步长][语句块][ExitFor]循环体

[语句块]

Next[循环变量]功能:循环变量依次取初值到终值之间的以步长为增量的数列的值,每取一个值执行一次循环体。初值、终值、步长均为数值表达式,其值可以是整数,也可以是实数。循环变量+步长→循环变量。步长=1时,可省略语法:循环变量为一个数值型变量,可以是整型或实型。4.3.1For循环结构步骤描述:(1)计算出初值、终值和步长。(2)将初值赋给循环变量。(3)判断循环变量是否超过终值。超过终值,则退出循环。否则:(4)执行循环体。(5)执行Next语句,循环变量+步长→循环变量。(6)转到(3),进行循环。步长>0时循环变量>终值为超过;Fori=1To10Step1s=s+i

Nexti步长<0时循环变量<终值为超过。Fori=10To1Step-1s=s+i

Nexti4.3.1For循环结构For循环的次数循环次数注:循环变量i为整型,则2.4、4.9和0.6分别转换为整数2、5、1,分别作初值、终值和步长,执行循环体次数为:Int((5-2)/1)+1=4次,i=6时退出循环。PrivateSubCommand1_Click()Dimi%,x!,n1%,n2%

Fori=2.4To4.9Step0.6n1=n1+1

NextiPrinti,n1

Forx=2.4To4.9Step0.6n2=n2+1

NextxPrintx,n2EndSub注:循环变量x为单精度型,则2.4、4.9和0.6分别作为初值、终值和步长,x=5.4时退出循环,Int((4.9-2.4)/0.6)+1=5次。例:4.3.1For循环结构说明(1)初值、终值和步长是在循环前计算并确定,即使相应表达式所包含的变量在循环体内被改变,也不会受影响。循环变量在循环体中可以被赋值,但会使循环次数发生变化。

PrivateSubCommand1_Click()Dimi%,m%,n%,p%m=0:n=10:p=1

Fori=mTonStepp+2m=m+1n=n+1p=p+1i=i+1

NextiPrintm;n;p;iEndSub输出结果:

313412PrivateSubCommand1_Click()DimiAsInteger,sAsInteger

Fori=1To100s=s+i

Ifi>=50Then

ExitFor'如果i≥50,则提前退出循环

NextiPrintsEndSub4.3.1For循环结构说明(2)有时会根据解决问题的需要,结合条件判断和

ExitFor语句,在循环变量超过终值之前,提前退出循环,执行紧接在Next之后的语句。

例:求s=1+2+…+50。4.3.1For循环结构【例4.6】编写程序,界面如图所示。要求:单击“运行”按钮,产生5个随机两位正整数,并计算它们的和与乘积,并分别在Text1、Text2、Text3中显示出来。

PrivateSubCommand1_Click()Dimi%,x%,Sum%DimProductAsDouble

Sum=0:Product=1Text1.Text=""Randomize

…EndSub4.3.1For循环结构代码:PrivateSubCommand1_Click()Dimi%,x%,Sum%DimProductAsDouble'以免溢出

Sum=0:Product=1:Text1.Text=""Randomize

For

i=1To

5x=Int((99-10+1)*Rnd+10)

Text1.Text=Text1.Text&""&CStr(x)

Sum=Sum+x

Product=Product*x

Next

iText2.Text=SumText3.Text=ProductEndSubWhile循环(当型循环)Until循环(直到型循环)判断前置式DoWhile

循环条件

[语句块1]

[ExitDo]

[语句块2]LoopDoUntil

循环条件

[语句块1]

[ExitDo]

[语句块2]Loop判断后置式Do

[语句块1]

[ExitDo]

[语句块2]LoopWhile

循环条件Do

[语句块1]

[ExitDo]

[语句块2]

LoopUntil

循环条件4.3.2Do…Loop循环结构4.3.2Do…Loop循环结构(1)“循环条件”可以是关系表达式或逻辑表达式,也可以是数值表达式(非0→True,0→False)。

说明(2)对于判断前置式的Do…Loop循环,是先判断循环条件,决定是否执行循环体,因此循环体可能一次都不执行。而对于判断后置式的Do…Loop循环,是先执行循环体,然后再判断循环条件,因此循环体至少要被执行一次。

(3)While循环和Until循环相互转换时,循环条件应当相反。

(4)在使用Do…Loop循环时,随着循环体一次又一次地被执行,应当能使循环条件发生改变,能在有限次数的循环后退出循环。(5)循环体中可以包含一条或多条ExitDo语句,用来强行退出循环,转至Loop语句的下一条语句执行。

(6)在Do…Loop循环中,可以既不使用While关键字,也不使用Until关键字以及后面的循环条件。

PrivateSubCommand1_Click()DimbAsBoolean,xAsIntegerb=Truex=12DoWhilebPrintxLoopEndSub死循环PrivateSubCommand1_Click()

DimiAsInteger,sAsInteger

i=1Dos=s+ii=i+1Ifi>100ThenExitDoLoopPrintsEndSubCtrl+Break可中断死循环

4.3.2Do…Loop循环结构【例4.7】利用如下公式计算e的近似值,当第n项的值小于10-6时,终止运算。分析:总体是一个求累加和的问题循环次数未知,给出了循环控制条件FMn=FMn-1*n4.3.2Do…Loop循环结构代码设计:

PrivateSubCommand1_Click()Dimn%,fenmu&,tongxiang!,sum!n=0

fenmu=1tongxiang=1

DoWhiletongxiang>10^-6sum=sum+tongxiang

n=n+1

fenmu=fenmu*n

tongxiang=1/fenmu

LoopText1.Text=sumEndSub思考:将代码中的Do…Loop部分改写成其他形式,如何改?

4.3.2While…Wend循环结构(选讲)语法格式While<条件表达式>[语句块]Wend例:求s=1+2+…+100PrivateSubCommand1_Click()

DimiAsInteger,sAsInteger

i=1

Whilei<=100s=s+ii=i+1

WendPrintsEndSub4.3.4循环的嵌套循环的嵌套:一个循环的循环体中又完整地包含另一个循环结构,也称为多重循环。例:PrivateSubForm_Click()DimiAsInteger,jAsIntegerFori=1To4

Forj=1To4Printi;j

NextjPrintNextiEndSub4.3.4循环的嵌套【例4.8】打印九九乘法表。要求:运行程序,单击窗体,输出九九乘法表,如图所示。

4.3.4循环的嵌套代码设计:

PrivateSubForm_Click()DimiAsInteger,jAsInteger,strAsStringPrintPrintTab(35);"9*9乘法表"

Print

Fori=1To9

Forj=1Toistr=i&"×"&j&"="&i*jPrintTab((j-1)*9+1);str; '注意str后面要跟分号

NextjPrint'换行

NextiEndSub

For

j=1To

20…Nexti …Nextj循环的嵌套说明(1)多个For循环嵌套时,内循环变量与外循环变量不能同名。(2)外循环必须完全包含内循环,不能交叉。DoWhile/Until……ForJ=…Loop…NextJ

Fori=1To10循环的嵌套说明(3)For循环结构和Do…Loop循环结构可以互相嵌套

ForI=……ForJ=……NextJ…NextIForI=……DoWhile/Until……Loop…NextIDoWhile/Until……ForJ=……NextJ…LoopDoWhile/Until……DoWhile/Until……Loop…Loop循环的嵌套说明(4)循环结构可以与选择结构互相嵌套。ForI=……

IF…Then…

EndIF…NextIIF…Then

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论