资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,程序设计语言的三种基本结构流程图,:,语句块,1,语句块,2,顺序结构,条件,语句块,1,语句块,2,真,假,选择结构,条件,循环体,真,假,循环结构,循环体,条件,假,真,循环结构,用于在一定的条件下多次重复执行一组语句,.,例如:,在一行上输出,60,个,“,*,”,号。用,Print,方法,方法一:可以用,60,个,“,*,”,号组成一个字符串:,Print,“,*,*,”,方法二:使用,60,个语句,:,Print*;,Print*,”,;,Print*,流程图,2.,条件型循环,(,未知循环次数),1.,计数型循环,(,已知循环次数),分类:,学习要点:,2.,实现循环的算法,1.,进入循环的条件,3.,退出循环的条件,一:,For,循环语句:计数型,(,一般用于循环次数已知,),形式如下:,For,循环变量初值,to,终值,Step,步长,语句块,Exit For,语句块,Next,循环变量,例,:,For I=2 To 13 Step 3,Print I,Next I,Print :Print“I=“,I,Exit for:,当遇到该语句,退出循环,执行该循环的下一条语句。,步长,(也可为实数),0,初值,终值 (,=1,时,可省略),终值,=0,死循环,循环次数,int,(终值,-,初值),/,步长),+1,循环变量,:,必须是数值型,语句块,:,可以是一条或多条语句,【说明】,For,循环流程图,循环变量得到初值,循环变量在终值内,T,语句块,循环变量加步长,F,有,Exit For,F,T,For,Next,流程图,例,:,For I=2 To 13 Step 3,Print I,Next I,Print :Print“I=“,I,结果:,输出,I,的值分别为,:,2 5 8 11,循环执行次数:,循环结束输出为,:,I=14,(,初值,+,循环次数,*,步长,),思考,1:,计算下列循环语句的次数。,(,1,),for I=-3 to 20 step 4,(2)for I=-3.5 to 5.5 step 0.5,(3)for I=-3.5 to 5.5 step 0.5,(4)for I=-3 to 20 step 0,结果分别为,:,6 19 0,无数次,思考,2:,如果事先不知道循环次数,如何用,For.Next,?,For,循环变量,=1 to,非常大的数,if,达到循环结束条件,then exit for,.,Netxt,循环变量,例,4.9,改变,循环控制变量,对循环的影响,Private Sub Command1_Click(),j=0,For i=1 To 20 Step 2,i=i+3,“,有无此句结果有什么不同?,j=j+1,Print,第,;j;,次循环,i=;i,Next i,Print,退出循环后,i=;i,End Sub,正常情况:,i=1,3,5,7,9,11,13,15,17,19,现在:,i=4,9,14,19,:常用算法:,累加,连乘,算法:是对某个问题求解过程的描述,例:累加求,1-100,的偶数和。,Private Sub Form_Load(),Dim i As Integer,s As Integer,Show,s=0,For i=2 To 100 Step 2,s=s+I ,赋值语句实现,Next i,Print s=;s,End Sub,例:连乘求自然数,1-30,的乘积,(,即,30,的阶乘,),Private Sub Form_Click(),s=1,For i=1 To 10,s=s*I,赋值语句实现,Print i;,的阶乘是:,;,s,Next i,End Sub,思考?,若把循环体前面置各变量初值的语句放在循环体内,程序运行时会产生什么情况?,Private Sub Form_Click(),For i=3 To 100 step 3,sum=0,sum=sum+I,Next I,Print sum,End Sub,结论;,在一重循环中,存放累加,连乘结果的变量,初值设置应该放在循环体外。,二:,Do,Loop,循环语句:,条件型,(,用于控制循环次数未知,),形式,1,:先判断后循环,形式,2,:先做后判断,Do While|Until,语句块,Exit Do,语句块,Loop,Do,语句块,Exit Do,语句块,Loop While|Until,【说明】:,1,)形式,1,先判断后执行,有可能一次也不执行,形式,2,先执行后判断,最少执行一次循环体,2,),While,用于指明,条件为真,时执行循环体;,Until,刚好相反。,3,)当省略了,While|Until,子句,表示,无条件循环,循环体中应有,Exit Do,语句,,否则为死循环。,4,)遇到,Exit Do,语句时退出循环,执行,Loop,下一,条语句。,Do While,Loop,流程图,Do,While Loop,流程图,条件,语句块,语句块,T,F,语句块,语句块,条件,T,F,有,Exit Do,F,T,有,Exit Do,F,T,Do While|Until.Loop,流程图,例,4.11:,我国有,13.2,亿人口,按出生率为,0.5%,的增长率,多少年后超过,20,亿?,Private Sub Form_Load(),Dim m As Double,Dim yearr As Integer,Show,m=1320000000#:yearr=0,Do While m 200000000000#,例,:,迭代法求,a,的立方根。,X=a,1/3,迭代公式:,X,n,+1,=1/3(2X,n+,a/X,n,2,),当,X,n,+1,-,X,n,eps,Print v,End sub,若将,While,改为,Until,,条件表达式怎么修改?,Do Until,abs(v-u)n,;,(2),m,除以,n,得余数,r,;,(3),若,r=,0,,则,n,为最大公约数结束,;,否则执行,(4),;,(4),m,n,,,n,r,,再重复执行,(2),常用算法:,求最大公约数和最小公倍数,求,m=14,n=6,的最大公约数和最小公倍数。,z=m*n,If m n Then,m=m-n,Else,n=n-m,End If,Loop,Print m,Print z/m,m=m-n mn,m n m-n,14 6 8,8 6 2,2 6 4,2 4 2,2 2 0,n=n-m nm,m,、,n,为公约数,m=n,若,m,=n,,则,m,为最大公约数结束,若不相等,谁大替换谁。,例,4.14,:,求自然对数,e,的近似值,要求其误差小于,0.00001,,近似公式为,:,e,=1+1/1!+1/2!+1/3!+,+1/,n,!+,该例题涉及两个问题:,(,1,)用循环结构求级数和的问题。本例根据某项值的精度来控制循环的结束与否。,(,2,)累加:,e=e+t,(,循环体外对累加和的变量清零,e=0),(3),连乘:,n=n*i,(,循环体外对连乘积变量置,1,n=1),(三)循环的嵌套,一个循环体内又包含了一个完整的循环结构称为循环的嵌套,也叫多重循环。,例,4.13,演示:打印九九乘法表。,For i=1 To 9,For j=1 To 9,se=i&j&=&i*j,Picture1.Print Tab(j-1)*9+1);se;,Next j,Picture1.Print,Next i,打印上三角或下三角程序如何改动,思考:,下列,30-90,为语句标号,分别标记该语句,第,40,句执行了几次循环?第,50,句执行了几次循环?第,90,句输出结果是多少?,For j=1 to 12 step 3,For k=6 to 2 step 2,mk,=k,Print j,k,Next k,80 next j,90 print j,k,mk,3,12,13,0,2,For ii=1 To 10,For jj,=1 To 20,Next ii,Next jj,For ii=1 To 10,For ii=1 To 20,Next ii,Next ii,For ii=1 To 10,For jj,=1 To 20,Next jj,Next ii,For ii=1 To 10,Next ii,For ii=1 To 10,Next ii,【注意】,(,1,)内循环变量与外循环变量,不能同名,;,(,2,)外循环必须完全包含内循环,,不能交叉,;,(,3,)不能从循环体外转向循环体内,反之则可以。正确错误,语句形式,特点,循环条件,循环终止条件,循环次数,Do while,.,loop,先判断,True,False,=0,Do until,.,loop,先判断,False,True,=0,Do,.,loop while,后判断,True,False,=1,Do,.,loop until,后判断,False,true,=1,For,.,next,先判断,控制变量,=,终值(,递增),控制变量,=,终值(,递减),控制变量,=,终值(,递增),控制变量,=,终值(,递减),(,终值,-,初值),/,步长,+1,循环总结,四 常 见 错 误,1.,不循环或死循环的问题,主要是循环条件、循环初值、循环终值、循环步长的设置有问题。,例如:,For I=10 to 20 step,1,For I=20 to 10,Do while false,For I=10 to 20 step 0,Do while 1,2.,循环结构中缺少配对的结束语句,For 少 配对的,Next,do,语句没有,loop,结束,3.,循环嵌套时,内外循环交叉,与,IF,块结构交叉,运行时显示,“,无效的,Next,控制变量引用,”,例如:例如,For I=1 to 4 for I=1 to 4,For j=1 to 5 if,表达式,then,.,.,Next I next i,Next j endif,4.,累加、连乘时,存放累加、连乘结果的变量赋初值问题,(1),一重循环,在一重循环中,存放累加、连乘结果的变量初值设置应在循环语句前。,(,2,)多重循环,这要视具体问题分别对待。,5,大数相乘产生,“,溢出,”,问题,见实验,P301-4.3,其他辅助控制语句,1.Go To,语句(建议不使用),形式:,Go To,标号,|,行号,作用:无条件转移到标号或行号指定的地方。,:常用算法:,求素数,素数:是一个大于,2,,且不能被,1,和本身以外的整数整除的整数。,方法:,判断某数,m,是否为素数,可从素数本身的,定义求解,。对于,m,从,I=2,,,3,.m-1,判断,m,是否能被,I,整除,只要有一个能被整除,,m,就不是素数。但这种算法速度很慢。,例,4.15:,求,100,以内素数的代码:,For m=2 To 100,For i=2 To m-1,If(m Mod i)=0 Then GoTo NotNextM,Next i,Print m,NotNextM,:,Next m,m,是否为素数,求,100,以内的素数,分析:,实际上,m,如果是素数的话,是不可能被大于,sqr,(,m,)的整数所整除。所以循环条件改为:,for I=2 to int(sqr,(m),.,这样循环的次数会大大减少。,2.Exit,语句,多种形式:,Exit For,、,Exit Do,、,Exit Sub,、,Exit Function,等。,作用:退出某种控制结构的执行。,3.End,语句,多种形式:,End,、,End If,、,End Select,、,End With,、,End Type,、,End Sub,、,End Function,、,作用:,End,结束一个程序的运行;其余表示某个结构的结束,与对应的结构语句配对出现。,4.,With 语句,形式如下:,With,对象,语句块,End With,作用:对某个对象执行一系列的操作,而不用重复指出对象的名称。,With Label1,.,Height=2000,.,Width=2000,.,FontSize,=22,.,Caption=MyLabel,End With,Label1,.,Height=2000,Label1,.,Width=2000,Label1,.,FontSize,=22,Label1,.,Caption=MyLabel,等价,:常用算法:,穷举法,“,穷举法”:也称为“枚举法”或“试凑法”,即将可能出现的各种情况一一测试,判断是否满足条件,一般采用循环来实现。,例,4.16,:百元买百鸡问题。假定小鸡每只,5,角,公鸡每只,2,元,母鸡每只,3,元。现在有,100,元钱要求买,100,只鸡,编程列出所有可能的购鸡方案。,【分析】,设母鸡、公鸡、小鸡各为,x,、,y,、,z,只,根据题目要求,列出方程为:,x+y+y=100,3x+2y+0.5z=100,三个未知数,两个方程,此题有若干个解。,解决此类问题采用,“,试凑法,”,,把每一种情况都考虑到。,方法一:最简单三个未知数利用三重循环来实现,方法二:从三个未知数的关系,利用两重循环来实现。,:常用算法:,递推法,“,递推法,”,又称为,“,迭代法,”,:其基本思想是把一个复杂的计算过程转化为简单过程的多次重复。每次重复都从,旧值的基础上递推出新值,并由新值代替旧值,。,例,4.17,:猴子吃桃子。小猴在某天摘桃若干个,当天吃掉一半多一个;第二天吃了剩下的桃子的一半多一个;以后每天都吃尚存桃子的一半多一个,到第,7,天要吃时只剩下一个,问小猴共摘下了多少个桃子?,【分析】:这是一个,“,递推,”,问题,先从最后一天推出倒数第二天的桃子,再从倒数第二天的桃子推出倒数第三天的桃子,。设第,n,天的桃子为,x,n,,那么它是前一天的桃子数的,x,n,-1,的一半减,1,,即,x,n,=,x,n,-1,/2,1,或者:,x,n,-1,=,(,x,n,+1,),*2,Private Sub Form_Click(),Dim n%,i%,x=1 ,第,7,天的桃子,Print,第,7,天的桃子数为,:1,只,For i=6 To 1 Step-1,x=(x+1)*2,Print,第,;i;,天的桃子数为,:;x;,只,Next I,:,End Sub,:常用算法:,求最大或最小值,方法,:在若干个数中求最大值,一般先假设一个较小的数为最大值的初值,若无法估计较小的值,则取第一个数为最大值的初值;然后将每一个数与最大值比较,若该数大于最大值,将该数替换为最大值;依次逐一比较。,例:随机产生,10,个,100,200,之间的数,求最大值。,Private Sub Command1_Click(),Max=100,For i=1 To 10,x=Int(Rnd,*101+100),Print x;,If x Max Then Max=x,Next i,Print,Print,最大值,=;,Max,End Sub,
展开阅读全文