




已阅读5页,还剩91页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章算法基础及VB的基本语句,2,1、了解结构化程序设计的基本概念2、掌握VB程序设计中的常用语句3、掌握顺序、选择、和循环结构及相应的语句,教学要求,3,教学内容,4.1算法及程序设计基础4.2赋值语句及InputBox、MsgBox函数4.3分支结构与分支结构语句4.4循环结构与循环结构语句4.5程序示例,4,4.1算法及程序设计基础,一个程序(过程)应包括:NikiklausWirth认为:有人认为:,对数据的描述:指定所用数据的类型,作用域和数据的组织形式,即数据结构(datastructure)。对操作的描述:即操作步骤,也就是算法(algorithm)。,数据结构+算法=程序,程序=算法+数据结构+程序设计方法+语言工具和环境,5,1、算法的概念,算法即解决某个问题或处理某件事的方法和步骤;“采用什么结构,使用什么语句以及如何安排这些语句”。算法分类:数值计算算法非数值计算算法算法优劣:正确性,效率,占用系统资源,便于理解,易于调试等。,6,18,10,MNR,8,10,8,2,8,2,0,2,0,R=8,R=2,R=0,M=2即最大公约数,求最大公约数,题目:求两个自然数的最大公约数分析:求最大公约数的常用方法是辗转相除法(欧几里德算法)。,2、算法示例,7,算法描述:,S1输入两个自然数:M,N;S2求M除以N的余数R;S3使M=N,即用N代换M;S4使N=R,即用R代换N;S5若R0,则重复执行S2,S3,S4,否则转至S6S6输出M,M即为M,N的最大公约数。,8,3、算法的特征,确定性可行性有穷性输入性输出性,9,4、算法的描述,程序流程图,求最大公约数,10,程序编码实现算法,算法仅提供解题思路,计算机不可直接执行。用某一程序设计语言所提供的语言成分,根据该语言的特点,并利用该语言的各种工具和手段,遵照规定的语法规则去实现算法,得到原程序代码,计算机可识别并执行。,11,5.基本算法结构,1).顺序结构,语句1,语句2,语句块,结构化程序设计,12,2)选择结构,结构化程序设计,13,3)循环结构,结构化程序设计,14,三种基本结构的共同特点,只有单一入口和单一出口;结构中的每一部分都有被执行的可能;结构内不应出现永不终止的死循环。,15,4.2赋值语句及InputBox、MsgBox函数,4.2.1赋值语句4.2.2InputBox函数4.2.3MsgBox函数,16,4.2.1赋值语句格式:=功能:先计算表达式的值,再将该值赋予左端的变量。说明:-赋值号左端不仅可以是变量名,还可以是对象的属性;-表达式的类型和变量的类型要一致-赋值语句是按语句出现的先后顺序执行的(顺序结构)举例:,str1=Nicetomeetyounumber%=72Lable1.Caption=Filenameis:Text.FontSize=12改变字号,17,使用下面的方法可以获取一个对象的属性值:var=object.Property例如:Label1.Caption=Text1.Text式中,var是变量名、object是对象名、property是该对象的某个属性名。特别注意:属性也存在数据类型,所以在获取对象的属性值时,最好使用具有相同数据类型的变量。,说明,18,注意:赋值号(=)与比较运算符(=)不同赋值是独立的一条语句;由运算符(=)连结两个操作数的关系表达式是语句的一部分,不可单独存在比较运算符不会改变操作数的值;赋值语句会,改变赋值号左边的量,所以必须是可以被赋值的变量或属性,DimxAsInteger,yAsInteger,zAsBooleanx=3:y=4:y=xz=x=yPrintx,y,z,19,PrivateSubForm_Click()DimaAsInteger,bAsIntegera=10b=3*aPrinta,bEndSub,PrivateSubForm_Click()DimaAsInteger,bAsIntegerb=3*aa=10Printa,bEndSub,例:单击窗体,下列两段程序的执行结果分别是()和()。,提示:利用赋值语句给变量赋值后,在未有新的赋值语句再次给它赋值前,变量值保持不变。,20,例:交换两个变量的值。,PrivateSubForm_Click()DimaAsInteger,bAsIntegera=10:b=2Printa,b填入程序代码Printa,bEndSub,正确答案DimTempAsIntegerTemp=a:a=b:b=Temp,题目说明单击窗体程序执行结果为:102210,注意变量a和b为两个不定值的变量,因此不能直接用a=2:b=10语句来解决这个问题。,一旦利用赋值语句给变量赋新值,会覆盖原值,所以不能直接用a=b:b=a语句来解决这个问题。,21,例:求一元一次方程x+5=0的解。,PrivateSubForm_Click()DimxAsInteger3*x+5=0Print“x=”;xEndSub,PrivateSubForm_Click()DimxAsIntegerx=(0-)/3-Print“x=”;xEndSub,语句是该例题的算法。,错误程序,正确程序,总结:利用程序设计语言处理问题,我们首先要知道的是怎么解决问题,其次要知道怎么将解决问题的方法用程序设计语言来表达。,22,4.2.2InputBox函数格式:InputBox$(,)功能:弹出对话框,用户输入数据后回车或单击“确定”按钮后,将输入内容赋值给相应的变量;按ESC键或单击“取消”按钮,返回空串。,23,说明(1)prompt:必选项。对话框中的提示信息。(2)title:可选。对话框的标题。省略则为应用程序名。(3)default:可选。显示在用户编辑框中的缺省值,省略为空。(4)x,y:可选。指定对话框的显示位置,省略则居中。,例:i=InputBox(“输入数组元素”+Chr(10)+“第一个元素为:”,程序示例,100),缺省值,标题,提示字符串,24,例:用InputBox函数输入出生日期,计算年龄。,OptionExplicitPrivateSubForm_Click()DimBirthDayAsDate,AgeAsIntegerBirthDay=InputBox(输入出生日期,计算年龄)Age=Year(Date)-Year(BirthDay)Print你今年:;Age;岁EndSub,25,如果赋值号左端的变量为数值型或日期型等非字符型变量,输入字符数据单击“取消”按钮不输入直接按回车键,则系统都会提示出错:,DimxAsIntegerx=InputBox(输入数组元素+Chr(10)+第一个元素为:,示例,10,100,100),注意,26,4.2.3MsgBox函数格式:MsgBox(Prompt,Button,Title,HelpFile,Context)功能:向用户发布提示信息,并要求用户作出必要的响应。说明:(1)Prompt:必选项。字符串表达式,对话框中的提示信息。(2)Button:指定显示按钮的数目及形式,使用的图标样式,这是一个由4个数值常量组成的式子,形式为c1+c2+c3+c4,用于决定信息框中按钮的个数和类型以及出现在信息框中的图标类型,各个参量的可选值及其功能;详见P.62表4.2(3)Title:对话框标题栏的显示信息。,27,MsgBox需要重新来一次?,2+32+256+4096,询问,MsgBox数据非法,请重输!,1+16+0+4096,警告,举例,28,方法一:发布提示信息,无须用户响应,在程序中作为独立语句存在,不加括号;例:MsgBox非法数据!,警告,如果省略其中参数,逗号不能省略,MsgBox函数的用法,方法二:需要用户响应,和普通函数调用方法相同。例:Response=MsgBox(真的删除该项吗?,4+48,提示信息)IfResponse=vbYesThenElseEndIf,29,4.3分支结构与分支结构语句,4.3.1If-Then-Else-EndIf语句4.3.2Select-Case-EndSelect语句,30,1、If-Then-Else语句格式1:IfThenElseEndIf,4.3.1If-Then-Else-EndIf语句,逻辑变量、关系表达式、逻辑表达式,逻辑框图:,功能:如果条件成立,则执行A组语句,否则执行B组语句。,说明:If和EndIf语句成对出现,缺一不可;Else和B组语句部分可以省略,当条件不成立时,直接执行EndIf的后继语句;,31,PrivateSubcmdCalculate_Click()DimxasSinglex=Val(text1.text)Ifx=0ThenText2.text=Str(Sqr(x)ElseText2.text=数据小于0,错误!EndIfEndSub,PrivateSubcmdExit_Click()EndEndSub,PrivateSubcmdClear_Click()Text1.Text=Text2.Text=Text1.SetFocusEndSub,例:从键盘输入一个数,求它的平方根。,缩格输入,32,例:计算分段函数y的值。,PrivateSubcmdCalculate_Click()DimxAsSingle,yAsSinglex=Val(Text1.Text)Ifx=0Theny=2*Sqr(x+7)-6Elsey=5*x+Exp(x)-2EndIfText2.Text=Str(y)EndSub,cmdCalculate,33,格式2:单行If-Then-Else语句IfThenElse说明:(1)在A组语句和B组语句都只有一个语句时,可使用该格式;(2)EndIf语句省略。例:上例可改写为以下程序段。,PrivateSubcmdCalculate_Click()DimyAsSingle,xAsSinglex=Val(Text1.Text)Ifx=0Theny=2*Sqr(x+7)-6Elsey=5*x+Exp(x)-2Text2.Text=Str(y)EndSub,34,格式3:IfThenEndIf格式4:IfThen,逻辑框图,35,2.嵌套的If结构在If语句的“语句块”中包含另一个If语句,叫做嵌套的If结构。,IfThen外层IfThen内层ElseIfthenElse最内层EndIfElseIfThenEndIfEndIf,用于解决有多种情况的问题,36,例:输入三角形的三边a、b、c,求三角形的面积,P64例4-1,a0andb0andc0,a+bcandb+caanda+cb,37,PrivateSubcmdCalculate_Click()DimaAsSingle,bAsSingle,cAsSingle,pAsSingle,sAsSinglea=Val(Text1.Text)b=Val(Text2.Text)c=Val(Text3.Text)If(1)ThenIfa+bcAndb+caAndc+abThenp=(a+b+c)/2s=Sqr(p*(p-a)*(p-b)*(p-c)Text4.Text=Str(s)ElseText4.Text=“不能构成三角形”EndIfElseText4.Text=“边长不能小于0”EndIfEndSub,计算公式:,其中:,a0Andb0Andc0,38,例:计算分段函数y的值。,PrivateSubcmdCalculate_Click()DimxAsSingle,yAsSinglex=Val(Text1.Text)Ifx0Theny=1/(x-5)ElseIfx=70ThenDegree=CElseIfScore=60ThenDegree=DElseDegree=EEndIfEndIfEndIfEndIfText2.Text=DegreeEndIfEndSub,缺点:嵌套层次过多,结构不清晰,容易出错。,从文本框取数据,向文本框放数据,40,3、多分支If-Then-ElseIf语句格式:IfThenElseIfThenElseIfThenElseEndIf,功能:-对条件自上而下依次判断,若条件i成立,则执行相应的Ai组语句;-若所有条件都不成立,则执行An+1组语句。-无论执行了哪个语句块,都将执行EndIf的后继语句。,41,(1)该语句结构可以解决多分支问题,只有一个EndIf语句,避免If语句嵌套层数过多的情况;(2)Else语句可以省略;(3)该结构是一个单出口的结构,即只会执行一组语句,若条件中有两个成立,则按语句的顺序执行前面的一组语句。,说明,42,PrivateSubText1_KeyPress(KeyAsciiAsInteger)DimScoreAsInteger,DegreeAsStringIfKeyAscii=13ThenScore=Val(Text1.Text)IfScore=90AndScore=80ThenDegree=BElseIfScore=70ThenDegree=CElseIfScore=60ThenDegree=DElseDegree=EEndIfText2.Text=DegreeEndIfEndSub,特点:结构清晰。,将上例用If-Then-ElseIf语句改写:,90Score20、Is“P”等以上三种形式的组合,以逗号间隔,条件组合是或的关系,不能表示与的关系(3)CaseElse语句部分可以省略;(4)以EndSelect语句结束;(5)该结构是一个单出口的结构,即只会执行一个语句块,若条件中有两个成立,则按语句的顺序执行前面的语句块。,说明,45,例:将上例用SelectCase语句改写。,PrivateSubText1_KeyPress(KeyAsciiAsInteger)DimScoreAsInteger,DegreeAsStringIfKeyAscii=13ThenScore=Val(Text1.Text)SelectCaseScoreCase90To100Degree=ACase80To89Degree=BCase70To79Degree=CCase60To69Degree=DCaseIs=10thenExitDoLoop,61,(1)Do和Loop为循环结构关键字,必须成对出现,缺一不可;(2)循环体为可执行语句组成,可以嵌套分支结构和循环结构;(3)语句ExitDo用于无条件退出循环,可在任意Do-Loop语句结构的循环体中出现。(4)使用循环结构,一定要避免死循环的出现。,Do-Loop语句使用说明,62,算法分析:求最大公约数的常用方法是辗转相除法。,例:求两个数的最大公约数。,P68例4-3,18,10,MNR,8,10,8,2,8,2,0,2,0,R=8,R=2,R=0,M=2即最大公约数,63,在该例中,我们使用了三个变量,分别表示被除数(m)、除数(n)及余数(r)。,Dor=mModnm=nn=rLoopUntilr=0,最大公约数是()?,64,由于输入的数据M和N要求是自然数,在程序中应加入对数据的合法性进行检验的部分;考虑到程序的应用范围,数据类型可选用长整型。,问题分析及界面设计,65,PrivateSubCommand1_Click()DimmAsLong,nAsLong,rAsLongm=Val(Text1.Text)取数据Mn=Val(Text2.Text)取数据NIfmInt(m)OrmInt(n)Orn1e-7Pi=Sqr(8*s)PrintPiEndSub,70,71,PrivateSubForm_Click()DimPiAsSingle,sAsSingle,rAsDoubleDimnAsIntegern=1:s=0Dor=(-1)(n+1)*1/(2*n-1)求通项s=s+rn=n+1LoopWhileAbs(r)0.0001Pi=4*sPrintPiEndSub,72,格式:For=ToStep循环体Next功能:由计数变量控制,有限次地执行循环体。,4.4.2计数循环(For-Next循环),步骤:1.计算初值、终值和步长值,将初值赋予计数变量;2.比较计数变量和终值,若计数变量大于终值,结束循环;3.计数变量小于终值,执行循环体;4.计数变量=计数变量+步长值5.转向第2步。,73,For-Next是关键字,成对出现,缺一不可;循环体由可执行语句组成,可嵌套分支结构和循环结构;计数变量应为整型或单精度型,初值、终值和步长值为相应类型的表达式;步长值可以为正,也可以为负,省略时默认步长值为1;循环次数为:Int(终值-初值)/步长值)+1ExitFor语句可以出现在循环体中,用于无条件退出循环,说明,74,PrivateSubForm_Click()Fori=1To10Step2Printi;NextiPrinti=;iEndSub,执行本程序,窗体上将显示:13579i=11。它表明循环一共执行了5次,退出循环时,i的取值为11。,例:请写出窗体上打印的内容,以及循环执行的次数。,P70,75,循环控制变量主要是用于控制循环的执行次数,但我们通过合理的设置,可以在循环体中巧妙加以利用,以提高程序的效率.,分析:这个式子有现成的求和公式,在这里主要借助该例体现一下在循环体中计数变量的应用。设计数变量为i,初值为1,终值为100,步长值为1,可省略。i从1变化到2、3、4、100,正好和式子中的通项变化一致。,S=0Fori=1To100S=S+iNexti,S=0Fori=100To1Step-1S=S+iNexti,例:求S=1+2+3+100。,S=0:n=0Fori=1To100n=n+1S=S+nNexti,76,写出下列程序的运行结果,PrivateSubForm_Click()DimpAsInteger,iAsInteger,nAsIntegerp=2:n=20Fori=1TonSteppp=p+2n=n-3i=i+1Ifp=10ThenExitForNextiPrinti,p,nEndSub,77,分析:这类问题没有什么算法,只有将所有情况列举然后检查得分情况,直到发现答案为止。设该生共答对i道题,答错(26-i)道题,如果i*8-(26-i)*5=0那么i就是答案。i的变化范围是1-26。一旦找到答案,可以立即结束循环。,穷举法要点:-通过循环语句,遍历所有可能的情况;-在循环体内通过条件语句,将符合条件的情况找出来。,例:某试卷有26个问题,答对一题得8分,答错一题扣5分,某学生回答了全部26个问题,总分为0分,问他答对几道题,答错几道题。,PrivateSubForm_Click()DimiAsIntegerFori=1To26Ifi*8-(26-i)*5=0ThenExitForNextiPrint答对;i;道,答错;26-i;道EndSub,条件(关系表达式),78,例4_5从字母数字组成的字符串中找出所有的大写字母并逆序输出,79,一、界面设计(如上图)二、算法设计由题意,所需执行的操作应该是:依次判断字符串中的每一个字符是否是大写字母,若是,则取出放入结果字符串中。考虑通过在一个循环结构里面嵌套一个判断结构实现,因重复执行判断的次数,即字符串的长度len(s)已知,则循环结构用FOR语句实现;判断一个字符是否是大写字母,可先将单个字符从字符串中取出Mid(s,i,1),并将该字符直接与“A”、”Z”字符进行比较,应大于等于“A”,并同时小于等于”Z”x=“A”ANDx=AAndx=ZThent=x是素数!ElsePrintx;不是素数!EndIf,i=x,错误程序Fori=2Tox-1IfxModi=0ThenPrintx;不是素数ElsePrintx=;是素数EndIfNexti,其实不用整除到X-1,整除到Sqr(X),即可判断,82,4.4.3循环的嵌套所谓循环的嵌套,是指在循环结构中包含另一个循环结构。条件循环和计数循环可以相互嵌套。,83,例:在窗体上按行依次打印1到10,每个数字打印10遍。分析:这是一个典型的需要用二重循环结构的例子,外层用于控制打印数字的个数,内层控制每个数字打印的遍数。,PrivateSubForm_cliclk()Dimiasinteger,jasintegerFori=1to10Forj=1to10Printi;NextjPrintNextIEndSub,问题:在执行整个程序中printi语句共执行了多少次?,打印10个数字,每个数字打印10遍,换行,84,(1)内层循环必须完全包含在外层循环之中,不能交叉;(2)内层循环中还可以嵌套循环结构,但建议不要使用多层循环,解决一般问题最多需要三重循环;(3)在多重DO-LOOP循环中,若有EXITDO语句,则只会强制退出该语句所在的循环,并执行LOOP的后续语句,并不会退出所有的循环。(4)在多重FOR-NEXT循环中,若有EXITFOR语句,则只会强制退出该语句所在的循环,并执行NEXT的后续语句,并不会退出所有的循环。,说明,85,4.5程序示例,86,例:产生10个2050随机整数,打印在窗体上,并指出最大值和最小值。,分析:1.要求得到10个随机数,用记数循环FOR语句实现。2.产生随机整数的方法是x=Int(上界-下界+1)*Rnd)+下界必须和Randomize语句配合使用。3.要求出最大值和最小值,则每产生一个随机数,即与已知的最大数、最小数比较,若它大于已知的最大数,则它是新的最大数;若它小于已知的最小数,则它是新的最小数。,87,PrivateSubForm_Click()DimiAsInteger,xAsInteger,DimmaxAsInteger,minAsIntegerFori=1To10 x=Int(Rnd*31)+20Printx;NextIPrintPrintmax=;maxPrintmin=;minEndSub,max=0:min=51,IfmaxxThenmin=x,88,PrivateSubForm_Click()DimSAsLong,iAsIntegerDimjAsInteger,factAsLongFori=1To10fact=1Forj=1Toifact=fact*jNextjS=S+factNextiPrints=;SEndSub,PrivateSubForm_Click()DimSAsLong,iAsIntegerDimfactAsLongfact=1Fori=1To10fact=fact*iS=S+factNextiPrints=;SEndSub,问题:这两段程序的功能分别是什么?,请注意多重循环中赋初值语句的位置。,89,分析:设要解的方程为f(x)=0,并已知一个不够精确的初始解X0,则有牛顿迭代公式:Xn+1=Xn-f(Xn)/f(Xn)n=0,1,2,利用迭代公式,依次求得X1,X2,X3,当|Xn+1-Xn|时,Xn+1即为所求得根。3注意此算法的三要素:迭代公式、初值、和迭代精度(结束条件).
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 晋城口碑营销活动策划方案(3篇)
- 淄博隔声板施工方案(3篇)
- 印度农田施工方案(3篇)
- 冬请允许我拥抱你250字12篇范文
- 数学课《几何图形变换与性质》教学实践
- 农村科技研发与应用推广合同
- 一条路到达一个地方(14篇)
- 时间沙漏计时器课件
- 夏魂赋得白雪有感诗词比较与赏析高中语文教案
- 中秋节壮哉嫦娥奔月(15篇)
- 医院护理管理课件
- 软件咨询面试题目及答案
- 2025年艾梅乙知识竞赛试题及答案
- 云南航空产业投资集团招聘笔试真题2024
- 2025年农产品质量安全追溯体系构建与农业供应链管理创新报告
- 临时救助政策解读
- 煤矿笔试题目及答案
- 2025年危化品经营单位安全管理人员培训全国考试题库(含答案)
- 广西统考卷(走到田野去)-2025年中考语文作文题解读
- 2025至2030年中国室内覆盖施工行业市场发展监测及投资战略咨询报告
- 《知识管理办法》
评论
0/150
提交评论