第五章 选择分支与循环嵌套.docx

上传人:b****2 文档编号:17514049 上传时间:2023-07-26 格式:DOCX 页数:24 大小:76.75KB
下载 相关 举报
第五章 选择分支与循环嵌套.docx_第1页
第1页 / 共24页
第五章 选择分支与循环嵌套.docx_第2页
第2页 / 共24页
第五章 选择分支与循环嵌套.docx_第3页
第3页 / 共24页
第五章 选择分支与循环嵌套.docx_第4页
第4页 / 共24页
第五章 选择分支与循环嵌套.docx_第5页
第5页 / 共24页
第五章 选择分支与循环嵌套.docx_第6页
第6页 / 共24页
第五章 选择分支与循环嵌套.docx_第7页
第7页 / 共24页
第五章 选择分支与循环嵌套.docx_第8页
第8页 / 共24页
第五章 选择分支与循环嵌套.docx_第9页
第9页 / 共24页
第五章 选择分支与循环嵌套.docx_第10页
第10页 / 共24页
第五章 选择分支与循环嵌套.docx_第11页
第11页 / 共24页
第五章 选择分支与循环嵌套.docx_第12页
第12页 / 共24页
第五章 选择分支与循环嵌套.docx_第13页
第13页 / 共24页
第五章 选择分支与循环嵌套.docx_第14页
第14页 / 共24页
第五章 选择分支与循环嵌套.docx_第15页
第15页 / 共24页
第五章 选择分支与循环嵌套.docx_第16页
第16页 / 共24页
第五章 选择分支与循环嵌套.docx_第17页
第17页 / 共24页
第五章 选择分支与循环嵌套.docx_第18页
第18页 / 共24页
第五章 选择分支与循环嵌套.docx_第19页
第19页 / 共24页
第五章 选择分支与循环嵌套.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

第五章 选择分支与循环嵌套.docx

《第五章 选择分支与循环嵌套.docx》由会员分享,可在线阅读,更多相关《第五章 选择分支与循环嵌套.docx(24页珍藏版)》请在冰点文库上搜索。

第五章 选择分支与循环嵌套.docx

第五章选择分支与循环嵌套

第五章选择分支与循环嵌套

5.1分支结构与分支结构语句(2个例子)

5.2循环结构与循环结构语句(6个例子)

5.3程序实例(10个例子)

习题练习(11个例子)

5.1分支结构与分支结构语句

5.1.1IF-Then-Else-EndIf结构语句

结构一般如下:

IfeThen

[A组语句]

Else

[B组语句]

EndIf

e为判决条件,可以是逻辑变量,关系表达式或逻辑表达式。

当A组语句仅有一个时,可简化为:

IfeThen<语句>

例如,程序代码:

IfText1.Text=“”Then

Text1.SetFocus

EndIf

可以简化为:

‘当文本框中文本为空时,则使得文本框成为焦点。

IfText1.Text=“”ThenText1.Setfocus(省去EndIf)

较为复杂的结构如下:

Ife1Then‘如果e1为True,则执行A1组语句

A1组语句

ElseIfe2Then‘如果e2为True,则执行A1组语句

A2组语句

EndIf

[例题5-1]已知三角形的三边长度,设计求此三角形面积的程序。

问题分析:

a+b>c&a+c>b&b+c>a,S=sqr(p(p-a)(p-b)(p-c)),p=(a+b+c)/2

算法设计:

开始——输入a、b、c——判断a+b>c&a+c>b&b+c>a,通过则求p,求S,否则提示:

“输出数据错误信息”——结束。

设计程序代码如下:

PrivateSubCommand1_Click()

DimaAssingle,bAssingle,cAssingle

a=Val(Text1.text)‘Text属性为字符串型,转为数值型

b=Val(Text2.text)

c=Val(Text3.text)

Ifa+b>canda+c>bandb+c>aThen

p=(a+b+c)/2

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

Text4.text=CStr(s)‘数值型,转为字符串型,不使用,则自动强制转换

Else

Text4.text=“数据错误”

EndIf

EndSub

PrivateSubCommand2_Click()‘结束程序

End

EndSub

PrivateSubCommand3_Click()‘清除原有数据

Text1.text=“”

Text2.text=“”

Text3.text=“”

Text4.text=“”

Text1.SetFocus

EndSub

[例题5-2]一个有多个分支的示例程序数学表达式:

,试写出该程序。

程序界面设计:

两个文本框和一个命令按钮及相应的说明标签,文本框1中输入测试数据,单击命令按钮,在文6本框2给出测试结果。

PrivateSubCommand1_Click()

