首页计算机计算机软件VB程序设计 06 第6章 循环结构程序设计.pptx

06 第6章 循环结构程序设计.pptx

页数:37页文件大小:396.8 KB来源: VB程序设计ppt课件

本课件讲解循环结构程序设计,先给出循环结构三要素,再分别介绍For…Next、While...Wend与Do…Loop三种循环的格式与执行过程,说明多重循环的书写规则,最后归纳累加连乘、穷举、递推与求最值等常用算法。

第6章 循环结构程序设计章节封面,标示本章主题与所讲授的主要内容
引入:重复执行的代码段讲解页,说明IntegerS、FTn在本节中的概念与用法
循环结构三要素讲解页,说明其执行流程与循环条件写法
查看本课件的文字版(共 37 页,供检索与复制)

第1页:第6章 循环结构程序设计

第6章 循环结构程序设计

第6章循环结构程序设计▲*本章要点:For...Next循环While...Wend循环Do...Loop循环

第2页:引入:重复执行的代码段

引入:重复执行的代码段

Dim S As IntegerS=0S=S+1S=S+2……S=S+(n-2)S=S+n为解决某问题,可能某一段代码需要有条件的连续重复执行许多次,这就是循环程序结构。

需重复执行的一段代码,我们称之为循环体。循环控制结构问题1:计算S= 1+2+3+······+nS=S+nn=n+1S=S+nn=n+1S=0:n=1FTn在终值内

第3页:循环结构三要素

循环结构三要素

  • (1)进入循环的条件?
  • (2)什么情况下结束循环?
  • (3)循环体要完成的操作及循环体内如何改变循环条件。循环控制结构

第4页:6.1 For…Next循环结构

6.1 For…Next循环结构

初值循环变量6.1For…Next循环结构1.格式For<循环变量>=<初值>To<终值>[Step<步长>]<语句组1>[Exit For]<语句组2>Next[<循环变量>]循环变量值超过终值?

执行循环体循环变量+步长循环变量后续语句YesNo2.功能:执行过程如流程图所示

第5页:For…Next循环的说明

For…Next循环的说明

  • (1)循环变量——数值变量
  • (2)初值,终值,步长——数值表达式
  • (3)步长——可正可负,但不能为0,为1时可以省略步长>0时,必须:初值<=终值循环结束条件——循环变量的值>终值步长<0时,必须:初值>=终值循环结束条件——循环变量的值<终值
  • (4)Exit For——退出循环,常放在条件语句中
  • (5)Next之后的循环变量应与For语句中的循环变量一致,也可以省略

第6页:For…Next循环执行结果

For…Next循环执行结果

例:判断以下程序段的执行结果:

For i = 5 To 1 Step-1 Print i * i; Next iPrint Print i例:判断以下程序段的执行结果:X = 6 For K = 1 To 10 Step-2X = X + K Next K Print K,XK=1;超过终值不进入循环

第7页:累加求和示例

累加求和示例

Text1Label3累加分析:累加器(变量)初值S=0循环体(重复执行)S=S+I (I=1,2,…,N)

Private Sub Command1_Click() Dim N As Integer, I As Integer, S As IntegerN = Val( Text1.Text)S = 0 For I = 1 To NS = S + I Next I Label3.Caption = S End Sub【例6-1】求1+2+3+4+…+N

第8页:思考:累加与累乘练习

思考:累加与累乘练习

  • 1)n+1(2n-
  • 1)4.求5.求

第9页:【例6-2】求N!

【例6-2】求N!

【例6-2】求N!( N!=1×2×3×…×N)累乘分析:初始化:F=1循环体:F=F×I (I=1,2,3……N)程序:

Private Sub Command1_Click() Dim N As Integer, I As Integer, F As LongN = Val( Text1.Text)F = 1 For I = 1 To NF =F* I Next I Text2.Text = F End Sub

第10页:思考:累乘练习

思考:累乘练习

思考:1.求1×3×5×7……(共N项)。2.求:3.求:

第11页:

第12页:6.2 While...Wend循环结构

6.2 While...Wend循环结构

6.2While...Wend循环结构问题:求1+2+3+4+…小于某数N的最大值,N由用户指定。特点:已知循环条件、未知循环次数,用While...Wend循环结构实现较方便1.格式While <条件>[<语句组>]Wend2.功能F条件?语句组T

第13页:用While...Wend求累加和

用While...Wend求累加和

问题1:计算s= 1+2+3+······+100(用While Wend改写如下)Dim s As Integer, count As Integers = 0 ‘初始化count = 1 ‘初始化Whilecount <= 100‘循环开始s = s + count‘循环体语句count = count + 1‘循环体语句Wend‘循环结束print s

