《控制结构多重循环课件》由会员分享,可在线阅读,更多相关《控制结构多重循环课件(27页珍藏版)》请在金锄头文库上搜索。
1、v提要提要多重循环多重循环v重点重点多重循环多重循环第第4章章 Visual Basic语言基础语言基础514.7.5 多重循环多重循环循环嵌套循环嵌套循环嵌套循环嵌套 For I= 1 to 5 Step 1For I= 1 to 5 Step 1 Next INext IFor J= 1 to 3 Step 1For J= 1 to 3 Step 1 Next JNext Jv一个循环结构的循环体内包含了一个循环结构的循环体内包含了另一个循环结构另一个循环结构.v嵌套一层称为嵌套一层称为二重循环二重循环v多重循环中遇多重循环中遇Exit For(Do),只跳出,只跳出当前一层循环当前一层循
2、环.2v讨论多重循环讨论多重循环内、外循环的循环变量内、外循环的循环变量不可同名不可同名.内、外循环内、外循环不可交叉不可交叉 (外循环完全包含内循环外循环完全包含内循环).).执行次数执行次数当外循环执行一次,内循环全部执行当外循环执行一次,内循环全部执行.内循环执行总次数内循环执行总次数=外循环次数外循环次数内循环次数内循环次数For I= 1 to 5 Step 1For I= 1 to 5 Step 1 Next INext IFor J= 1 to 3 Step 1For J= 1 to 3 Step 1 Next JNext JFor I= 1 to 5 Step 1For I=
3、1 to 5 Step 1 Next Next I IFor I= 1 to 3 Step 1For I= 1 to 3 Step 1 Next INext I错误错误正确正确For I= 1 to 5 Step 1For I= 1 to 5 Step 1 Next Next J JFor J= 1 to 3 Step 1For J= 1 to 3 Step 1 Next Next I I3For i=1 to 6 step 1 Print Next iFor i=1 to 6 step 1 Print ;Next i问题问题1: 要求利用循环结构在一列打印要求利用循环结构在一列打印6个个“”
4、问题问题2:要求利用循环结构在一行打印要求利用循环结构在一行打印6个个“”, 如何如何修改修改?归纳归纳:分隔符分隔符“;”使多个内容一个个紧跟着打印使多个内容一个个紧跟着打印输出输出4For k=1 To 3 Next kFor i=1 to 6 Print ;Next i PrintPrint问题问题3: 打印打印3行,每行行,每行6个个“”,如何解决?,如何解决? For i = 1 To 6 Step 1 Print ; Next I Print Print For i = 1 To 6 Step 1 Print ; Next i Print Print For i = 1 To 6
5、Step 1 Print ; Next i循环嵌套结构循环嵌套结构v结论结论单层循环:单层循环:控制一行上的控制一行上的所有列所有列, ,采用采用“紧凑紧凑”方式输出方式输出; ;双层循环:双层循环:内循环控制一行上的内循环控制一行上的所有列所有列, ,外循环控制外循环控制所有行所有行. .5 For For I I = 1 To 9 = 1 To 9 For J= 1 To 9 Next Next I IEnd SubEnd SubFor J= 1 To 9For J= 1 To 9 Print J; x; 1; =; 1*J;Next JNext J示例示例: : 打印九九乘法表打印九九乘
6、法表. .Print J; x; 1; =; 1*J;Print J; x; 1; =; 1*J;Print J; x; Print J; x; I I; =; ; =; I I * J; * J;PrintPrint输出一行所有列之后能换行输出一行所有列之后能换行6 For For I I = 1 To 9= 1 To 9 For J= 1 To 9 For J= 1 To 9 Print J; x; Print J; x; I I; =; ; =; I I * J; * J; Next J Next J PrintPrint Next Next I I思考思考: 打印上三角或打印上三角或下
7、三角下三角程序如何改动?程序如何改动?Print Tab(12 * (J - 1); J; x; Print Tab(12 * (J - 1); J; x; I I; =; ; =; I I * J; * J;说明说明:Tab(n)函数函数后项内容在第后项内容在第n个字符位上输出个字符位上输出I I7课后任务课后任务: : 打印金字塔打印金字塔_(_(选做选做) )Private Sub Form_Click()Private Sub Form_Click() For i = 0 To 8 For i = 0 To 8 Print Tab(27 - 3 * i);Print Tab(27 -
8、3 * i); For j = 1 To i For j = 1 To i Print j; Print j; Next j Next j For j = i + 1 To 1 Step -1 For j = i + 1 To 1 Step -1 Print j; Print j; Next j Next j PrintPrint Next i Next iEnd SubEnd Sub8课堂思考课堂思考v素数是一个大于素数是一个大于2且只能被且只能被1和本身整除的整数和本身整除的整数.v判别一个数判别一个数n是否为素数的方法是否为素数的方法:对于对于n 从从 i=2,3,n-1判别判别n能否被
9、能否被i整除,只要有整除,只要有一个能整除,一个能整除,n不是素数,否则不是素数,否则n是素数。是素数。算法算法1: 素数素数不能被不能被2n-1的其中一个整数整除的其中一个整数整除优化算法优化算法1 :素数素数不能被不能被2n/2的其中一个整数整除的其中一个整数整除优化算法优化算法2 :素数素数不能被不能被2Sqr(n)的其中一个整数的其中一个整数整除整除问题问题: : 判断一个数判断一个数n n是否为素数是否为素数9v 判断一个数判断一个数n n是否为素数是否为素数? ?For i=2 to n-1 if n mod i=0 then Exit For 被整除被整除Next iExit F
10、or 退出当前循环退出当前循环If i n-1 then Print n;“是素数是素数” Else Print n;“是非素数是非素数”End ifInt(sqr (n)10For n = 101 To 300 Step 2 Next n要求要求: :输出输出100300100300之间的所有素数之间的所有素数. .For i = 2 To Int(Sqr(n) If n Mod i = 0 Then Exit For Next iIf i Int(Sqr(n) Print n;“是素数是素数” 课后任务课后任务1 1111.最大、最小值最大、最小值 课本课本课本课本P12 P12 ( (打
11、擂台打擂台打擂台打擂台) ) 若干数求最大值若干数求最大值, 一般先假设第一个数为最大值初值一般先假设第一个数为最大值初值; 然后将剩余的每一个数与最大值比较然后将剩余的每一个数与最大值比较, 若该数大于最大值若该数大于最大值, 将该数替换为最大值;依次逐一比较将该数替换为最大值;依次逐一比较.( (求最小值求最小值求最小值求最小值: :方法相同方法相同方法相同方法相同) ) Dim x%,Max% x = Int(Rnd * 101 + 100 ) Max = xMax = x For i = 2 To 5 x = Int(Rnd * 101 + 100 ) If x Max Then Ma
12、x = xIf x Max Then Max = x Next i Print 最大值最大值=; Max问题问题问题问题: : 随机产生随机产生5个个100200之间的整数之间的整数,求最大值求最大值.4.8 常用算法常用算法若求最小值和平均值若求最小值和平均值若求最小值和平均值若求最小值和平均值? ?12计算计算1100的的3或或7的倍数的和的倍数的和 计算计算310的乘的乘积积思考思考思考思考: : : :若把变量若把变量若把变量若把变量 S S S S 的初值语句放置在循环体内的的初值语句放置在循环体内的的初值语句放置在循环体内的的初值语句放置在循环体内的首行首行首行首行位置,程序运行时
13、会产生什么情况?位置,程序运行时会产生什么情况?位置,程序运行时会产生什么情况?位置,程序运行时会产生什么情况?S S = ? = ? 2.累加、连乘、计数累加、连乘、计数_课本课本课本课本P12P12P12P12 S= 0For I = 1 To 100 If I Mod 3 = 0 Or I Mod 7 = 0 Then S = S + I k = k + 1 End IfNext IPrint S,k S= 1S= 1 For I =3 To 10 S = S * S = S * I I Next I Print S计数器计数器累加器累加器连乘器连乘器S= 0 If I Mod 3 =
14、0 Or I Mod 7 = 0 Then S = S + I k = k + 1 End If13分析分析: 每一项每一项和和和和每次累加之和都是变化量每次累加之和都是变化量因此,需要两个变量因此,需要两个变量 用用T表示每一项的值表示每一项的值:T=T+1 用用S表示累加之和表示累加之和:S=S+T 循环终止条件循环终止条件: 循环次数循环次数n 初始化初始化: S=0回顾回顾: 计算计算 s=1+2+3+nPrivate sub Form_Click( ) Dim I% , S%, T%,n% T为每一项为每一项 n=val(Inputbox(“n=”) S=0 For I I=1 To
15、 n T=T+1 S=S+T Next I I Print “S=”;SEnd Sub T= T=I I I I S=S+I Is=1234 nS=n!S=1For I I=1 To n S=S* I INext I I由此可见由此可见由此可见由此可见累加问题累加问题: 公式公式 S=S+T ;初值初值 S=0 连乘问题连乘问题: 公式公式 S=S*T ; 初值初值 S=114例例: 计算计算 s=11/21/3 1/n分析分析: T表示每一项表示每一项: T = 1/n S 表示连乘的值表示连乘的值: S = S * T 初始化初始化: S= 1思考思考: 能否交换两者次序能否交换两者次序
16、即即: 先连乘先连乘,后产生新一项后产生新一项? 而令初值而令初值T=第一第一项项 S=T=S * T1nS=T=S * TBAB=1: A=nB=1: A=n课堂思考课堂思考S=T=S * T1nT可理解为通式可理解为通式15课后任务课后任务2 2_(_(_(_(实验实验实验实验) ) ) )要求要求: :计算计算的近似值,的近似值,的计算公式为的计算公式为: :S=T=S * Tv观察观察当当n=10时,时,p = ? ;当当n=50时,时,p = ? ;当当n=100时,时,p = ?;当当n=10000时,时,p = 比较精确比较精确. 可见该公式收敛较慢可见该公式收敛较慢.(2*n)
17、2 / (2*n-1)*(2*n+1)B=(2*n)2 : A=(2*n-1)*(2*n+1)BA从第二项开始才有规律可循从第二项开始才有规律可循思考思考思考思考: : 初值初值初值初值S=? S=? T=?T=?16例例: :用用 公式求圆周率的近公式求圆周率的近似值,直到最后一项似值,直到最后一项t t的绝对值小于的绝对值小于1010-4-4为止为止. .分析:分析:分析:分析:1.1.1.1.循环的结束循环的结束循环的结束循环的结束: : : :最后一项最后一项最后一项最后一项T T T T的绝对值小于的绝对值小于的绝对值小于的绝对值小于10101010-4-4为止为止为止为止; ; ;
18、 ;2.2.2.2.各项逐项相加各项逐项相加各项逐项相加各项逐项相加( ( ( (累加累加累加累加):):):): S=S+T S=S+T S=S+T S=S+T3.3.3.3.某一项某一项某一项某一项T=B/A T=B/A T=B/A T=B/A : B=-B , A=A+2B=-B , A=A+2B=-B , A=A+2B=-B , A=A+2S=T=S + TBAB=-B : A=A+2Do While Abs(T) = 0.0001LoopA=1: B=1: T=? : S=?课堂思考课堂思考18例例例例: : : :求自然对数求自然对数求自然对数求自然对数e e e e的近似值的近似
19、值的近似值的近似值, , , ,要求直到最后一项要求直到最后一项要求直到最后一项要求直到最后一项t t t t的值的值的值的值小于小于小于小于0.000010.000010.000010.00001,近似公式为,近似公式为,近似公式为,近似公式为: : : :分析:分析:分析:分析:1.循环结束循环结束循环结束循环结束: :根据最后一项根据最后一项 T0.00001T0.00001来控制来控制2.各项逐项相加各项逐项相加各项逐项相加各项逐项相加( (累加累加累加累加): ): S=S+TS=S+T3.某一项某一项某一项某一项T=B/AT=B/A : B=1 B=1 A=A=I! I! (A=A
20、*I :I=I+1)(A=A*I :I=I+1)S=T=S+T1AA=A*I : I=I+1A=A*I : I=I+1思考思考思考思考: : 初值初值初值初值T=? : s=?T=? : s=?从第二项开始才有规律可循从第二项开始才有规律可循19累加累加/连乘算法连乘算法_小结小结v累加累加初值:初值:S=0, T=第一项第一项 通用公式:通用公式: S=S+T : :T=B/Av连乘连乘初值:初值:S=1, T=第一项第一项 通用公式:通用公式: S=S*T : :T=B/A v 说明说明: T=B/A中的中的A或或B均可为均可为常量或变量表达常量或变量表达式式 若若A=1, 则则T=B 若
21、若B=1, 则则T=1/A21v 设小鸡设小鸡x只、公鸡只、公鸡y只、母鸡只、母鸡z只,列出方程:只,列出方程: x+y+z=100 0.5x+2y+3z=100 可见,三个未知数,两个方程,此题有若干个解。可见,三个未知数,两个方程,此题有若干个解。v可穷举可穷举X、Y、Z的每一种取值,符合就是其中一种方案的每一种取值,符合就是其中一种方案3.3.穷举法穷举法穷举法穷举法课本课本课本课本P12: P12: 列举各种可能情况,找出符合要求的列举各种可能情况,找出符合要求的Private Sub Form_click() For x = 1 To 100 For y = 1 To 100 For
22、 z = 1 To 100 If x * 0.5 + y * 2 + z * 3 = 100 And x +y + z = 100 ThenIf x * 0.5 + y * 2 + z * 3 = 100 And x +y + z = 100 Then Print x, y, z Print x, y, z End If End If Next z Next y Next xEnd Sub问题问题: 100元买元买100只鸡只鸡, 小鸡每只小鸡每只0.5元,公鸡每只元,公鸡每只2元,元, 母鸡每只母鸡每只3元元, 可买公、母、小鸡各多少只?可买公、母、小鸡各多少只?22课外思考课外思考 勾股定
23、理中勾股定理中3个数的关系是:个数的关系是:a2+b2=c2。编写程序,输出编写程序,输出20以内满足上述关系的整数以内满足上述关系的整数组合,例如组合,例如3,4,5就是一个整数组合。就是一个整数组合。c:c:弦弦弦弦5 5a:a:勾勾勾勾3 3b:b:股股股股4 4234.递推法递推法 (课本课本P11) 猴子吃桃子问题:猴子吃桃子问题:猴子摘下若干个桃子,第一天吃了猴子摘下若干个桃子,第一天吃了桃子的一半多一个,以后每天吃了前一天剩下的一半多一桃子的一半多一个,以后每天吃了前一天剩下的一半多一个,到第十天吃以前发现只剩下一个桃子,问猴子第一天个,到第十天吃以前发现只剩下一个桃子,问猴子第
24、一天共摘了几个桃子?共摘了几个桃子?Dim day As Integer, x As Integer, y As Integerx = 1For day = 9 To 1 Step -1 y = (x + 1) *2 前一天的桃子数是第前一天的桃子数是第2天桃子数加天桃子数加1的的2倍倍 x = yNext dayPrint xv分分析析:此此问问题题属属于于“倒倒推推”问问题题,先先从从最最后后一一天天推推出出倒倒数数第第二二天天的的桃桃子子,再再从从倒倒数数第第二二天天的的桃桃子子推推出出倒倒数数第第三三天天的桃子的桃子v设设第第n天天的的桃桃子子为为x,第第n-1天天的的桃桃子子为为y,
25、 前前一一天天的的桃桃子子数为:数为: y=(x+1)2241. 多重循环的内外循环之间的联系多重循环的内外循环之间的联系2. 常用算法常用算法:累加、最值、穷举、素数等累加、最值、穷举、素数等本节小结本节小结25循环控制结构常见错误循环控制结构常见错误1.不循环或死循环的问题不循环或死循环的问题 主要是循环的条件、初值、终值、步长的设置有问题主要是循环的条件、初值、终值、步长的设置有问题2.循环结构中缺少配对的结束语句循环结构中缺少配对的结束语句 For 缺缺少配对的少配对的Next 3.循环嵌套时,内外循环交叉循环嵌套时,内外循环交叉4.累加、连乘时,存放累加、连乘的变量赋初值问题累加、连乘时,存放累加、连乘的变量赋初值问题26课后任务课后任务3 3课后习题课后习题P56一一.选择题选择题 P61二二.填空题填空题 P66三三.编程题编程题(3 4)实验四实验四 P21实验案例一实验案例一 P22 三三.实验内实验内容容(3) 27