DimxasInteger

x=Val(Text1.Text)

Ifx<1Then

Text2.Text=“这是小于1的数”

ElseIfx<=10Then

Text2.Text=“这是1到10之间的数”

EndIf

EndSub

5.1.2Select-Case-End-Select结构语句

一般形式如下:

SelectCasee‘e为测试表达式

Casec1‘c1是测试项,可取

(1)具体数值(当表达式为算数表达式时)

A组语句

(2)连续的数据范围(8To20,BToH)

Casec2(3)满足某个判决条件(Is>20,Is<“P”)

B组语句(4)多个范围的组合

CaseElse

n组语句

EndSelect

例题5-2的程序代码也可用本结构语句实现:

PrivateSubCommand1_Click()

DimxasInteger

x=Val(Text1.text)

SelectCasex

CaseIs<1

Text2.Text=“这是小于1的数”

Case1To10

Text2.Text=“这是1到10之间的数”

CaseElse

Text2.Text=“这是大于10的数”

EndSelect

EndSub

5.2循环结构与循环结构语句

循环语句按结构分:

当型结构和直到型

True

False

True

False

结构的区别仅仅是False和True位置交换,下为当型的两种结构:

A

 

5.2.1Do-Loop循环语句结构

四种结构形式:

(1)DoWhilee

(2)Do

……

[ExitDo][ExitDo]

……

LoopLoopWhilee

(3)DoUntile(4)Do

……

[ExitDo][ExitDo]

……

LoopLoopUntile

前两种为当型结构,后两种为直到型结构,Do语句Loop语句之间为循环体语句,循环体语句包含一条或多条ExitDo语句,如果程序执行到ExitDo语句,就会直接退出循环,转而执行Loop语句的下一条语句。

[ExitDo]语句最常用的形式是与If-Then结合,即为:

IfeThenExitDo

在执行循环体时,如果条件e被满足,则执行ExitDo语句,直接退出循环。

[例题5-3]设计采用欧几里得算法求解两个自然数的最大公约数的程序。

问题分析及界面设计:

界面参照例题5-1,算法如下:

@例题2-1求两个自然数的最大公约数的算法。

(辗转相除法)

S1.输入两个自然数M、N;

S2.求M除以N的余数R;

S3.使得M=N,即为N替换M;

S4.使得N=R,即为R替换N;

S5.如果R

0,则重复执行S2、S3、S4(循环),否则转S6

S6.输出M,M即为M、N的最大公约数。

程序设计如下:

PrivateSubCommand1_Click()

DimmasLong,nasLong

DimrasLong

m=Val(Text1.Text)‘取数据m

Basic实现

INPUTm,n

DO

r=mMODn

m=n

n=r

LOOPUNTILr=0

PRINTm

END

n=Val(Text2.Text)‘取数据n

Ifm<1Orn<1Then‘检验数据合法性

Text3.Text=“数据错误!

Else

Do‘求最大公约数

r=mModn

m=n

n=r

LoopUntilr=0

Text3.Text=Csr(m)

EndSub

PrivateSubCommand3_Click()‘清除原有数据

Text1.text=“”

Text2.text=“”

Text3.text=“”

Text4.text=“”

Text1.SetFocus

EndSub

PrivateSubCommand3_Click()

End

EndSub

5.2.2For-Next循环结构语句

如果事先知道循环次数,则可使用For-Next循环结构语句,它的一般形式如下:

Forv=e1toe2[Stepe3]

[ExitFor]‘e1为初值,判别v是否超过e2,若超过,退出循环,执行Next语句的下条。

Nextv‘执行Next语句,系统执行下述操作:

v=v+e3

‘v是循环控制变量,应为整型或单精度型;e1、e2、e3为控制循环的参数。

e1为初值,e2为终值,e3为步长(e1=1时可省)。

For-Next循环的正常循环次序可用下式计算:

循环次数=Int((e2-e1)/e3)+1

如下面程序代码:

PrivateSubForm_Click()

Fori=1To10Step2

Printi;

Nexti

Print“i=”;i

EndSub

[例题5-4]求1~10这十个数的和与连乘积的程序。

OptionExplicit

PrivateSubForm_Click()

DimiAsInteger,sAsInteger

s=0

Print"s=";

Fori=1To10

s=s+i

Ifi<10Then

Printi;"+";

Else

Printi;"=";

EndIf

Nexti

Prints

f=1

Print"f=";

Fori=1To10

f=f*i

Ifi<10Then

Printi;"*";

Else

Printi;"=";

EndIf

Nexti

Printf

EndSub

