版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章程序流程控制
4.1条件测试语句4.2循环语句习题
4.1条件测试语句案例1条件语句If…Then…Else
1.学习目标请编程实现:输入x的值,计算y的值。其中:当x>6时,y=x+3;当x≤6时,y=4x。通过本案例的学习,掌握If…Then…Else语句的用法。
2.相关知识
1)If…Then结构
If…Then结构有两种形式,即单行语句和多行语句。单行语句格式:
If条件表达式Then语句块多行语句格式:
If条件表达式Then语句块
EndIf其中,条件表达式可以是关系表达式、逻辑表达式,也可以是算术表达式、字符串表达式等。程序将根据这个表达式的值(True或False,如果是数值表达式,VisualBasic将一个为零的数值在此当作False,而任何非零数值都被看作True)执行相应的操作。语句功能:若条件表达式的值为True,则执行Then后面的语句。若条件表达式的值为False,对于单行语句结构,程序直接跳到If的下一条语句去继续执行;对于多行语句结构,则转到EndIf之后继续执行其他语句。其流程如图4.1所示。图4.1If…Then语句流程图在使用单行语句结构时,Then后面只能放置一条语句,若有多条语句,则必须用多行语句格式。语句格式中的“语句块”可以是一条语句,也可以是多条语句。例如:单行语句
Ifx<yThenx=x+9也可改成多行语句结构形式:
Ifx<yThen
x=x+9
EndIf在多行语句结构形式中,Then关键字后的同一行上不能有任何语句。例如,把多行结构形式改写如下形式,则会产生编译错误:
Ifx<yThenx=x+9
EndIf为了增加程序代码的可读性,建议采用多行语句结构形式。
2) If…Then…Else结构 语句格式:
If条件表达式Then
语句块1
Else语句块2
EndIf语句功能:对给定的条件表达式进行判断。若表达式的值为True,则执行语句块1,执行完语句块1后,程序将直接跳到EndIf后面继续执行其他的语句;若表达式的值为False,则执行语句块2,执行完毕后,接着执行EndIf后面的语句。其流程如图4.2所示。图4.2If…Then…Else语句流程图例如:
Ifx>0Then
y=2
Else
y=8
EndIf
3.程序实现
1)界面设计初始界面如图4.3所示。
2)属性设置属性设置如表4.1所示。设置属性后的界面如图4.4所示。图4.3初始界面表4.1属性设置图4.4设置属性后的界面
3)编写代码代码编写如下:
PrivateSubCommand1_Click()
DimxAsSingle,yAsSingle
x=Val(Text1.Text)
Ifx>6Then
y=x+3
Else
y=4*x
EndIf
Text2.Text=Str(y)
EndSub运行程序,结果如图4.5所示。图4.5输入x的值,计算y的值案例2条件语句If…Then…ElseIf
1.学习目标对所输入的整数进行判断,若输入数为正数,则显示“大于零”;若输入数为负数,则显示“小于零”;否则显示“等于零”。用If…Then…ElseIf语句实现。通过本案例的学习,掌握If…Then…ElseIf语句的用法。
2.相关知识条件语句If…Then…ElseIf是多重If语句。通过这种形式,可以完成对两个以上条件的测试。根据实际条件只执行其中的某一个语句块。语句格式:
If条件表达式1Then语句块1
ElseIf条件表达式2Then语句块2
…
ElseIf条件表达式nThen语句块n
Else
语句块n+1
EndIf语句功能:先对给定的条件表达式1进行测试,若测试结果为True,则执行语句块1,执行完后,转到EndIf后面继续执行;若测试结果为False,则继续对条件表达式2进行测试,若测试结果为True,则执行语句块2,否则继续对下一个条件表达式进行测试,直到测试到某一个条件表达式的测试结果为True,则执行该表达式后面的语句块,然后转至EndIf后面继续执行。如果前面所有条件表达式的测试结果均为False,则执行Else后面的语句块。其流程如图4.6所示。如果有多个条件同时成立,则程序只执行最先遇到的条件表达式下面的语句块。图4.6多重If语句流程图
3.程序实现
1)界面设计初始界面如图4.7所示。
2)属性设置属性设置如表4.2所示。设置属性后的界面如图4.8所示。图4.7初始界面表4.2属性设置图4.8设置属性后的界面
3)编写代码代码编写如下:
PrivateSubCommand1_Click()
Dims1AsString,s2AsString
DimnAsInteger
s1=Text1.Text
n=Val(s1)
Ifn>0Then
s2="大于零"
ElseIfn<0Then
s2="小于零"
Else
s2="等于零"
EndIf
Text2.Text=s2
EndSub运行程序,结果如图4.9所示。图4.9判断输入的整数是正数、负数还是零
4.应用扩展嵌套结构是在一些基本语句结构的基础上,将一个控制结构放在另一个控制结构内而形成的结构。这两种控制结构可以相同,也可以不同。例如:
If<条件1>Then
…
If<条件2>Then
…
Else
…
EndIf
…
…
Else
…
If<条件3>Then
…
Else
…
EndIf
…
EndIf例如,以下为If语句嵌套形式中的一种,它是将If…Then…EndIf与If…Then…Else…EndIf两种语句结构嵌套在一起的一种形式。
If年龄<40Then
If性别="男"Then
MsgBox"可以参加3000米长跑"
Else
MsgBox"可以参加800米长跑"
EndIf
EndIf在使用这样的嵌套形式时,应该注意嵌套的层次问题,绝对不允许出现层次交叉的现象。案例3条件语句SelectCase
1.学习目标用SelectCase语句实现计算公民全月应纳个人所得税。这里将个人所得税具体计算问题理想化,假设以1600元作为标准,每月收入额减除费用1600元后的余额不同则税率不同,余额不超过500元的部分的税率为5%,余额在500元(不包括500元)至2000元的部分的税率为10%,余额在2000元(不包括2000元)至5000元的部分的税率为15%,余额在5000元(不包括5000元)至20 000元的部分的税率为20%,余额在20 000元(不包括20 000元)至40 000元的部分的税率为25%,余额在40 000元(不包括40000元)至60000元的部分的税率为30%,余额在60000元(不包括60000元)至80000元的部分的税率为35%,余额在80000元(不包括80000元)至100000元的部分的税率为40%,余额超过100000元的部分的税率为45%。通过本案例的学习,掌握SelectCase语句的用法。
2.相关知识
SelectCase的语句格式:
SelectCase测试表达式
Case表达式列表1语句块1
…
Case表达式列表n语句块n
CaseElse语句块n+1
EndSelect语句功能:先求出测试表达式的值,然后将求得的值分别与各Case子句的表达式列表中的值进行比较。如果相匹配,则执行该Case语句后面的语句块,执行完毕后,程序将直接跳到EndSelect后面继续执行其他语句;若没有一个值与测试表达式的值匹配,则执行CaseElse后面的语句块,当该语句块执行完毕后,程序也将直接跳到EndSelect后面继续执行其他语句。语句说明:“测试表达式”可以是数值表达式或字符串表达式。“表达式列表”可以有三种形式。①表达式[,表达式]…:用来表示一些具体的数值,多个数值间用逗号分隔开。例如:Case1,2,3,4,5。②表达式1To表达式2:这种表达式用来指定一个取值范围,将较小的值放在To前面,较大的值放在To后面。例如,Case6To10,Case"a"To"z"。③Is<关系运算符><表达式>:通过Is与关系运算符结合,用来表示一个数值范围。注意,此时关系表达式只能是简单条件,而不能是用逻辑运算符将两个(或多个)简单条件表达式连接到一起。例如:
CaseIs>85是正确的,而CaseIs>85AndIs<100则是错误的。上述三种形式还可以组合起来使用。例如:
Case20,30,40To50,Is>60这种组合方式表示只要测试表达式的值与Case后面表达式中任何一个值相匹配,则执行该Case语句对应的语句块。
3.程序实现
1)界面设计初始界面如图4.10所示。
2)属性设置属性设置如表4.3所示。设置属性后的界面如图4.11所示。图4.10初始界面表4.3属性设置图4.11设置属性后的界面
3)编写代码代码编写如下:
PrivateSubCommand1_Click()
DimsalaryAsSingle,rateAsSingle,taxesAsSingle
DimsAsString,nAsInteger
s=InputBox("请输入该公民的月收入:","月收入输入窗口")
salary=Val(s)
If(salary-1600)<=0Then
MsgBox"不需交纳个人所得税",,"个人所得税"
Else
n=Int((salary-1600)/100+0.9999)
SelectCasen
Case1,2,3,4,5:rate=0.05
Case6To20:rate=0.1
Case21To50:rate=0.15
Case51To200:rate=0.2
Case201To400:rate=0.25
Case401To600:rate=0.3
Case601To800:rate=0.35
Case801To1000:rate=0.4
CaseIs>1000:rate=0.45
EndSelect
taxes=(salary-1600)*rate
MsgBox"应交个人所得税金额为:"&taxes,,"个人所得税"
EndIf
EndSub运行程序,结果如图4.12所示。图4.12计算个人所得税
4.应用扩展
Select语句可以实现嵌套,除了自身的嵌套以外,还可以同其他语句一起实现更为复杂的语句嵌套。无论是哪种形式的嵌套,它们都要遵循同样的规则,即不允许出现结构之间的交叉重叠。在实际应用中,SelectCase语句同If语句以及后面将要介绍的循环控制语句的嵌套形式更为常见。例如:If<条件1>Then
…SelectCase…Case…If<条件2>Then
…Else
…EndIf
…Case…
…EndSelect
…EndIf4.2循环语句案例4用For循环语句实现累加求和
1.学习目标用For…Next循环结构实现求和sum,其中sum=1+2+3+…+100。通过本案例的学习,掌握For…Next循环结构的用法。
2.相关知识
VisualBasic支持的循环控制语句有For…Next、Do…Loop和While…Wend。如果知道了循环的执行次数,则可以使用For…Next循环结构。语句格式:
For循环变量=初值To终值[Step步长]语句块1
[ExitFor]语句块2
Next[循环变量]语句功能:根据循环变量给定的次数重复执行循环体语句,直到循环变量的值达到或超过终值为止。语句说明:
(1)循环变量、初值、终值、步长都是整型数据。其中,循环变量决定循环执行的次数;步长的值可正可负,用于决定每循环一次后循环变量递增或递减的数值。Step子句可有可无,若无,则循环变量每循环一次,其值自动增加1;若有,则根据Step子句提供的值进行递增或递减。
(2) ExitFor子句是可选项,其功能是提前退出循环控制结构。当执行For…Next循环控制语句时,VisualBasic的工作过程如下:
(1)设置循环变量的值为初值。
(2)如果步长值为正,则测试循环变量的值是否大于终值,若是,则退出循环;如果步长值为负,则测试循环变量是否小于终值,若是,则退出循环。
(3)如果循环变量的值还未大于终值(当步长值为正时),或者循环变量的值还未小于终值(当步长值为负时),则执行循环体内的语句。
(4)按步长变量指定的值递增(递减)循环变量,如果没有指定步长,则循环变量递增1。
(5)重复步骤(2)至步骤(4)。其整个流程如图4.13所示。图4.13步长值为正时For…Next循环结构的流程图
3.程序实现
1)界面设计初始界面如图4.14所示。
2)属性设置属性设置如表4.4所示。设置属性后的界面如图4.15所示。图4.14初始界面表4.4属性设置图4.15设置属性后的界面
3)编写代码代码编写如下:
PrivateSubCommand1_Click()
DimsumAsInteger,iAsInteger
sum=0'累加器初值置为0
Fori=1To100
sum=sum+i
Nexti
Label2.Caption=Str(sum)
EndSub运行程序,结果如图4.16所示。图4.16用For…Next循环结构实现1+2+3+…+100
4.思考
(1)如果要实现sum=1+2+3+…+10,则应怎样修改程序?
(2)如果要实现sum=30+31+32+…+50,则应怎样修改程序?
(3)如果将Label2.Caption=Str(sum)中的sum写成sam,即Label2.Caption=Str(sam),则运行程序后,Label2的Caption会变成什么?是否可以用强制变量声明来避免这种错误?案例5用For循环语句实现累乘求积
1.学习目标用For…Next循环结构实现求阶乘n!。通过本案例的学习,掌握用For…Next循环结构实现累乘求积。
2.程序实现
1)界面设计初始界面如图4.17所示。
2)属性设置属性设置如表4.5所示。设置属性后的界面如图4.18所示。图4.17初始界面表4.5属性设置图4.18设置属性后的界面
3)编写代码代码编写如下:
PrivateSubCommand1_Click()
DimnAsInteger,iAsInteger
DimresultAsLong
result=1'累乘,初值置为1
n=CInt(Text1.Text)
Ifn<=0Then
Label2.Caption="请输入正整数!"
ExitSub'结束过程
EndIf
Fori=1Ton
result=result*i
Nexti
Label2.Caption=Str(n)+"!="+Str(result)
EndSub运行程序,结果如图4.19所示。图4.19用For…Next循环结构实现求阶乘n!
3.思考
(1)如果将result=1写成result=0,则运行程序后,Label2的Caption会变成什么?
(2)程序运行后,如果输入的n<=0,则①ExitSub②End(即将ExitSub改写成End)两语句中的哪句会结束程序的运行?哪句会结束本次事件过程,等待下一次事件过程?案例6Do…Loop循环结构
1.学习目标用Do…Loop循环结构实现求和sum=1+2+3+…+100。通过本案例的学习,掌握Do…Loop循环结构的用法。
2.相关知识
Do…Loop循环结构可用于循环次数不确定的情况,也可用于循环次数确定的情况。其语句格式有如下两种。语句格式1:
Do[While|Until条件]
[语句块1]
[ExitDo]
[语句块2]
Loop语句格式2:
Do
[语句块1]
[ExitDo]
[语句块2]
Loop[While|Until条件]语句功能:
(1)格式1实现的功能是:当指定的循环条件为True或在指定的循环结束条件变为True之前,重复执行语句块组成的循环体。进入循环体时,如果循环条件不成立或者循环结束条件成立,则不再执行循环体的语句块。
(2)格式2实现的功能是:该语句先执行循环体,然后测试循环条件或循环终止条件,决定是否继续循环。因此,这种结构的语句至少执行一次循环体。语句说明:
(1) While|Until两者同时只能有一个出现。选择While时,表示当条件表达式值为True时,开始执行循环体内的语句行;选择Until时,表示只要条件表达式值不为True,就一直执行循环体内的语句行。
(2) ExitDo为可选项,用来强制退出循环体。
(3)格式1是先测试条件表达式,再根据测试值决定是否执行循环体语句。格式2是先执行循环体语句,后测试条件表达式的值,再根据测试值决定是否继续执行。Do…Loop循环结构的流程如图4.20所示。从图4.20(a)、(b)可以很清楚地看到两者的区别。其中,图(a)表示语句格式1;图(b)表示语句格式2。图4.20Do…Loop循环结构的流程图
3.程序实现
1)界面设计初始界面如图4.21所示。
2)属性设置属性设置如表4.6所示。设置属性后的界面如图4.22所示。图4.21初始界面表4.6属性设置图4.22设置属性后的界面
3)编写代码代码编写有如下两种方法。方法一:采用当型循环DoWhile…Loop。
PrivateSubCommand1_Click()
DimiAsInteger,sumAsInteger
i=1 '计数器初值置为1
sum=0 '累加器初值置为0
DoWhilei<=100'当型循环
sum=sum+i
i=i+1 '每次循环变量加1
Loop
Label2.Caption=Str(sum)
EndSub方法二:采用直到型循环DoUntil…Loop。
PrivateSubCommand1_Click()
DimiAsInteger,sumAsInteger
i=1 '计数器初值置为1
sum=0 '累加器初值置为0
DoUntili>100
sum=sum+i
i=i+1
Loop
Label2.Caption=Str(sum)
EndSub运行程序,结果如图4.23所示。图4.23求1到100之和
4.思考本案例的代码中,如果去掉i=i+1,则运行结果是什么?案例7While…Wend循环结构
1.学习目标提示用户输入数值型数据,并对所输入的正数进行求和。用While…Wend循环结构实现。通过本案例的学习,掌握While…Wend循环结构的用法。
2.相关知识
While…Wend的语句格式:
While条件表达式语句块
Wend语句功能:如果条件表达式的结果为True,则执行循环体中的语句块,一直执行到Wend语句。然后再回到While语句,并再一次判断条件表达式的值,如果还为True,则重复执行循环体中的语句;如果为False,则程序将从Wend语句之后的语句继续执行。
3.程序实现
1)界面设计初始界面如图4.24所示。
2)属性设置属性设置如表4.7所示。设置属性后的界面如图4.25所示。图4.24初始界面表4.7属性设置图4.25设置属性后的界面
3)编写代码代码编写如下:
PrivateSubCommand1_Click()
DimnumberAsSingle,totalAsSingle
number=Val(InputBox("请输入一个数(输入负数则结束循环):"))
total=0
Whilenumber>=0
total=total+number
number=Val(InputBox("请输入一个数(输入负数则结束循环):"))
Wend
Label1.Caption="非负数据之和是:"+Str(total)
EndSub运行程序,结果如图4.26所示。图4.26对非负数求和
4.思考
(1)本案例中的While循环什么时候会结束?
(2)本案例中的While循环的循环次数是否固定?案例8多重循环
1.学习目标求sum=1!+2!+3!+4!+5!,用多重循环实现。通过本案例的学习,掌握二重循环的用法。
2.相关知识如果在一个循环内完整地包含另一个循环结构,则称为多重循环或循环嵌套,嵌套的层数可以根据需要而定,嵌套一层称为二重循环,嵌套两层称为三重循环。上面介绍的几种循环控制结构可以相互嵌套,下面是几种常见的二重嵌套形式:形式一:
Fori=…
…
Forj=…
…
Nextj
…
Nexti形式二:
DoWhile/Until…
…
DoWhile/Until…
…
Loop
…
Loop形式三:
Fori=…
…
DoWhile/Until…
…
Loop
…
Nexti形式四:
DoWhile…
…
Forj=…
…
Nextj
…
Loop
3.程序实现
1)界面设计初始界面如图4.27所示。
2)属性设置属性设置如表4.8所示。设置属性后的界面如图4.28所示。图4.27初始界面表4.8属性设置图4.28设置属性后的界面
3)编写代码代码编写如下:
PrivateSubCommand1_Click()
DimiAsInteger,jAsInteger,nAsInteger
Dimsum1AsLong,sum2AsLong
n=5
sum1=0
Fori=1Ton
sum2=1
Forj=1Toi
sum2=sum2*j
Nextj
sum1=sum1+sum2
Nexti
Label1.Caption="1!+2!+3!+4!+5!="+Str(sum
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024版UPS设备质保与支持服务协议版B版
- 专业技术服务劳务协议(2024版)版B版
- 2024年绿色屋顶设计与施工合同范本3篇
- 2024房地产融资合同范本
- 【放射科】精准医疗幕后的先锋团队
- 11-1《谏逐客书 》(说课稿)-2024-2025学年高一语文下学期同步教学说课稿专辑(统编版必修下册)
- 福建省南平市塔前中学2022年高二数学理联考试题含解析
- 2024文化石矿山开采及加工合作合同范本3篇
- 双十一旅行新品盛宴
- 2024港口物流信息化建设合同
- 化学-山东省潍坊市、临沂市2024-2025学年度2025届高三上学期期末质量检测试题和答案
- 领导学 课件全套 孙健 第1-9章 领导要素- 领导力开发
- 2024-2025学年七年级上学期语文期末考前押题卷(统编版2024+含答案)
- 土建定额培训课件
- ISO 56001-2024《创新管理体系-要求》专业解读与应用实践指导材料之13:“6策划-6.2创新目标及其实现的策划”(雷泽佳编制-2025B0)
- 2024年保护环境的建议书范文(33篇)
- 2025新译林版英语七年级下单词默写表
- 退休人员公益活动合作合同
- 四年级数学(四则混合运算带括号)计算题专项练习与答案
- 急诊创伤疼痛护理
- 2022年期货从业资格《期货基础知识》考试题库(含典型题)
评论
0/150
提交评论