循环结构程序设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
25
5.3.1 后测型Do…Loop循环语句
Do…Loop While循环流程图 流程图
Do…Loop Until循环
26
5.3.1 后测型Do…Loop循环语句 【例5-10】将400~600间能够被3整除的数 输出(上机练习)
【例5-11】(略)
27
5.4 循环嵌套
介绍:
一个循环结构中又包含一个或多个循环结构被称为 循环嵌套,或称多重循环。 多重循环对嵌套的层数没有限制。有几层嵌套,就 称为几重循环,如二重循环、三重循环、四重循环 等。一般地,把嵌套在一个循环体内部的另一个循 环结构称为内循环;这样,嵌套了其他内循环部分 的循环结构就称为外循环。 为了使多重循环结构具有较好的可读性,通常用缩 进方式书写相应的源代码。
…
…
Loop
Wend
…
…
Next I
Loop Until I>10
表5-2 错误的循环嵌套结构
For I=1 To 10 … For J=1 To 20
… Next I … Next J
Do …
For J=1 To 20 … While I<=10 …
Next J
For I=1 To 10 Do
…
…
10
5.1 For循环语句
【例5-4】参看教材P75。
11
5.1 For循环语句
【例5-5】求Fibonacci数列前15项的值。 Fibonacci数列为:
1,1,2,3,5,8,…。
分析:数列的第一项和第二项为1,从第三项开始,每一
项都是前两项之和,即:
F1 = 1
(n=1)
F2 = 1
(n=2)
VB常用的循环语句有For…Next,While…Wend和Do…Loop语 句。For…Next用于已知循环次数的情况,而While…Wend和 Do…Loop主要用于不知道循环次数的情况,在给定的条件满 足时执行循环体。
1
第5章 循环结构程序设计
本章内容及要求:
熟练掌握实现循环结构的For/Next语句、While/Wend语句 、Do/Loop结构的使用,掌握多重循环。
方案二:假定a、b、c分别为三位整数的百位、十位个位数 字,可以得到100,101,…,999的三位数,同时对其判断 是否为水仙花数(用三重循环实现)。
35
5.4 循环嵌套
思考:
本例应用了一种常见算法—穷举法。该算法根据所 提问题,穷举所有可能的情形,并从中找出符合要 求的解。因此,穷举法常用于解决“是否存在”以 及“有多少种符合要求的解”等类型的问题。由于 穷举法需要列举所有可能的情形,因此采用循环是 最有效的实现方法。 【例】如果将一角钱换成零钱(可以包括1分、2分 和5分中的任意多个面值),共有多少种换法?
<语句块>
[Exit For]
<语句块>
Next [<循环变量>]
4
5.1 For循环语句
说明:
循环变量:必须为数值型,取值范围在初值和终值之间 步长:数值型,一般为正,初值应小于等于终值;若为 负,初值应大于等于终值;默认为1。 语句块:可以是一句或多句语句,构成循环体。 Exit For:表示当遇到该语句时,退出循环,执行Next 行的后继语句。 次数m由初值\终值\步长决定:
7
5.1 For循环语句
【例5-2】求n!,n的值由用户输入。 分析:由阶乘的定义可知:n1=1×2×3×…×(n-1) ×n,所 以应该采用连乘的方法,用变量fact来存放连乘积,用变量i 来存放要连乘的乘数和循环计数器,从1开始到n为止。
8
5.1 For循环语句
循环结构中,最常用的算法:累加、连乘。
33
5.4 循环嵌套
【例5-14】编程求不定方程的解。
34
5.4 循环嵌套
【例5-15】 如果一个三位数等于其各位数字的立方 和,则称这个数为水仙花数,如153=13+53+33, 370=33+73+03 ,试编程找出所有的水仙花数。
分析
方案一:从100,101,102,…,999中,对每个数均检测是 否符合水仙花数的条件(用单层的循环即可实现)。
21
5.3.1 前测型Do…Loop循环语句
【例5-8】用Do循环结构实现例5-2求n!
22
5.3.1 前测型Do…Loop循环语句
【例5-9】求满足1+2+3+…+n≥1000 n的最小值
思考:如果本例用Do While …Loop循环语句实现,代码应 如何改动?
23
5.3.2 后测型Do…Loop循环语句
功能:如果<条件表达式>为True(非0值),则执行<语句块 >(即循环体);如果<条件表达式>的值是False(值为0) ,则退出循环。 执行流程图:
13
5.2 While循环语句
说明:
<条件表达式>的组成与If语句中的<条件表达式>的组成要 求相同。
实际进行程序设计时,循环体中语句的执行应能使条件发 生改变,以使<条件表达式>的值最终可以出现False。否 则会出现死循环。
Fn = Fn-1 + Fn-2 (n≥3)
在本例中,F1代表当前第一项的值,F2代表第二项的值,
F3代表第三项的值,当此轮计算完成后,F2的值将成为第一
项的值,F3的值将成为第二项的值,然后可以进行下一轮的
运算,直到最后得到所有结果。
12
5.2 While循环语句
格式: While <条件表达式> <语句块> Wend
17
5.3 Do…Loop循环语句
导入:
Do…Loop循环也属于条件型循环,即根据条件的 成立与否来决定是否执行循环。Do…Loop循环的应用 具有很强的灵活性,主要体现在:它既能指定循环开 始条件,又能指定循环结束条件;既能构成前测型 Do…Loop循环语句,又能构成后测型Do…Loop循环语 句。
28
5.4 循环嵌套
说明:
外循环必须完全包含内循环,不能交叉,如表5-1 和表5-2所示; 内循环变量与外循环变量不能同名; 多重循环的执行过程是,外循环每执行一次,内循 环要从头到尾执行一遍; 在多重循环的任何一层中都可以使用Exit Do或 Exit For退出循环,但要注意只能退出Exit Do或 Exit For语句所对应的最内层循环,而不是一次退 出多层循环。
DoWhile J<=20 While J<=20
…
…
Next I
Loop Until I>10
…
…
Loop
Wend
30
5.4 循环嵌套
【例5-12】编程,实现要求的图形。
31
5.4 循环嵌套
【例5-13】编程打印九九乘法表,程序运行界 面见下图。
32
5.4 循环嵌套
分析:
输出九九乘法表,可以用外层循环变量i控制每行 的输出,内循环变量j控制各行中的每个等式的输 出,而各行中的每个等式正好是“i*j”。 此外主要的问题是控制每个等式出现的位置,可以 用Tab函数来实现,假设每个等式的宽度为9,第一 个等式出现在第1列,第二个等式出现在第10列, ……,依次类推,则每个等式出现的位置就可以这 样表示:Tab((j-1)*9+1)。
分析:
我国现有人口13亿,p是n年后我国人口达到的数量(20 亿),r是年增长率(1.2%)。求解此问题可根据公式:
p=13×(1+r)n, 利用While循环求得n。
16
5.2 While循环语句
【例5-7】编写程序,输入一个正整数n(n≥3),判断其是否 为素数。
分析:只能被1和本身整除的正整数称为素数。判断一个数n是 不是素数,最简单的方法就是根据素数的定义,利用2~n-1 之间的整数依次去除n,如果都不能整除,就n是素数,反之 则n不是素数。从数学上,只要n不能被2~n/2或2~ n 之间的 所有整数整除,则n是素数,否则n不是素数。后一种方法可 以减少循环的次数,提高执行效率。 本例中,设置一个数值型变量flag, flag值为1时表示这 个数是素数,为0时表示不是素数。初始flag=1,在循环判 断时,若某数n能n 被2~ 之间的某数整除将flag值设为0。
第5章 循环结构程序设计
循环结构和顺序结构、选择结构都是结构化程序设计的基本 控制结构。 在编程中一些操作并不复杂,但需要反复执行多次的问题, 需采用循环结构。如:对全年级1500名学生都进行例4-4介 绍的百分制转换为五分制操作。 循环结构是指程序中有规律地反复执行某一程序块的现象。
被重复执行的程序块称为循环体; 循环体的执行与否及次数多少视循环类型与条件而定; 无论何种类型的循环结构,都必须确保循环体的重复执行能被终止。
重点:循环的实现及其应用。 难点:多重循环。
2
第5章 循环结构程序设计
For循环
当型循环
循 环
前测型循环 Do 循环
直到型循环
当型循环
后测型循环 直到型循环
While循环
3
5.1 For循环语句
For循环是计数型循环结构,用于控制循环 次数预知是循环结构。
格式:
步长>]
For <循环变量> = <初值> To <终值> [Step <
5.3.1 前测型Do…Loop循环语句
说明:
Do While…Loop是当型循环结构。当<条件表达式>的值为True 时执行循环体;当<条件表达式>的值为False时退出循环; Do Until…Loop是直到型循环结构。当<条件表达式>的值为 False时执行循环体;直到<条件表达式>的值为True时退出循 环; <条件表达式>的组成与If语句中的<条件表达式>的组成要求相 同; Exit Do语句表示当遇到该语句时,退出循环,执行Loop行的 后继语句 当省略[While | Until <条件表达式>]子句时,即循环结构仅 由Do…Loop关键字构成,表示无条件循环,这时在循环体内应 该有Exit Do语句,否则为死循环。
18
5.3.1 前测型Do…Loop循环语句
格式:
Do [While | Until <条件表达式>] <语句块> [Exit Do] <语句块>
Loop
19
Fra Baidu bibliotek
5.3.1 前测型Do…Loop循环语句
前测型Do…Loop循环的流程图
Do While…Loop流程图
Do Until…Loop流程图
20
29
5.4 循环嵌套
表5-1 正确的循环嵌套结构
For I=1 To 10 … For J=1 To 20
… Next J … Next I
Do … For J=1 To 20 … Next J …
While I<=10
For I=1 To 10 Do
…
…
Do While J<=20 While J<=20
m = Int((终值-初值)/步长+1)
5
5.1 For循环语句
步长为正数
步长为负数
6
5.1 For循环语句
【例5-1】求2+4+6+……+100的值。 分析:
进行程序设计应采用累加的方法,用变量sum来存放累加和 ,用变量i来存放加数。同时i还要作为循环计数器。 进行程序设计时,分为界面设计、控件对象属性设置和编写 程序代码3个步骤。
格式:
Do <语句块> [Exit Do] <语句块>
Loop [While | Until <条件表达式>]
24
5.3.1 后测型Do…Loop循环语句
说明:
后测型Do…Loop循环语句与前测型Do…Loop循环语句的主要 区别在于:
后测型要先执行一次循环体,再判断条件;而前测型要 先判断条件,然后根据判断结果决定是否执行循环体。因此 对于后测型,不管条件是否满足,循环体至少有一次执行机 会。
“While/当循环”可以指定一个循环终止的条件,而For循 环只能进行指定次数的重复。因此,当需要由数据的某个条 件是否出现来控制循环时,应当使用While…Wend一类的循 环。
15
5.2 While循环语句
【例5-6】我国现有人口13亿,按照年增长率1.2%计算,多少 年后我国人口达到20亿?
注意:累加和sum的初值置为0,而连乘积fact的初值 置为1,并且它们的赋值操作应该在循环体外、循环 开始前完成。
9
5.1 For循环语句
【例5-3】利用多项式e=1+1/1!+1/2!+1/3!+…+1/n!求自然对 数e的近似值,要求计算到第15项。
分析: 在计算级数的和时,先求第i项的阶乘,再将各项阶乘的 倒数进行累加。程序中设计两个变量sum和fact分别作为 累加和与连乘积,其赋初值分别为0和1。 为防止项数过大阶乘溢出,定义fact和sum为double类型 。
例如,如下一段程序:
While b>0 c=c+a b=b-1
Wend
每次执行循环以前,都要测试条件表达式(b>0 )的值。如果结果为True,则执行循环体。直到条件表达 式为False(即b<=0) 时结束循环,转移到Wend的后继语 句。
14
5.2 While循环语句
While循环与For循环的区别是:For循环对循环体执行指定 次数, While循环则是给定的条件表达式为True时重复循环 体的执行。
5.3.1 后测型Do…Loop循环语句
Do…Loop While循环流程图 流程图
Do…Loop Until循环
26
5.3.1 后测型Do…Loop循环语句 【例5-10】将400~600间能够被3整除的数 输出(上机练习)
【例5-11】(略)
27
5.4 循环嵌套
介绍:
一个循环结构中又包含一个或多个循环结构被称为 循环嵌套,或称多重循环。 多重循环对嵌套的层数没有限制。有几层嵌套,就 称为几重循环,如二重循环、三重循环、四重循环 等。一般地,把嵌套在一个循环体内部的另一个循 环结构称为内循环;这样,嵌套了其他内循环部分 的循环结构就称为外循环。 为了使多重循环结构具有较好的可读性,通常用缩 进方式书写相应的源代码。
…
…
Loop
Wend
…
…
Next I
Loop Until I>10
表5-2 错误的循环嵌套结构
For I=1 To 10 … For J=1 To 20
… Next I … Next J
Do …
For J=1 To 20 … While I<=10 …
Next J
For I=1 To 10 Do
…
…
10
5.1 For循环语句
【例5-4】参看教材P75。
11
5.1 For循环语句
【例5-5】求Fibonacci数列前15项的值。 Fibonacci数列为:
1,1,2,3,5,8,…。
分析:数列的第一项和第二项为1,从第三项开始,每一
项都是前两项之和,即:
F1 = 1
(n=1)
F2 = 1
(n=2)
VB常用的循环语句有For…Next,While…Wend和Do…Loop语 句。For…Next用于已知循环次数的情况,而While…Wend和 Do…Loop主要用于不知道循环次数的情况,在给定的条件满 足时执行循环体。
1
第5章 循环结构程序设计
本章内容及要求:
熟练掌握实现循环结构的For/Next语句、While/Wend语句 、Do/Loop结构的使用,掌握多重循环。
方案二:假定a、b、c分别为三位整数的百位、十位个位数 字,可以得到100,101,…,999的三位数,同时对其判断 是否为水仙花数(用三重循环实现)。
35
5.4 循环嵌套
思考:
本例应用了一种常见算法—穷举法。该算法根据所 提问题,穷举所有可能的情形,并从中找出符合要 求的解。因此,穷举法常用于解决“是否存在”以 及“有多少种符合要求的解”等类型的问题。由于 穷举法需要列举所有可能的情形,因此采用循环是 最有效的实现方法。 【例】如果将一角钱换成零钱(可以包括1分、2分 和5分中的任意多个面值),共有多少种换法?
<语句块>
[Exit For]
<语句块>
Next [<循环变量>]
4
5.1 For循环语句
说明:
循环变量:必须为数值型,取值范围在初值和终值之间 步长:数值型,一般为正,初值应小于等于终值;若为 负,初值应大于等于终值;默认为1。 语句块:可以是一句或多句语句,构成循环体。 Exit For:表示当遇到该语句时,退出循环,执行Next 行的后继语句。 次数m由初值\终值\步长决定:
7
5.1 For循环语句
【例5-2】求n!,n的值由用户输入。 分析:由阶乘的定义可知:n1=1×2×3×…×(n-1) ×n,所 以应该采用连乘的方法,用变量fact来存放连乘积,用变量i 来存放要连乘的乘数和循环计数器,从1开始到n为止。
8
5.1 For循环语句
循环结构中,最常用的算法:累加、连乘。
33
5.4 循环嵌套
【例5-14】编程求不定方程的解。
34
5.4 循环嵌套
【例5-15】 如果一个三位数等于其各位数字的立方 和,则称这个数为水仙花数,如153=13+53+33, 370=33+73+03 ,试编程找出所有的水仙花数。
分析
方案一:从100,101,102,…,999中,对每个数均检测是 否符合水仙花数的条件(用单层的循环即可实现)。
21
5.3.1 前测型Do…Loop循环语句
【例5-8】用Do循环结构实现例5-2求n!
22
5.3.1 前测型Do…Loop循环语句
【例5-9】求满足1+2+3+…+n≥1000 n的最小值
思考:如果本例用Do While …Loop循环语句实现,代码应 如何改动?
23
5.3.2 后测型Do…Loop循环语句
功能:如果<条件表达式>为True(非0值),则执行<语句块 >(即循环体);如果<条件表达式>的值是False(值为0) ,则退出循环。 执行流程图:
13
5.2 While循环语句
说明:
<条件表达式>的组成与If语句中的<条件表达式>的组成要 求相同。
实际进行程序设计时,循环体中语句的执行应能使条件发 生改变,以使<条件表达式>的值最终可以出现False。否 则会出现死循环。
Fn = Fn-1 + Fn-2 (n≥3)
在本例中,F1代表当前第一项的值,F2代表第二项的值,
F3代表第三项的值,当此轮计算完成后,F2的值将成为第一
项的值,F3的值将成为第二项的值,然后可以进行下一轮的
运算,直到最后得到所有结果。
12
5.2 While循环语句
格式: While <条件表达式> <语句块> Wend
17
5.3 Do…Loop循环语句
导入:
Do…Loop循环也属于条件型循环,即根据条件的 成立与否来决定是否执行循环。Do…Loop循环的应用 具有很强的灵活性,主要体现在:它既能指定循环开 始条件,又能指定循环结束条件;既能构成前测型 Do…Loop循环语句,又能构成后测型Do…Loop循环语 句。
28
5.4 循环嵌套
说明:
外循环必须完全包含内循环,不能交叉,如表5-1 和表5-2所示; 内循环变量与外循环变量不能同名; 多重循环的执行过程是,外循环每执行一次,内循 环要从头到尾执行一遍; 在多重循环的任何一层中都可以使用Exit Do或 Exit For退出循环,但要注意只能退出Exit Do或 Exit For语句所对应的最内层循环,而不是一次退 出多层循环。
DoWhile J<=20 While J<=20
…
…
Next I
Loop Until I>10
…
…
Loop
Wend
30
5.4 循环嵌套
【例5-12】编程,实现要求的图形。
31
5.4 循环嵌套
【例5-13】编程打印九九乘法表,程序运行界 面见下图。
32
5.4 循环嵌套
分析:
输出九九乘法表,可以用外层循环变量i控制每行 的输出,内循环变量j控制各行中的每个等式的输 出,而各行中的每个等式正好是“i*j”。 此外主要的问题是控制每个等式出现的位置,可以 用Tab函数来实现,假设每个等式的宽度为9,第一 个等式出现在第1列,第二个等式出现在第10列, ……,依次类推,则每个等式出现的位置就可以这 样表示:Tab((j-1)*9+1)。
分析:
我国现有人口13亿,p是n年后我国人口达到的数量(20 亿),r是年增长率(1.2%)。求解此问题可根据公式:
p=13×(1+r)n, 利用While循环求得n。
16
5.2 While循环语句
【例5-7】编写程序,输入一个正整数n(n≥3),判断其是否 为素数。
分析:只能被1和本身整除的正整数称为素数。判断一个数n是 不是素数,最简单的方法就是根据素数的定义,利用2~n-1 之间的整数依次去除n,如果都不能整除,就n是素数,反之 则n不是素数。从数学上,只要n不能被2~n/2或2~ n 之间的 所有整数整除,则n是素数,否则n不是素数。后一种方法可 以减少循环的次数,提高执行效率。 本例中,设置一个数值型变量flag, flag值为1时表示这 个数是素数,为0时表示不是素数。初始flag=1,在循环判 断时,若某数n能n 被2~ 之间的某数整除将flag值设为0。
第5章 循环结构程序设计
循环结构和顺序结构、选择结构都是结构化程序设计的基本 控制结构。 在编程中一些操作并不复杂,但需要反复执行多次的问题, 需采用循环结构。如:对全年级1500名学生都进行例4-4介 绍的百分制转换为五分制操作。 循环结构是指程序中有规律地反复执行某一程序块的现象。
被重复执行的程序块称为循环体; 循环体的执行与否及次数多少视循环类型与条件而定; 无论何种类型的循环结构,都必须确保循环体的重复执行能被终止。
重点:循环的实现及其应用。 难点:多重循环。
2
第5章 循环结构程序设计
For循环
当型循环
循 环
前测型循环 Do 循环
直到型循环
当型循环
后测型循环 直到型循环
While循环
3
5.1 For循环语句
For循环是计数型循环结构,用于控制循环 次数预知是循环结构。
格式:
步长>]
For <循环变量> = <初值> To <终值> [Step <
5.3.1 前测型Do…Loop循环语句
说明:
Do While…Loop是当型循环结构。当<条件表达式>的值为True 时执行循环体;当<条件表达式>的值为False时退出循环; Do Until…Loop是直到型循环结构。当<条件表达式>的值为 False时执行循环体;直到<条件表达式>的值为True时退出循 环; <条件表达式>的组成与If语句中的<条件表达式>的组成要求相 同; Exit Do语句表示当遇到该语句时,退出循环,执行Loop行的 后继语句 当省略[While | Until <条件表达式>]子句时,即循环结构仅 由Do…Loop关键字构成,表示无条件循环,这时在循环体内应 该有Exit Do语句,否则为死循环。
18
5.3.1 前测型Do…Loop循环语句
格式:
Do [While | Until <条件表达式>] <语句块> [Exit Do] <语句块>
Loop
19
Fra Baidu bibliotek
5.3.1 前测型Do…Loop循环语句
前测型Do…Loop循环的流程图
Do While…Loop流程图
Do Until…Loop流程图
20
29
5.4 循环嵌套
表5-1 正确的循环嵌套结构
For I=1 To 10 … For J=1 To 20
… Next J … Next I
Do … For J=1 To 20 … Next J …
While I<=10
For I=1 To 10 Do
…
…
Do While J<=20 While J<=20
m = Int((终值-初值)/步长+1)
5
5.1 For循环语句
步长为正数
步长为负数
6
5.1 For循环语句
【例5-1】求2+4+6+……+100的值。 分析:
进行程序设计应采用累加的方法,用变量sum来存放累加和 ,用变量i来存放加数。同时i还要作为循环计数器。 进行程序设计时,分为界面设计、控件对象属性设置和编写 程序代码3个步骤。
格式:
Do <语句块> [Exit Do] <语句块>
Loop [While | Until <条件表达式>]
24
5.3.1 后测型Do…Loop循环语句
说明:
后测型Do…Loop循环语句与前测型Do…Loop循环语句的主要 区别在于:
后测型要先执行一次循环体,再判断条件;而前测型要 先判断条件,然后根据判断结果决定是否执行循环体。因此 对于后测型,不管条件是否满足,循环体至少有一次执行机 会。
“While/当循环”可以指定一个循环终止的条件,而For循 环只能进行指定次数的重复。因此,当需要由数据的某个条 件是否出现来控制循环时,应当使用While…Wend一类的循 环。
15
5.2 While循环语句
【例5-6】我国现有人口13亿,按照年增长率1.2%计算,多少 年后我国人口达到20亿?
注意:累加和sum的初值置为0,而连乘积fact的初值 置为1,并且它们的赋值操作应该在循环体外、循环 开始前完成。
9
5.1 For循环语句
【例5-3】利用多项式e=1+1/1!+1/2!+1/3!+…+1/n!求自然对 数e的近似值,要求计算到第15项。
分析: 在计算级数的和时,先求第i项的阶乘,再将各项阶乘的 倒数进行累加。程序中设计两个变量sum和fact分别作为 累加和与连乘积,其赋初值分别为0和1。 为防止项数过大阶乘溢出,定义fact和sum为double类型 。
例如,如下一段程序:
While b>0 c=c+a b=b-1
Wend
每次执行循环以前,都要测试条件表达式(b>0 )的值。如果结果为True,则执行循环体。直到条件表达 式为False(即b<=0) 时结束循环,转移到Wend的后继语 句。
14
5.2 While循环语句
While循环与For循环的区别是:For循环对循环体执行指定 次数, While循环则是给定的条件表达式为True时重复循环 体的执行。