[例题5-5]一个从由字母、数字组成的字符串中找到所有大写字母并逆序输出。

界面设计:

两个文本框,三个按钮,一筛选,一清除,一结束

思路分析:

从一个字符串找出符合要求的字符是采取对字符串的每一个字符逐个筛选的方法实现的,利用Mid函数可从字符串中提取单个字符,循环控制处理过程,循环的终值使用Len函数;对于符合要求的字符采用连接运算组成新字符串;逆序输出则是过从后往前逐个提取字符再连接

OptionExplicit

PrivateSubCmd1_Click()

DimaasString,dasString,tasString’

DimIasInteger

Text1.setFocus

a=Text1.Text‘前期准备

ForI=1toLen(a)

IfMid(a,I,1)>=“A”AndMid(a,I,1)<=“Z”Then

t=t&Mid(a,I,1)‘从字符串a左边第I个位置开始向右取一个字符

EndIf

NextI

ForI=Len(t)to1Step-1

d=d&Mid(t,I,1)

NextI

Text2.Text=d

EndSub

PrivatesubCmd2_Click()

Text1.Text=“”

Text2.Text=“”

Text1.SetFocus

EndSub

PrivatesubCmd3_Click()

End

EndSub

PrivatesubForm_Load()

MsgBox“本程序的功能是将一个从由字母、数字组成的字符串中找到所有大写字母并逆序输出”,“示例程序”

EndSub

5.2.3循环嵌套

大循环套小循环,小循环一定包含在大循环之内,而不得相互交叉。

程序示例:

PrivateSubForm_Click()

Fori=1to9

Forj=1to9

Printi;“*”;j;“=”;i*j

Nextj

Print

Nexti

EndSub

[例题5-6]一个模拟摇奖器的程序。

设有100个人中签,要从中找出中奖人。

由机器自动产生1000个1~100间的数据,第1000个随机数据即为中奖人的号码。

问题分析:

产生0~1之间随机数的函数Rnd(x),其中0=

在调用Rnd(x)函数之前,可先使用无参数的Randomize语句初始化随机数生成器,该生成器具有从系统计时器获得的种子。

为生成某个范围内的随机整数,可使用下列公式:

Int((upperbroad-lowerbroad+1)*Rnd+lowerbroad),则产生1~100随机数:

Int((100-1+1)*Rnd+1)

界面及算法设计:

两个按钮,一产生随机数,一退出,对应一个文本输出PrivateSubComd1_Click()

DimImAsInteger,iAsInteger,jAsInteger,aAsInteger

Randomize

Fori=1To1000‘取第1000个随机数

Im=Int(100*Rnd)+1‘产生1~100之间的随机数

a=0

Forj=1To1000‘产生1000次随机数

a=a+1

Nextj

Text1.Text=CStr(Im);

Text1.Refresh‘刷新前999次,保留最后一次

Nexti

Text1.Text=CStr(Im)

EndSub

PrivateSubComd2_Click()

End

EndSub‘本程序采用两重嵌套的循环

5.3程序示例

[例题5-7]一个简单的函数计算器程序。

设计思路:

一个是设计基本函数程序,包括输入按钮和两个文本边框;一个是设计出错提示,包括未输入值和数据超出定义域的情况。

程序中使用的IsNumeric(s)函数用于检测自变量是否是一个可转化成数值的数字串,如果是返回逻辑值True,否则返回False

函数:

Exp、Log()、Sqr(求开方)、Sgn(求x的符号)

程序代码如下:

OptionExplicit

DimXasSingle

模块模板如下:

PrivateSubCmd1_Click()

IfText1.Text=””Then

MsgBox””

Text1.SetFocus

ElseIfIsNumeric(Text1.Text)Then

X=Val(Text1.Text)

Else

MsgBox”输入数据错误!

”,48+vbOKOnly,”程序示例”

Text1.Text=””

EndIf

EndSub

PrivateSubCmd1_Click()‘求Exp(X)

IfText1.Text=“”Then

MsgBox”请输入X的值!

”,48+vbOKOnly,”程序示例”

Text1.SetFocus

ElseIfIsNumeric(Text1.Text)Then

X=Val(Text1.Text)

Label2.Caption=“Exp(X)=:

Text2.Text=Str(Exp(X))

Else

MsgBox”输入数据错误!

”,48+vbOKOnly,”程序示例”

Text1.Text=“”

EndIf

EndSub

PrivateSubCmd2_Click()‘求Log(X)

IfText1.Text=“”Then

MsgBox”请输入X的值!

”,48+vbOKOnly,”程序示例”

Text1.SetFocus

