循环结构程序设计 .ppt
Visual Basic第五章 循环结构程序设计四种基本结构结构化程序设计方法的四种基本结构:顺序顺序 分支分支 循环循环 过程(函数和子程序)过程(函数和子程序)仅使用四种基本的控制结构来编写程序。仅使用四种基本的控制结构来编写程序。每种控制结构只有一个入口和一个出口。每种控制结构只有一个入口和一个出口。循环结构 在实际工作中,经常遇到一些操作过程并不复杂,但又需要反复进行相同处理的问题,比如,统计本单位所有人员的工资,求全班同学各科的平均成绩等等。解决这些问题从逻辑上说并不复杂,但如果单纯用顺序结构来处理,那将得到一个非常乏味和冗长的程序。循环结构n ForNext 语句。语句。n WhileWend 语句。语句。n DoLoop 语句。语句。For循环语句语法:语法:For 循环变量初值循环变量初值 to 终值终值 Step 步长步长 语句块语句块Exit For循环体 语句块语句块 Next 循环变量循环变量其中:其中:循环变量,必须为数值型变量。初值、终值、步长,均为数值型表达式。省略Step子句则步长为1。For语句、Next语句中的循环变量必须相同。功能:功能:For:循环变量置初值、确定终值和步长。循环变量置初值、确定终值和步长。判断是进入循环还是跳过循环。判断是进入循环还是跳过循环。Next:实现循环变量:实现循环变量“增值增值”。判断是继续循环还是跳出循环。判断是继续循环还是跳出循环。循环终止条件:循环终止条件:循环变量的值沿变化方向沿变化方向“超过超过”终值终值。For循环语句For循环的流程图循环变量赋初值、循环变量赋初值、计算终值、步长。计算终值、步长。执行循环体执行循环体 循环变量超过终值?循环变量超过终值?循环变量增值循环变量增值For语句Next语句是是是是否否否否循环变量超过终值?循环变量超过终值?看几个简单的例子例例1:Dim i As IntegerFor i=1 To 5Print i,Next i注意:注意:在 For 语句中没有 Step 子句,缺省的步长是 1。循环变量 i 的变化方向是从小到大,“超过”终值指的是大于终值。让我们走一走程序让我们走一走程序 看几个简单的例子例例2:Dim i As IntegerFor i=5 To 1 Step -2Print i,Next i注意:步长不是 1,For 语句中不能省略 Step 子句。循环变量 i 的变化方向是从大到小,“超过”终值指的是小于终值。让我们走一走程序让我们走一走程序 看几个简单的例子例例3:Dim i As IntegerFor i=1 To 5 Step -3Print i,Next i循环体一次也不执行循环体一次也不执行!循环次数的计算 在For循环中,循环体的循环次数由初值、终值和步长三个表达式的值确定,计算公式为:循环次数循环次数=Int(终值终值-初值初值)/步长步长)+1 For循环主要用于循环次数已知循环次数已知或可以用一个表达用一个表达式计算式计算出来的题目中。循环变量的用法 循环变量的两个主要作用:用于控制循环的次数;用于控制循环的次数;用作数组元素的下标。用作数组元素的下标。先看一个例子:Dim i As IntegerFor i=1 TO 5Print i,i=i +1Next i让我们走一走 程序 一个原则在For循环的循环体中只引用循环变量的值;只引用循环变量的值;不改变循环变量的值。不改变循环变量的值。求 S=1+2+10题目分析:累加类型的题目,使用累加结构的赋值语句。程序如下:Dim s As Integer,i As Integers=0For i=1 To 10s=s+iNext iPrint “S=”;s求 T=1*2*10题目分析:累乘类型的题目,使用累乘结构的赋值语句。程序如下:Dim t As Double,i As Integert=1For i=1 To 10t=t*iNext iPrint “T=”;tExit For 语句语法:语法:Exit For 功能:功能:退出当前循环。Exit For 语句一般与 If 语句一起使用。For i=If 逻辑表达式逻辑表达式 then Exit For Next i例题:例题:将1100间各奇数(1、3、5、7)顺序累加,直到其和大于100时为止。Dim s As Integer,i As Integers=0For i=1 To 100 Step 2s=s+iIf s 100 then Exit ForNext iPrint “S=”;sExit For 语句WhileWend语句语法:语法:While 逻辑表达式逻辑表达式循环体循环体Wend功能:功能:如果逻辑表达式的值为 True,则执行循环体,一直执行到 Wend 语句。然后再回到 While 语句,并再一次检查逻辑表达式的值,如果 还是为 True,则重复执行。如果不为 True,执行Wend语句的下一句。例题:例题:将1100间各奇数(1、3、5、7)顺序累加,直到其和大于100时为止。Dim s As Integer,i As Integers=0i=1While s 100 then Exit Doi=i+2LoopPrint “S=“;sDoLoop语句让我们走一走 程序DoLoop语句的三种主要用法:2、当型、当型Do循环循环Do While 逻辑表达式逻辑表达式循环体循环体Loop注意:注意:当型Do循环是前测试型,循环体有可能一次也不执行。DoLoop语句DoLoop语句例题:例题:将1100间各奇数(1、3、5、7)顺序累加,直到其和大于100时为止。Dim s As Integer,i As Integers=0:i=1Do While s 100Print “S=“;s让我们走一走程序循环的五种结构n For If 型循环型循环n While Wend 型循环型循环n Do If 型循环型循环n 当型当型 Do 循环循环n 直到型直到型 Do 循环循环For If 型循环For 循环变量初值循环变量初值 to 终值终值 Step 步长步长 If 逻辑表达式逻辑表达式 Then Exit For Next 循环变量循环变量WhileWend 型循环While 逻辑表达式逻辑表达式WendDo If 型循环DoIf 逻辑表达式逻辑表达式 Then Exit DoLoop当型 Do 循环Do While 逻辑表达式逻辑表达式Loop直到型 Do 循环DoLoop Until 逻辑表达式逻辑表达式循环的嵌套 在一个循环体内又包含了一个完整的循环,这样的结构称为多重循环或循环的嵌套。在程序设计时,许多问题要用二重或多重循环才能解决。For循环、循环、While循环、循环、Do循环循环都可以互相嵌套。都可以互相嵌套。多重循环的执行过程是外循环执行一次,内循环执行一遍,在内循环结束后,再进行下一次外循环,如此反复,直到外循环结束。循环嵌套的规则只许嵌套,不许交叉;只许嵌套,不许交叉;只许转出,不许转入。只许转出,不许转入。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 循环嵌套的规则 一个简单的二重循环Dim i As Integer,j As IntegerFor i=1 To 4 Print,For j=1 To 4 Print i;j,Next j Print Next i 一个简单的二重循环打印九九乘法表打印九九乘法表Private Sub Form_Click()()Dim i As Integer,j As Integer,str As StringPrint:Print:Print Print Tab(40);九九乘法表九九乘法表“:PrintFor i=1 To 9Print Tab(6);For j=1 To 9 str=i&j&=&i*j Print Tab(j 1)*9+6);str;Next j:PrintNext iEnd Sub有一个问题81次!次!记住:记住:内循环的执行次数内循环的执行次数外循环的循环次数外循环的循环次数内循环的循环次数内循环的循环次数内循环总共执行了多少次?内循环总共执行了多少次?1、Go To 语句语句 形式形式:Go To 标号|行号 作用:无条件地转移到标号或行号指定的语句。标号是一个标识符,行号是一个整数。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 结束一个程序的运行;其余表示某个结构的结束,与对应的结构语句配对出现。其他辅助控制语句With语句语法:语法:With 对象名对象名 语句块语句块 End With功能:功能:对某个对象执行一系列的操作,而不用重复对象名称。With Label1.Height=200Label1.Height=200.Width=200Label1.Width=200.FontSize=22Label1.FontSize=22.Caption=MyLabelLabel1.Caption=MyLabelEnd With循环习题课程序设计三剑客 穷举法穷举法 递推法递推法 迭代法迭代法穷举法穷举法的基本思路:穷举法的基本思路:穷举所有可能出现的情况,逐一进行测试,判断其是否满足给定的条件。穷举法实现的关键:穷举法实现的关键:建立正确的穷举,一般用循环来实现。注意:注意:1、有意义的选项,一项不能少一项不能少。2、尽量排除无意义的选项,以减少循环的次数。递推法递推法的基本思路:递推法的基本思路:利用已知的一项或多项数据,推算出新的数据项。然后,再利用这个新的数据项推算出下一个数据项。重复此过程,直到推算出最后结果时为止。递推法实现的关键:递推法实现的关键:确定递推初值;确定递推初值;建立递推公式。建立递推公式。递归法递归的概念:递归的概念:递归定义递归定义 对象利用自己定义自己。递归调用递归调用 过程或函数自己调用自己。递归调用又分为:直接递归调用直接递归调用 过程或函数直接调用自己。间接递归调用间接递归调用 过程或函数通过其它过程或函数调用自己。注意:注意:递归调用一般要用 if 语句来进行控制,使递归过程到某一条件满足时结束。递归法的基本思路:递归法的基本思路:递归法类似于数学证明中的反推法,一般是从结果出发,归纳出后一结果与前一结果的关系,寻找其规律性。递归法实现的关键:递归法实现的关键:建立递归函数;建立递归函数;确定递归终止条件。确定递归终止条件。递归法题型:累加题目:求题目:求 S=1+2+3+10。程序如下:Dim s As Integer,i As Integers=0For i=1 To 10s=s+iNext iPrint “S=”;s题型:累加题目:求题目:求 S=1+2+2+3 +18+19+19+20。程序如下:Dim s As Integer,i As Integers=0For i=1 To 19s=s+i+(i+1)Next iPrint “S=”;s题型:累加题目:求题目:求程序如下:Dim s As Double,i As Integer,t AS Integers=0:t=-1For i=1 To 100t=t*-1s=s+t/iNext iPrint “S=”;s题型:累乘题目:求题目:求 T=1*2*3*10。程序如下:Dim t As Double,i As Integert=1For i=1 To 10t=t*iNext iPrint “T=”;t题型:累乘题目:题目:程序如下:Dim t As Double,i As Integert=1For i=1 To 10t=t*i/(i+1)Next iPrint “T=”;t题型:累加累乘程序的基本架构:程序的基本架构:s=0:t=For i=程序段,将程序段,将 t 置为下一项的值置为下一项的值s=s+tNext iPrint “S=”;s题型:累加累乘题目:求题目:求 S=1!+2!+3!+10!。程序如下:Dim s As Long,t As LongDim i As Integer,j As Integers=0For i=1 To 10t=1For j=1 To it=t*jNext js=s+tNext iPrint S=;s题型:累加累乘题目:求题目:求 S=1!+2!+3!+10!。使用递推法来做:使用递推法来做:1、确定递推初值、确定递推初值T 12、建立递推公式、建立递推公式N项(项(N1)项)项n题型:累加累乘题目:求题目:求 S=1!+2!+3!+10!。程序如下:Dim s As Long,t As Long,i As Integers=1:t=1 For i=2 To 10 t=t*i s=s+t Next i Print S=;s例题:求例题:求 S=20+21+22+2n,n=63。递推初值:20=1。递推公式:n项项=(n-1)项项*2。Dim s As Double,t As Double,i As Integers=1 :t=1For i=1 To 63t=2i/t*2s=s+tNext iPrint S=;s题型:累加累乘 题型:判断m能否被n整除注意 VB 中两个独特的算术运算符:Mod取余取余整除整除例如:10 Mod 3运算结果 110 3运算结果 3判断判断 m 能否被能否被 n 整除的方法:整除的方法:m Mod n 0 题型:判断m能否被n整除例题:例题:求出 100 以内所有能被 3 和 4 同时整除的数。程序如下:Dim i As Integer For i=1 To 100 If i Mod 3=0 And i Mod 4=0 Then Print i;Next i例题:例题:求20002050年之间的所有闰年。闰年的条件是:(1)能被4整除,但不能被100整除的年份是闰年;(2)能被100整除,又能被400整除的年份是闰年。程序如下:程序如下:Dim i As IntegerFor i=2000 To 2050If i Mod 4=0 And i Mod 1000 Then Print i;If i Mod 100=0 And i Mod 400=0 Then Print i;Next i 题型:判断m能否被n整除 VB的取子串函数语法:语法:Left(串表达式串表达式,n)函数值功能:功能:取字符串左边 n 个字符。示例:示例:Left(“ABCDEFG”,3)“ABC”语法:语法:Mid(串表达式串表达式,n1,n2)功能:功能:在字符串中从 n1 开始向右取 n2 个字符。示例:示例:Mid(“ABCDEFG”,2,3)“BCD”语法:语法:Right(串表达式串表达式,n)功能:功能:取字符串右边 n 个字符。示例:示例:Right(“ABCDEFG”,3)“EFG”题型:打印图形 题型:打印图形Private Sub Form_Click()Dim s As String*8,i As Integer s=*Print:Print For i=1 To 8 Print Tab(10+i);s Next iEnd Sub 题型:打印图形分析:1)首先确定图形中心线位置第20个字符处。2)将第 n 行的起始打印位置,表示为行号 n 的函数,起始打印位置=F(21-n)。3)将第 n 行打印星号的个数,表示为行号 n 的函数,星号个数=F(2*n-1)。4)可先将一个有十五个星号的字符串赋给串变量 S,打印时取其子串输出。题型:打印图形程序如下:Private Sub Form_Click()Dim s As String,i As Integer s=*For i=1 To 8 Print Tab(21 i);Left(s,2*i 1)Next iEnd Sub 题型:打印图形 题型:打印图形程序如下:Private Sub Form_Click()Dim s As String,i As Integer s=0123456789 Print:Print For i=1 To 10 Print Tab(21-i);String(2*i-1,Mid(s,i,1)Next iEnd Sub 题型:打印图形 题型:打印图形程序如下:Private Sub Form_Click()Dim i As Integer Print:Print For i=1 To 10 Print Tab(21-i);String(2*i-1,Chr(47+i)Next iEnd SubVB中的取整函数语法:语法:Int(数值表达式)Fix(数值表达式)Round(数值表达式,小数点右边应保留的位数)功能功能:1)如果数值表达式的值为正,Int 和 Fix 都会删除其小数部份而返回剩下的整数。2)如果数值表达式的值为负,则 Int 返回小于或等于其值的第一个负整数,而 Fix 则会返回大于或等于其值的第一个负整数。3)Round将数值表达式的值四舍五入到 n 位小数。例如:例如:Int(3.4)3Fix(3.4)3Int(-3.4)-4Fix(-3.4)-3Round(-3.3456,1)-3.3Round(-3.3456,2)-3.35VB中的取整函数034-3-4题型:分拆数字例题:例题:求0999之间所有的“水仙花”数。例如:例如:153=13+53+33。Dim i As Integer,a As Integer,b As Integer,c As IntegerFor i=0 To 999a=Int(i/100)b=Int(i-a*100)/10)c=i-a*100-b*10If i=a*a*a+b*b*b+c*c*c Then Print i;Next i题型:分拆数字思考题思考题 求1100之间所有的“同构数”。“同构数”是这样一种数:它出现在它的平方数的右端。例如:5的平方是25,5是25中右端的数,5就是同构数。25也是一个同构数,它的平方是625。题型:数列例题:例题:求裴波那契数列 1,1,2,3,5,8,的前20项。递推初始条件:F1=1,F2=1。递推公式:Fn=Fn-2+Fn-1。递推过程:a=1b=1c=2a=1b=2c=3a=2b=3c=5例题:例题:求裴波那契数列 1,1,2,3,5,8,的前20项。Dim a As Integer,b As Integer,c As Integer a=1 :b=1 Print a;b;For i=3 To 20 c=a+b Print c;a=b :b=c Next i题型:数列例题:例题:求e,直到前后两项之差小于104为止。Dim e As Double,m1 As Double,m2 As Double,n As Integere=2:m2=1:n=1Don=n+1m1=m2m2=m1/ne=e+m2Loop Until m1-m2 0.0001Print e=;e 题型:级数例题:例题:求 S=20+21+22+2n,n=63。递推初值:20=1。递推公式:n项项=(n-1)项项*2。Dim s As Double,t As Double,i As Integers=1 :t=1For i=1 To 63t=t*2s=s+tNext iPrint S=;s第一步:求出通项公式求出通项公式。第二步:求出第求出第 n 项与项与 n-1 项之比项之比 k。第三步:建立递推公式:建立递推公式:n 项项=k*(n-1)项项。题型:级数例题:例题:求 Sin(x)=x/1 x3/3!+x5/5!x7/7!+,n=20。第一步,通项公式。第n项=第二步,第n项与n-1项之比。k=第三步,递推公式。n项=(n-1)项 题型:级数Dim SinX As Double,x As Double,t As DoubleDim i As Integer x=InputBox(“X=”,“输入框输入框)SinX=x :t=x For i=2 To 20 t=t*(-1)*x*x/(2*i-2)/(2*i-1)SinX=SinX+t Next i Print x=;x,Sin(x)=;SinX 题型:级数随机函数Rnd函数函数语法:语法:Rnd功能:功能:Rnd函数返回均匀分布在 0,1)区间上的随机数,类型为Single。(0 Rnd 1)Randomize语句语句语法:语法:Randomize功能:功能:利用系统计时器的值初始化随机数生成器。随机函数Dim i As Integer Print:Print For i=1 To 50 If i Mod 5=0 Then Print Round(Rnd,4)Else Print Round(Rnd,4),End If Next i随机函数 两次运行程序得到的随机数,其序列是相同的。随机函数Dim i As Integer Print:PrintRandomize随机函数初始化语句随机函数初始化语句 For i=1 To 50 If i Mod 5=0 Then Print Round(Rnd,4)Else Print Round(Rnd,4),End If Next i随机函数 第一次运行程序得到的随机数:第二次运行程序得到的随机数:随机函数使用以下公式可产生均匀分布在某个区间上的随机整数:Int(UpperBound-LowerBound+1)*Rnd+LowerBound)这里,UpperBound 是随机数范围的上限,而 LowerBound 是随机数范围的下限。例如:0,10Int(11*Rnd)100,120Int(21*Rnd+100)10,99Int(90*Rnd+10)随机函数随机函数题目:利用随机函数求。(辅助图形:1/4 单位圆)1,10,0随机函数1/4 单位圆的面积:R*R*/41*1*/4单位正方形的面积:1*11另外:落在圆内的点数落在圆内的点数m,总点数,总点数n因此:4*m/n随机函数Dim m As Long,n As Long,i As Long Dim x As Single,y As Single n=InputBox(N=,输入对话框输入对话框):m=0 For i=1 To n x=Rnd:y=Rnd If x*x+y*y n;(2)m 除以 n 得余数 r;(3)若 r=0,则 n 为最大公约数,结束;否则执行(4);(4)m n,n r,再重复执行(2)。求最小公倍数的算法:求最小公倍数的算法:原始的 m 和 n 的乘积除以最大公约数,就得到它们的最小公倍数。最大公约数和最小公倍数MNR1293MNR930 最大公约数和最小公倍数Private Sub Command计算计算_Click()Dim m As Integer,n As Integer,r As Integer m=TextM.Text n=TextN.Text If m n Then r=m m=n n=r End If 最大公约数和最小公倍数 r=m Mod n Do While(r 0)m=n n=r r=m Mod n Loop Label最大公约数最大公约数.Caption=最大公约数最大公约数=&n r=n:m=TextM.Text :n=TextN.Text Label最小公倍数最小公倍数.Caption=最小公倍数最小公倍数=&m*n/rEnd Sub 最大公约数和最小公倍数百钱买百鸡例题:例题:鸡翁一、值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、母、雏各几何?For x=0 To 100 For y=0 To 100 For z=0 To 100 If x+y+z=100 And 5*x+3*y+z/3=100 Then Print x,y,z End If Dim x As Integer,y As Integer,z As Integer Print cock,hen,chick For x=0 To 19 For y=0 To 33 z=100-x-y If 5*x+3*y+z/3=100 Then Print x,y,z End If Next y Next x百钱买百鸡