第14页:【例】用格里高利公式求π

【例】用格里高利公式求π

  • 1)判断出要用循环结构来做
  • 2)寻找(或创造)循环条件
  • 3)明确循环体,及循环条件在循环体中作用
  • 4)设计算法流程,或直接编程实现

第15页:

第16页:

第17页:6.3.1 Do…Loop While

6.3.1 Do…Loop While

Do〈循环体〉[Exit Do]〈循环体〉Loop While〈条件表达式〉6.3.1 Do … Loop While|Until语句TF条件循环体Do〈循环体〉[ExitDo]〈循环体〉LoopUntil〈条件表达式〉TF条件循环体

第18页:6.3.2 Do While…Loop

6.3.2 Do While…Loop

Do While〈条件表达式〉〈循环体〉[ Exit Do]〈循环体〉 Loop6.3.2 Do While|Until … Loop语句TF条件循环体DoUntil〈条件表达式〉〈循环体〉[ExitDo]〈循环体〉 LoopFT条件循环体

第19页:用Do While改写累加程序

用Do While改写累加程序

问题1改造成DoWhile结构:PrivateSubForm_Click()DimSum,CountAsIntegerSum=0Count=1DOWhileCount<=100Sum=Sum+countCount=Count+1LOOPText1.Text=SumEndSub当型格式问题1改造成DoUntil结构:PrivateSubForm_Click()DimSum,CountAsIntegerSum=0Count=1DOUntilCount>100Sum=Sum+countCount=Count+1LOOPText1.Text=SumEndSub直到型格式

第20页:【例6-5】按精度累加求近似值

【例6-5】按精度累加求近似值

【例6-5】求直至最后一项的值≤10-4为止。分析:用Sum表示累加和,初值:Sum=0重复:Sum=Sum+Term用N表示1,3,5,7,……初值:N=1重复:N=N+2用Term表示每一项,则Term=1/(N*N)归纳:初始化N=1,Sum=0重复Term=1/(N*N) , Sum=Sum+Term ,N=N+2循环终止条件Term<=0.0001

第21页:【例6-5】的代码实现

【例6-5】的代码实现

设单击窗体时开始计算,结果打印在窗体上。

Private Sub Form_Click()N = 1 : Sum = 0DoTerm = 1 / (N * N)Sum = Sum + TermN = N + 2 Loop Until Term <= 0.0001 Form1.FontSize = 12'设窗体的字体CurrentY = 200'设当前显示位置 Print "运算结果为:";Sum Print "最后一项的值为:";Term End Sub

第22页:【例6-7】求最大公约数与最小公倍数

【例6-7】求最大公约数与最小公倍数

  • (1)以M作被除数,N作除数,求余数R。
  • (2)如果R不为零,则将除数N做为新的被除数M,将余数R做为新的除数N,再进行相除,得到新的余数R。
  • (3)如果R仍不等于0,则重复上述步骤
  • (2)。如果R为零,则这时的除数N就是最大公约数。最小公倍数为两个数的积除以它们的最大公约数。

第23页:【例6-7】的界面设计

【例6-7】的界面设计

设计界面如下图所示:Text1Text2Label3Label4Command1Command2

第24页:【例6-7】的界面设计(代码)

【例6-7】的界面设计(代码)

Dim A As Integer, B As Integer, N As Integer, _M As Integer, R As Integer

Private Sub Command1_Click()M = Val( Text1.Text):N = Val( Text2.Text)A = M:B = NR = M Mod N Do While R <> 0M = NN = RR = M Mod N Loop Label3.Caption = N End Sub Private Sub Command2_Click()Label4.Caption = A * B / N End Sub

第25页:6.4 多重循环

6.4 多重循环

  • (1)每一种循环语句中的开始部分与结束部分的配对使用。(结构完整)
  • (2)多重循环的循环体不能相互交叉。(逻辑完整)6.4循环的嵌套

第26页:多重循环的书写规则

多重循环的书写规则

  • (4)外循环必须完全包含内循环,不能交叉;
  • (5)不能从循环体外转向循环体内,也不能从外循环转向内循环,反之则可以。正确错误
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

第27页:【例6-9】求累加和数列

【例6-9】求累加和数列

  • 2)+(1+2+
  • 3)+…(1+2+3+…+n),n由用户输入。分析: ……
Private Sub Form_Click()N = Val( Text1.Text)Sum = 0 For I = 1 To NSum1 = 0 For J = 1 To ISum1 = Sum1 + J Next JSum = Sum + Sum1 Next I Text2.Text = Sum End Sub

第28页:6.5 循环结构程序举例

6.5 循环结构程序举例

