版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第七章程序控制语句7.1算法基础7.2分支结构7.3循环控制结构2014一个程序应包括两个方面的内容:对数据的描述:数据结构(datastructure)对操作的描述:算法(algorithm)著名计算机科学家沃思提出一个公式:
数据结构+算法=程序
数据结构+算法+程序设计方法+语言工具完整的程序设计应该是:1算法的概念
广义地说,为解决一个问题而采取的方法和步骤,就称为“算法”。方法1:1+2,+3,+4,一直加到100加99次方法2:100+(1+99)+(2+98)+…+(49+51)+50=100+49×100+50加51次对同一个问题,可有不同的解题方法和步骤例:求7.1算法基础算法的选择
为了有效地进行解题,不仅需要保证算法正确,还要考虑算法的质量,选择合适的算法。希望方法简单,运算步骤少。计算机算法可分为两大类别:数值运算算法:求数值解,例如求方程的根、求函数的定积分等。非数值运算:包括的面十分广泛,最常见的是用于事务管理领域,例如图书检索、人事管理、行车调度管理等。1.算法的概念算法可以通过时间复杂度和空间复杂度来度量。算法的时间复杂度是指算法的执行时间;算法的空间复杂度是算法执行时所需的最大存储空间。2.算法的五要素(特点)(1)确定性:指算法的每个步骤都应确切无误,没有歧义。(2)可行性:指算法的每个步骤必须是计算机能够有效执行,可以实现的,并可得到确定的结果。(3)有穷性:指一个算法应该在有限的时间和步骤内可以执行完毕的。(4)输入性:指一个算法可以有0或多个输入数据。(5)输出性:指一个算法必须有一个或多个输出结果。3.算法的描述形式4.算法的基本结构自然语言;流程图;伪代码;PAD顺序结构;分支结构(选择结构);循环结构7.2分支语句分支语句是实现分支结构的语法结构此结构语句的一般形式是:IfeThen[A组语句]Else[B组语句]EndIfABeTrueFalse该语句结构,还有变形形式(单分支):1.If-Then-Else-EndIf
结构语句(双分支)此结构语句也可以写成:IfeThen[A组语句]Else[B组语句]判决条件可以是逻辑变量、关系表达式或逻辑表达式。IfeThenA组语句EndIfAeTrueFalse以上语句还可以写成:IfeThenA语句【例7-1】输入X的值,并输出其绝对值。例题PrivateSubCommand1_Click()Dimx!x=InputBox("请输入一个数")Ifx<0Then x=-x
EndIfPrint"绝对值是:";xEndSub【例7-2】输入一个整数,判断其奇偶性。例题
PrivateSubForm_Click()
Dimxasintegerx=InputBox(“请输入一个整数”)Ifxmod2=0Then
Printx;“是偶数”
Else Printx;“是奇数”
EndIfEndSub2.If-Then-ElseIf-Else-EndIf语句(多分支)A1e1TrueFalseIfe1ThenA1组语句ElseIfe2ThenA2组语句ElseIfe3ThenA3组语句ElseA4组语句...EndIfA2A3...e2e3TrueTrueFalseFalse【例7-3】在文本框中输入若干字符,统计其中字母字符、数字字符以及其他字符的个数,并显示结果。例题DimcountX%,countY%,countZ%PrivateSubText1_KeyPress(KeyAsciiAsInteger)
Dimc$
c=chr(KeyAscii)‘将文本框中输入的字符赋给变量c
IfUcase(c)>=”A”AndUcase(c)<=”Z”Then
countX=countX+1
ElseIfc>=”0”Andc<=”9”Then
countY=county+1
Else
countZ=countZ+1
EndIf
IfKeyAscii=13Then‘当按回车键字符输入完毕,显示结果
Print“字母字符有”;countX;”个”
Print“数字字符有”;countY;”个”
Print“其他字符有”;countZ;”个”
EndIfEndSubSelectCaseeCasec1A组语句
Casec2B组语句...
CaseElsen组语句EndSelect3.Select-Case-EndSelect
结构语句
此结构语句提供了实现多分支结构的另一种方法,它的一般形式是:e为测试表达式,可以是算术表达式或字符表达式。c1、c2是测试项:可取:1、具体数值。2、连续的数据范围3、满足某个判决条件执行方式:先求测试表达式e的值,接着逐个检查每个Case语句的测试项,如果测试表达式e的值满足某个测试项,系统就执行该Case语句下的那组语句;如果没有一个测试项满足要求,就执行CaseElse
下的语句。如果有一个以上的测试项满足要求,,则只有第一个匹配后面的语句会被执行。计算测试表达式与测试值1相同吗?语句1与测试值2相同吗?语句2语句nSelectCase语句的下一条语句是不是是都不是(1)测试表达式必须为数值型或字符型数据(2)测试值列表必须与测试表达式的值的类型一致(3)测试值列表的取值形式
A枚举型如:case1,5,7,9
case"a","b","C","d"
B范围型如:case1to9case"a"to"z"
C关系表达式型如:caseIs<100caseIs>"a"注意:用关键字To来指定一个范围时,必须把较小的值写在前面,较大的值写在后面,字符串常量的范围必须按字母顺序写出。如果同一个域值的范围在多个Case子句中出现,则只执行符合要求的第一个Case子句的语句块,这时Case子句的顺序对执行结果有影响。因此,在编程时,一般都使各个Case子句是“互斥”的(即只有一个子句的范围满足)。再次提醒:思考题1下面程序的运行结果是:DimiAsIntegerDimXAsIntegeri=2X=4SelectCaseiCase0:Print"Case0"Case1:Print"Case1"CaseX-i:Print"CaseX-i"CaseX:Print"CaseX"CaseElse:Print"CaseElse"EndSelectCaseX-i思考题2假设x的值为5,则在执行以下语句时,其输出结果为“OK”的Selectcase语句是()A)SelectCaseX
Case10to1:Print"OK"
EndSelectB)SelectCaseX
CaseIs>5,1,3to10:
Print"OK"
EndSelectC)SelectCaseX
CaseIs>5,Is<5:Print"OK“EndSelectD)SelectcasexCaseIs>5,Is<5:
Print"OK"
EndselectB【例7-4】某商店进行购物打折优惠活动促销,根据每位顾客一次性购物的消费额给予不同的折扣,具体方法如下:(1)购物1000元以上的九五折优惠,(2)购物2000元以上的九折优惠,(3)购物3000元以上的八五折优惠,(4)购物5000元以上的八折优惠。例题
DimxAsSingle,yAsSingle
x=InputBox("请输入购物金额:")
SelectCasex
CaseIs<1000
Print"不优惠"
y=x
CaseIs<2000
Print"九五折优惠"
y=0.95*x
CaseIs<3000
Print"九折优惠"
y=0.9*x
CaseIs<5000
Print"八五折优惠"
y=0.85*x
CaseIs>=5000
Print"八折优惠"
y=0.8*x
EndSelect
Print"优惠后应收款额为:";y
只要满足结构规则,If语句可以有任意多的嵌套。在编写嵌套程序的时候,需要注意If与ELse的配对关系。配对的原则是:先从最内层的E1se开始找,Else总是与离它最近的而且在它前面未配对的If配对,如此逐层配对。按照锯齿形的书写格式书写,容易看出各层的嵌套关系。4.选择结构的嵌套将一个选择结构放在另一个选择结构内,称为选择结构的嵌套。If语句的嵌套在If语句中又包含一个或多个If语句,称为语句的嵌套。
If语句与Select语句的嵌套在If语句中包含—个select语句,或者select语句中包含一个或多个If语句。只要满足结构规则,If语句可以有任意多的嵌套。在编写嵌套程序的时候,需要注意If与ELse的配对关系。配对的原则是:先从最内层的E1se开始找,Else总是与离它最近的而且在它前面未配对的If配对,如此逐层配对。按照锯齿形的书写格式书写,容易看出各层的嵌套关系。例:输入自变量x和z,求一个双变量的分段函数。5.条件函数(1)IIF函数使用IIf函数也可以实现简单的双分支选择结构。语句格式:result=IIF(条件表达式,<表达式1>,<表达式2>)测试条件表达式的值,如果取值为True则返回表达式1的值,否则返回表达式2的值。例如:语句Ifx>yThenmax=xElsemax=Y也可写成:Max=IIf(x>y,x,y)(2)Choose函数使用Choose函数也可以实现简单的多分支选择结构。语句格式:result=Choose(整数表达式,选项列表)根据整数表达式的值,决定返回选项列表中的哪个项目。例如:C=Choose(x,“red”,“green”,“blue”)当x值为1时,返回“red”;当x值为2时,返回“green”;当x值为3时,返回“blue”;当x不在1-3之间,函数返回Null循环结构在实际工作中,常遇到一些操作过程不太复杂,但又需要反复进行相同处理的问题,比如,统计本单位所有人员的工资,求全班同学各科的平均成绩等等。这些问题的解决逻辑上并不复杂,但如果单纯用顺序结构来处理,那将得到一个非常乏味且冗长的程序。例:计算1~100所有奇数的平方和,如果用顺序结构来解决这个问题,我们就会给出下面的程序:由上面的例子不难看出,程序的绝大部分是在反复执行两条语句x=x+2
和s=s+x^2,不同的是x的值在变化。程序当然非常简单易懂,但缺乏最基本的编程技巧。要想方便地解决这类问题,最好的办法就是用循环语句。
所谓循环就是重复地执行一组语句。VB提供了三种不同风格的循环语句,它们分别是:(1)While…Wend语句;(2)Do…Loop语句;(3)For…Next语句;7.3循环语句1.While循环结构该循环也称为While–Wend循环,语句格式如下:While<条件表达式>
.........Wend语句说明:(1)语句的执行过程是:先计算条件表达式的值,若为True,则执行循环中的语句块,遇到Wend语句时返回While语句继续判断,若仍为真,则继续执行语句块,重复上述过程直到条件表达式的值为False,则退出循环结构,执行Wend语句的后续语句。
AeTrueFalse(3)如果条件一开始就不成立,则语句块一次也不会被执行。(2)“条件表达式”可以是关系表达式、逻辑表达式或数值表达式。如果是数值表达式,值为0被作为False,非零值则为True。【例7-6】用While-Wend循环语句求1+2+3+…+100,程序代码如下例题PrivateSubCommand1_Click()
DimiAsInteger,sumAsInteger
sum=0:i=1
Whilei<=100
sum=sum+i
i=i+1
Wend
PrintsumEndSub2.Do-Loop循环结构语句
Do-Loop循环结构语句有四种形式:DoWhilee...[ExitDo]...LoopDo...[ExitDo]...LoopWhileeDoUntile...[ExitDo]...LoopDo...[ExitDo]...LoopUntileSum=0I=1
DoWhileI<=100Sum=Sum+II=I+1
LoopDoWhilee...[ExitDo]...LoopAeTrueFalse求sum=1+2+…+100A.当型循环:AeFalseTrueDo...[ExitDo]...LoopWhileeSum=0I=1
DoSum=Sum+II=I+1
LoopWhileI<=100上述两当型循环结构的区别:当第一次执行循环语句条件不成立时,第一种不执行循环体,而第二种要执行一次。B.直到型循环:DoUntile...[ExitDo]...LoopSum=0I=1
DoUntilI>100Sum=Sum+II=I+1
LoopAeFalseTrueDo...[ExitDo]...LoopUntileSum=0I=1
DoSum=Sum+II=I+1
LoopUntilI>100上述两直到型循环结构的区别:当第一次执行循环语句条件成立时,第一种不执行循环体,而第二种要执行一次。AeTrueFalse循环的出口问题正常出口非正常出口ExitDo循环的参数即循环条件问题使用Do-Loop循环应注意的问题:例:给定两个正整数m和n,求它们的最大公约数。
求最大公约数的问题一般用辗转相除法(也称欧几里德算法)求解。(书p107,例7-8)例如:设m=35,n=15它们的最大公约数的求法如下:
r=35Mod15(余数为5)m=15:n=5(m=15,n=5)
r≠0(r=5)r=15Mod5(余数为0)m=5:n=0(m=5,n=0)
r=0
所以
5就是最大公约数典型应用例:输入有效位数,按下述公式计算圆周率∏的有效值。m=val(text1.text)pai=2:p=0Do
t=sp=spr(2+p)pai=t*2/pLoopUntilabs(t-s)<0.1^m3.For-Next循环如果事先已知循环次数,则可使用For-Next循环结构语句,它的一般形式是:Forv=e1Toe2[Stepe3]...[ExitFor]...NextvV=v+e3V超过e2?TrueFalse计算e1,e2,e3V=e1循环体V为循环控制变量,e1、e2、e3是控制循环的参数e1为初值e2为终值e3为步长讨论For-Next>0初值<终值(Step1可省略)<0初值>终值=0死循环ForI=1to100
S=S+INextI循环变量必须为数值型。循环次数步长ExitFor:强制退出循环ForI=100to1Step-1
S=S+INextIPrivateSubForm_Click()Dimstr1AsStringDimletterAsIntegerDimnumberAsIntegerDimotherAsIntegerDimnAsIntegerLetter=0:number=0:other=0Str1=InputBox(“输入字符串=”,”输入框”,”ab32-c,4d_5”)Forn=1toLen(str1)SelectCaseMid(Str1,n,1)Case“A”to“Z”,“a”to“z”Letter=letter+1Case1to9Number=number+1CaseelseOther=other+1EndSelectNextn
Print“letter=”;letter,”number=”;number,”other=”;otherEndSub思考:(1)n的取值分别=(2)循环体共执行了多少次?(3)退出循环后,n=?(4)如何理解letter=letter+1?nnnnnnnnnnnn123456789101112letternumberOthern44312【例7-10】求Fibonacci数列的前30个数。这个数列有如下特点:前两个数为1,从第三个数开始,其值是前两个数的和,即:F1=1(n=1);F2=1(n=2);
Fn=Fn-1+Fn-2(n≥3)例题DimiAsInteger,f1AsLong,f2AsLong,fnAsLong
f1=1:f2=1
Printf1,:Printf2,
Fori=3To30'f1,f2已知,从第三个数开始计算
fn=f1+f2
f1=f2
f2=fn'更改f1,f2的值
Printfn,
IfiMod4=0ThenPrint'打印4个数后换行打印
Next
(a)循环出口问题 正常出口非正常出口使用For-Next循环应注意的问题:
例:试编程,输入任意一个正整数n,判断n是否是素数。(素数就是除过1和自身之外,没有其他因子的自然数。)I=2输入nI>n-1nModI=0I=I+1TFTFPrivateSubForm_Click()Dimm%,i%,k%,FlagAsBooleanm=InputBox("请输入一个数")Fori=2Tom-1If(mModi)=0ThenPrintm&"不是素数"ElsePrintm&"是素数"EndIfNextiEndSub典型的错误代码正确代码(1)PrivateSubForm_Click()Dimm%,i%,k%,FlagAsBooleanm=InputBox("请输入一个数")Flag=TrueFori=2Tom-1If(mModi)=0ThenFlag=FalseEndIfNextiIfFlagThen'与Flag=True功能一样
Printm&"是素数"ElsePrintm&"不是素数"EndIfEndSub正确代码(2)PrivateSubForm_Click()
Dimm%,i%,k%m=Inputbox(“请输入一个数”)
Fori=2Tom-1
If(mmodi)=0Then ExitForEndIf
Nexti
Ifi>m-1Then
Printm&“是素数”
ElsePrintm&“不是素数”
EndIfEndSub
一个疑问:循环的终值是否可以减小?
实际上:循环的终值设置为Sqr(m)、m/2。
这个程序的重要意义:利用标记变量;
利用循环控制变量与终值的关系判断某个条件是否成立。(b)循环参数的类型问题例:DimIAsIntegerForI=1.0To10.5Step1.5…NextI…上述循环如何执行?使用For-Next循环应注意的问题:循环参数按CInt或CLng的方式转换,故本循环执行5次几种循环语句比较For....toNextDowhile/until....Loopdo....LoopWhile/until...循环类型当型循环当型循环直到循环循环控制条件循环变量大于/小于终值条件成立/不成立条件成立/不成立循环变量初值在FOR语句中在DO之前在DO之前使循环结束For语句中无需专门语句必须用专门语句必须使用专门语句使用场合循环次数容易确定条件件易给出条件件易给出4.循环的嵌套在一个循环语句的循环体内又包含另一个循环语
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 应急响应员考试题库及答案解析
- 酒店-manager-面试题及酒店管理知识考核含答案
- 媒体编辑岗位面试全解析问题与答案一览
- 税务申报考试题库及答案
- 思想政治工作部宣传干事工作考核结果运用含答案
- 互联网公司技术岗面试题及参考答案大全
- 华为5G技术专家面试题及答案解析
- 监督员专业考试题及答案
- 2025年灌阳县幼儿园教师招教考试备考题库带答案解析(夺冠)
- 2025年成都体育学院马克思主义基本原理概论期末考试模拟题带答案解析(必刷)
- JJF(石化)002-2023漆膜冲击试验器校准规范
- 政协提案范文标准模板
- 肝损害课件教学课件
- (2025年标准)酒水行业合伙协议书
- 2025教育考试院考务人员网上培训试题(附答案)
- 创新模式2025年高端定制农产品商业模式商业计划书
- 临床成人术后谵妄预防与护理解读与实践
- 内蒙古:行业用水定额(DB15-T 385-2020)
- 四川省水安b考试试题及答案
- 支架式教学法案例分析
- msd元件管理办法
评论
0/150
提交评论