ElseIfIsNumeric(Text1.Text)AndVal(Text1.Text)>0Then

X=Val(Text1.Text)

Label2.Caption=“Log(X)=”

Text2.Text=Str(Log(X))

Else

MsgBox”输入数据错误!

”,48+vbOKOnly,”程序示例”

Text1.Text=“”

Text1.SetFocus

EndIf

EndSub

 

PrivateSubCmd3_Click()‘求Sqr(X)

IfText1.Text=“”Then

MsgBox”请输入X的值!

”,16+vbOKOnly,”程序示例”

Text1.SetFocus

ElseIfIsNumeric(Text1.Text)AndVal(Text1.Text)>0Then

X=Val(Text1.Text)

Label2.Caption=“Sqr(X)=”

Text2.Text=Str(Sqr(X))

Else

MsgBox”输入数据错误!

”,48+vbOKOnly,”程序示例”

Text1.Text=“”

Text1.SetFocus

EndIf

EndSub

PrivateSubCmd4_Click()‘求Sgn(X)

IfText1.Text=“”Then

MsgBox”请输入X的值!

”,48+vbOKOnly,”程序示例”

Text1.SetFocus

ElseIfIsNumeric(Text1.Text)AndVal(Text1.Text)>0Then

X=Val(Text1.Text)

Label2.Caption=“Sgn(X)=”

Text2.Text=Str(Sgn(X))

Else

MsgBox”输入数据错误!

”,48+vbOKOnly,”程序示例”

Text1.Text=“”

Text1.SetFocus

EndIf

EndSub

PrivateSubCmd5_Click()

Text1.Text=“”

Text2.Text=“”

Label2.Caption=“”

Text1.SetFocus

EndSub

PrivateSubCmd6_Click()

End

EndSub

 

[例题5-8]编写一个按月收入额计算个人收入调节税的应用程序。

计税公式如下:

Tax=

式子中,income为纳税人的月收入。

界面设计与思路:

输入、输出文本框各一个,选择框一个,按钮三个。

设计代码如下:

OptionExplicit

PrivateSubCommand1_Click()

DimTaxAsSingle,incomeAsSingle

income=Val(Text1.Text)

IfCheck1.Value=1Orincome<=1600Then

Tax=0

ElseIfincome<=2100Then

Tax=(income-1600)*0.05

ElseIfincome<=3600Then

Tax=(income-1600)*0.1-25

ElseIfincome<=6600Then

Tax=(income-1600)*0.15-125

ElseIfincome<=21600Then

Tax=(income-1600)*0.2-375

ElseIfincome<=41600Then

Tax=(income-1600)*0.25-1375

ElseIfincome<=61600Then

Tax=(income-1600)*0.3-3375

ElseIfincome<=81600Then

Tax=(income-1600)*0.35-6375

ElseIfincome>101600Then

Tax=(income-1600)*0.45-15375

EndIf

Text2.Text=Tax

EndSub

PrivateSubCommand2_Click()

Text1.Text=""

Text2.Text=""

Text1.SetFocus

EndSub

PrivateSubCommand3_Click()

UnloadMe

EndSub

[例题5-9]编写程序,找出所有三位数水仙花数。

所谓水仙花数,是指各位数字的立方和等于该数本身的数。

例如:

153=1

+3

+5

,所以153是一个水仙花数。

改错:

PrivateSubCommand1_Click()

DimiAsinteger,aAsInteger,bAsInteger,cAsInteger,eAsLong

Fori=100To999‘取三位数

a=Int(Val(i/100))

b=Int(Val(i-a*100)/10)

c=i-a-b

e=a^3+b^3+c^3

Ife=ithen

Text1.Text=CStr(e)

Nexti

Text1.Text=CStr(e)

EndSub

PrivateSubCommand2_Click()

End

EndSub

方法一:

(三位数依次循环)

PrivateSubCommand1_Click()

DimiAsLong,aAsLong,bAsLong,cAsLong,eAsLong,fAsString

Fori=100To999

a=i\100

b=(i-a*100)\10

c=i-a*100-b*10

e=a^3+b^3+c^3

Ifi=eThen

f=I&”=”&”^3+”&b&”^3+”&c&”3”

List1.AddItemf

EndIf

Nexti

EndSub

方法二:

(三位数每位循环一次)

OptionExplicit

PrivateSubCommand1_Click()

DimiAsInteger,aAsInteger,bAsInteger,cAsInteger,eAsInteger,fAsString

Fora=1To9

Forb=0To9

Forc=0To9

e=a^3+b^3+c^3

i=100*a+10*b+c

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

当前位置:首页 > IT计算机

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2