6.5循环结构程序举例自学

第29页:6.6常用算法

6.6常用算法

1.累加、连乘1~100的5或7的倍数的和Sum=0Fori=1To100IfiMod5=0OriMod7=0ThenSum=Sum+iEndIfNextiPrintSum3~10的乘积t = 1Fori=3To10t=t*iNextiPrintt思考:若把循环体前面置各变量初值的语句放在循环体内,程序运行时会产生什么情况?

算法是对某个问题求解过程的描述.

第30页:练习:求自然对数e的近似值

练习:求自然对数e的近似值

练习[6-15]求自然对数e的近似值,要求误差小于10-6,近似公式为:

Private Sub Form_Click() Dim i%,n&, t!, e!e = 0 : n = 1‘ e存放累加和、n存放阶乘i = 0 : t = 1‘ i计数器、t第i项的值 Do While t > 0.00001e = e + t : i = i + 1‘累加、连乘n = n * i : t = 1 / n Loop Print "计算了"; i; "项的和是"; e End Sub该例题涉及两个问题:(1)用循环结构求级数和的问题。本例根据某项值的精度来控制循环的结束与否。(2)累加:e=e+t循环体外对累加和的变量清零e=0连乘:n=n*i循环体外对连乘积变量置1n=1

第31页:穷举法

穷举法

2.穷举法“穷举法”也的定义
“枚举法”或“试凑法”,即将可能出现的各种情况一一测试,判断是否满足条件,一般采用循环来实现。例[6-9]:百元买百鸡问题。鸡翁一,值钱五;鸡母一,值钱三,鸡雏三,值钱1。现在有100元钱要求买100只鸡,编程列出所有可能的购鸡方案。设母鸡、公鸡、小鸡各为x、y、z只,根据题目要求,列出方程为:x+y+z=1005x+3y+z/3=100三个未知数,两个方程,此题有若干个解。解决此类问题采用“试凑法”,把每一种情况都考虑到。方法一:最简单三个未知数利用三重循环来实现。方法二:从三个未知数的关系,利用两重循环来实现。

第32页:穷举法(代码)

穷举法(代码)

2.穷举法

Private Sub Form_DblClick() Dim x%, y%, z%Forx = 1 To 19 For y= 1 To 33z = 100-x-yIf5 * x + 3 * y + z / 3 = 100Then Print "公鸡:"; x, "母鸡"; y, "小鸡"; z End If Next yNextx End Sub

第33页:递推法

递推法

3.递推法“递推法”又的定义
“迭代法”,其基本思想是把一个复杂的计算过程转化为简单过程的多次重复。每次重复都从旧值的基础上递推出新值,并由新值代替旧值。例6.17猴子吃桃子。小猴在一天摘了若干个桃子,当天吃掉一半多一个;第二天接着吃了剩下的桃子的一半多一个;以后每天都吃尚存桃子的一半零一个,到第7天早上要吃时只剩下一个了,问小猴那天共摘下了多少个桃子?分析:这是一个“递推”问题,先从最后一天推出倒数第二天的桃子,再从倒数第二天的桃子推出倒数第三天的桃子……。设第n天剩的桃子为xn,那么前一天的桃子数xn-1。

第34页:求最大值与最小值

求最大值与最小值

4.求最小、最大值在若干个数中求最大值,一般先假设一个较小的数为最大值的初值,若无法估计较小的值,则取第一个数为最大值的初值;然后将每一个数与最大值比较,若该数大于最大值,将该数替换为最大值;依次逐一比较。

例:随机产生10个100~200之间的整数,求最大值。

Private Sub Command1_Click()Max = 100 For i = 1 To 10x = Int(Rnd * 101 + 100) Print x; If x > Max Then Max = x Next iPrint Print "最大值="; Max End Sub

第35页:本章小结

本章小结

1.For…Next循环结构For<循环变量>=<初值>To<终值>[Step<步长>]<语句组1>[Exit For]<语句组2>Next[<循环变量>]

第36页:第6章 小结(续)

第6章 小结(续)

2. While...

Wend循环结构 While <条件>[<语句组>] WendDo [{While|Until}<条件>][<语句组1>][ Exit Do][<语句组2>] LoopDo[<语句组1>][ Exit Do][<语句组2>] Loop [{While|Until}<条件>]3.Do… Loop循环结构

第37页:上机练习

上机练习

【练习6-11】、【练习6-16】。增加题:打印以下格式乘法九九表。思考:打印上三角或下三角程序如何改动?要打印下三角?

For i = 1 To 9 For j = 1 To 9se = i & "×" & j & "=" & i * j Print Tab((j-1) * 9 + 1); se; Next jPrint Next i
顶部目录