《林卓然VB教程课件循环结构第5章教案.ppt》由会员分享,可在线阅读,更多相关《林卓然VB教程课件循环结构第5章教案.ppt(55页珍藏版)》请在金锄头文库上搜索。
1、主页主页计算机具有速度快、精度高的计算机具有速度快、精度高的特点,特别适于进行重复性的特点,特别适于进行重复性的工作,重复次数越多越能显示工作,重复次数越多越能显示它的威力。所以,使用计算机它的威力。所以,使用计算机时,应尽量把问题归纳为简单时,应尽量把问题归纳为简单而有规则的重复运算和操作,而有规则的重复运算和操作,以充分发挥计算机的特长。以充分发挥计算机的特长。1主页主页 采用循环程序可以解决一些按一定规则重复执行的问采用循环程序可以解决一些按一定规则重复执行的问题。例如,统计一个班几十名学生,甚至全校几千名学生的题。例如,统计一个班几十名学生,甚至全校几千名学生的学期成绩,如求平均分、不
2、及格人数等学期成绩,如求平均分、不及格人数等 本章主要内容 第第5 5章章 循环结构程序设计循环结构程序设计Do.Loop For.Next退出退出循环循环出口出口语句语句(Exit)(Exit)循环语句循环语句多重多重循环循环列表框与组合框列表框与组合框常用算法常用算法程序举例程序举例2主页主页 循环循环是指在指定的条件下多次重复执行一组语句是指在指定的条件下多次重复执行一组语句 被重复执行的一组语句称为被重复执行的一组语句称为循环体循环体 VB提供的循环语句有提供的循环语句有 For.NextFor.Next Do.Loop Do.Loop While.Wend While.Wend Fo
3、r Each.Next For Each.Next 最常用的是最常用的是For.NextFor.Next和和Do.LoopDo.Loop语句语句 假真循环体循 环 条件3主页主页 For.Next循环主要是用在知道循环次数的情况下;若事先不循环主要是用在知道循环次数的情况下;若事先不知道循环次数,可以使用当型循环知道循环次数,可以使用当型循环Do.Loop 1. For.Next 1. For.Next循环语句循环语句 ( (计数控制计数控制) ) For 循环变量初值循环变量初值 To 终值终值 Step 步长值步长值 循环体循环体 Next 循环变量循环变量 2. Do While.Loo
4、p2. Do While.Loop语句语句 ( (条件控制条件控制) ) Do While|Until 条件条件 循环体循环体 Loop 5.1 循环语句循环语句 示例示例 求求S = 1 + 2 + 3 + + 8 s = 0 For k = 1 To 8 s = s + k Next k Print s=; s 程序运行结果如下:程序运行结果如下: s36 n = 1: s = 0 Do While n = 8 s = s + n n = n + 1 Loop Print s=; s例例5.2K K为循为循环变量环变量专设变量专设变量n n来控制循环来控制循环4主页主页 例例5.2 5.2
5、 求求S = 1 + 2 + 3 + S = 1 + 2 + 3 + 8 8,把结果显示在窗体上。,把结果显示在窗体上。 s = 0s = 0 累加器初值为累加器初值为0 0 For k = 1 To 8For k = 1 To 8 s = s + k s = s + k 累加器,在原有和的基础上每次加一个数累加器,在原有和的基础上每次加一个数 Next kNext k Print s= ; s Print s= ; s 程序执行结果是:程序执行结果是:s s3636 分析分析 累加器累加器 s = s + k旧值。前旧值。前n n项之和项之和新加的数新加的数k = 1k = 1s s s +
6、 ks + k 0 10 1k = 3k = 3s s s + k s + k 1 + 2 3 1 + 2 3k = 2k = 2s s s +s + k k 1 21 2k = 8k = 8s s s + k s + k 1 1 + + 2 2 + + 7 7 8 85主页主页算法:通常采用重复运算来解决问题算法:通常采用重复运算来解决问题 累加、累乘等累加、累乘等 如用级数如用级数 /41 - 1/3 + 1/5 - 1/7 + 来求来求设置循环变量设置循环变量 使每次运算变量值有所不同使每次运算变量值有所不同控制循环控制循环 计数控制或条件控制计数控制或条件控制 循环结构程序的实现循环结
7、构程序的实现求求 S = 1 + 2 + 3 + + 8 s = 0 For k = 1 To 8 s = s + k Next k Print s=; s 把长式子改为把长式子改为8次加次加6主页主页 采用采用Print直接在窗体上输出结果,程序代码:直接在窗体上输出结果,程序代码: Private Sub Form_Load() Show t = 1 For c = 1 To 8 t = t * c Next c Print T=; t End Sub 程序运行结果是:程序运行结果是: T40320语句语句 t=t*c 称为乘法器。先将称为乘法器。先将t置置1(不能置不能置0)。在循环程序
8、中,常用累加和累乘来完成各种计算任务在循环程序中,常用累加和累乘来完成各种计算任务例例5.3 求求T = 8! = 1238例例5.37主页主页 例例5.35.3 T = 8! = 1T = 8! = 12 23 3 8 8,把结果显示在网页上。,把结果显示在网页上。 t = 1t = 1 累乘器初值为累乘器初值为 For c = 1 To 8For c = 1 To 8 t = t * c t = t * c 累乘器,在原有积的基础上每次乘一个数累乘器,在原有积的基础上每次乘一个数 Next cNext c Print T=; t Print T=; t 程序执行结果是:程序执行结果是:T
9、T4032040320 分析分析c = 1c = 1t t t * ct * c 1 11 1c = 3c = 3t t t * ct * c 1 * 2 3 1 * 2 3c = 2c = 2t t t * ct * c 1 21 2c = 8c = 8t t t * ct * c 1 1 * * 2 *2 * 7 8 7 8累乘器累乘器 t = t * k旧值。前旧值。前n n项之积项之积新乘的数新乘的数8主页主页 采用采用Print直接在窗体上输出结果,程序代码如下:直接在窗体上输出结果,程序代码如下: Private Sub Form_Load() Show Dim pi As Sin
10、gle, c As Integer, s As Integer pi = 0 s = 1 s表示加或减运算表示加或减运算 For c = 1 To 10000 Step 2 pi = pi + s / c s = -s 交替改变加、减号交替改变加、减号 Next c Print =; pi * 4 End Sub 程序运行结果是:程序运行结果是: 3.141397 例例5.4 用用/41 - 1/3 + 1/5 - 1/7 + 级数级数求求的近似值的近似值 (取前取前5000项来进行计算项来进行计算)例例5.49主页主页 For t = 1 To 3 If t = 1 Then a = 3 I
11、f t = 2 Then a = 2 If t = 1 Then a = 3 If t = 2 Then a = 2 If t = 3 Then a = 1 Print a; Next t Print t A. 3 3 3 4 B. 1 2 3 4 C. 3 2 1 4 D. 1 1 1 4 下列程序的运行结果是?下列程序的运行结果是?想一想想一想思考题思考题C11主页主页 运行下面程序后,循环体执行了运行下面程序后,循环体执行了_次。次。 i = 0: n = 1 Do While i 32 i = (i + 1) * (i + 1) n = n + 1 Loop Print n A. 2
12、B. 3 C. 4 D. 5 请回答问题请回答问题想一想想一想思考题思考题C12主页主页 s = ABCDEFGHIJ: c = For k = 2 To Len(s) Step 3 a = Mid(s, k) c = c + Left(a, 1) Next k Print c A. BDF B. CFI C. BEH D.BEI 下列程序的运行结果是?下列程序的运行结果是?想一想想一想思考题思考题C13主页主页5.1.2 DoLoop循环语句循环语句前测型前测型DoLoop循环循环 语句格式语句格式: DoWhile|Until条件条件 循环循环 Loop说明说明:Do whileLoop:
13、当条件成立时当条件成立时,执行循环体执行循环体,当条当条件不成立的时候件不成立的时候,终止循环终止循环.Do UntilLoop:当条件不成立时当条件不成立时,执行循环体执行循环体,直到条直到条件成立时件成立时,终止循环终止循环.14主页主页 采用采用Do While.Loop语句语句 采用采用Print直接在窗体上输出结果,程序代码:直接在窗体上输出结果,程序代码: Private Sub Form_Load() Dim n As Integer, s As Long Show n = 1: s = 0 Do While n = 100 s = s + n * n n = n + 1 Loo
14、p Print s=; s End Sub 程序运行结果:程序运行结果: S338350例例5.55.5 求求 S S1 12 2 + 2+ 22 2 + + + 100 + 1002 2例例5.515主页主页后测型后测型DoLoop循环循环语句格式语句格式: Do 循环循环 Loop While|Until条件条件说明说明:先执行循环体,然后判断条件,根先执行循环体,然后判断条件,根据条件决定是否继续执行循环体。据条件决定是否继续执行循环体。本语句执行循环的次数最少为本语句执行循环的次数最少为1,而前测,而前测型语句的最少次数为型语句的最少次数为016主页主页 用上述公式求用上述公式求/4的
15、近似值,即逐项进行累加,直到某项的近似值,即逐项进行累加,直到某项 1 / n * (1 / 2 n + 1 / 3 n)= 10(-5) Do While t = 10(-5) 逐项累加的条件,累加到逐项累加的条件,累加到t10(-5)t10(-5)为止为止 pi = pi = pipi + s * t + s * t 把当前项进行累加把当前项进行累加 s = -s s = -s 交替改变正、负号交替改变正、负号 n = n + 2 n = n + 2 变动值变动值n n加加2 2 t = 1 / n * (1 / 2 n + 1 / 3 n) t = 1 / n * (1 / 2 n +
16、1 / 3 n) 求当前项的绝对值求当前项的绝对值 LoopLoop Print =; pi * 4 Print =; pi * 4 程序运行结果:程序运行结果: 3.141562例例5.65.6 用用 级数级数, ,求求的近的近似值。当最后一项的绝对值小于似值。当最后一项的绝对值小于1010-5-5时,停止计算时,停止计算例例5.617主页主页 “辗转相除法辗转相除法”算法:算法:求出求出m/n余数余数p,若,若p0,n即为即为最大公约数;若最大公约数;若p非非0,则把原来的分母,则把原来的分母n作为新的分子作为新的分子m,把,把余数余数p作为新的分母作为新的分母n继续求解继续求解 设计步骤
17、如下:设计步骤如下: (1)创建应用程序的用户界面和设置对象属性创建应用程序的用户界面和设置对象属性例例5.7 输入两个正整数,求它们的最大公约数输入两个正整数,求它们的最大公约数例例5.718主页主页 编写的编写的“计算计算”按钮按钮Click事件过程代码如下:事件过程代码如下: Private Sub Command1_Click() Dim m As Integer, n As Integer, p As Integer m = Val(Text1.Text) : n = Val(Text2.Text) If m = 0 Or n = 0 Then MsgBox (数据错误数据错误!)
18、End End If Do p = m Mod n m = n n = p Loop While p 0 Text3.Text = m End Sub 若输入的若输入的m和和n的值为的值为85和和68,则运行结果如上图,则运行结果如上图19主页主页 语句格式:语句格式: While While 条件条件 循环体循环体 WendWend 功能:当条件成立功能:当条件成立( (为真为真) )时,执行循环体;当条件不成立时,执行循环体;当条件不成立( (为假为假) )时,终止循环。时,终止循环。 本语句与上述本语句与上述Do While.LoopDo While.Loop循环语句相似,其差别是:循环
19、语句相似,其差别是:While.WendWhile.Wend语句中不能使用语句中不能使用ExitExit语句跳出循环。语句跳出循环。5.1.35.1.3 While.Wend While.Wend循环语句循环语句 20主页主页 用于提前退出循环用于提前退出循环 格式:格式: Exit For|Do功能:直接从功能:直接从For循环或循环或Do循环中退出循环中退出 当程序运行时遇到当程序运行时遇到Exit语句时,就不再执行循环体中的任语句时,就不再执行循环体中的任何语句而直接退出,转到循环语句何语句而直接退出,转到循环语句(Next、Loop)的下面继续的下面继续执行执行 5.1.4 5.1.4
20、 循环出口语句循环出口语句21主页主页 把每次输入的数累加。当输入把每次输入的数累加。当输入-1时结束程序的运行时结束程序的运行创建应用程序的用户界面和设置对象属性创建应用程序的用户界面和设置对象属性 编写程序代码编写程序代码 Private Sub Form_Load() Show Sum = 0 Do While True 条件为真,循环无终止进行下去条件为真,循环无终止进行下去 x = Val(InputBox(请输入要加入的数请输入要加入的数(-1表示结束表示结束), 输入数据输入数据) If x = -1 Then Exit Do End If Sum = Sum + x Text1
21、.Text = Sum Loop MsgBox (累加运算结束累加运算结束) End Sub 以以-1作为作为“终止循环标志终止循环标志”例例5.85.8 设计一个设计一个“加法器加法器”程序程序例例5.822主页主页 多重循环是指循环体内含有循环语句的循环多重循环是指循环体内含有循环语句的循环 例例5.9 多重循环程序示例多重循环程序示例 程序运行结果程序运行结果 Private Sub Form_Load() 1 5 Show 1 6 For i = 1 To 3 外循环外循环 1 7 For j = 5 To 7 内循环内循环 2 5 Print i, j 2 6 Next j 2 7
22、Next i 3 5 End Sub 3 6 3 7 注意内、外循环层次要分清,不能交叉注意内、外循环层次要分清,不能交叉 5.25.2 多多 重重 循循 环环例例5.923主页主页 本例可采用本例可采用两重循环两重循环来实现。外循环控制输出来实现。外循环控制输出7行,内循行,内循环控制每行输出要求的字符数。环控制每行输出要求的字符数。 在进入内循环之前,使用在进入内循环之前,使用Print Tab()来对起始输出位置来对起始输出位置定位,退出内循环后,使用定位,退出内循环后,使用Print来控制换行。来控制换行。例例5.105.10 编一程序,输出下列所示的图形编一程序,输出下列所示的图形例
23、例5.1024主页主页 采用采用Print直接在窗体上输出结果,程序代码如下:直接在窗体上输出结果,程序代码如下: Private Sub Form_Load() Show For i = 1 To 7 Print Tab(10 - i); For j = 1 To 2 * i - 1 Print Chr(i + 48); Next j Print Next i End Sub Print Chr(i+48)与与Print i有所不同有所不同25主页主页 (1)分析:分析:设一元硬币为设一元硬币为a枚,二元硬币为枚,二元硬币为b枚,五元硬币枚,五元硬币为为c枚,可列出方程枚,可列出方程 a+b
24、+c=10 a+2b+5c=25采用两重循环,外循环变量采用两重循环,外循环变量a从从010,内循环变量,内循环变量b从从010 (2)创建应用程序的用户界面创建应用程序的用户界面例例5.115.11 取一元、二元、五元的硬币共十枚,付取一元、二元、五元的硬币共十枚,付 给给2525元钱,有多少种不同的取法元钱,有多少种不同的取法? ?例例5.1126主页主页 (3)编写程序代码编写程序代码 程序通过程序通过Print方法把处理结果输出在标签的下方。方法把处理结果输出在标签的下方。 Private Sub Form_Load() Show CurrentX = 0 : CurrentY = 1
25、500 确定开始显示的坐标确定开始显示的坐标 Print , 五元五元, 二元二元, 一元一元 n = 0 记录解的组数记录解的组数 For a = 0 To 10 For b = 0 To 10 c = 10 - b - a If a + 2 * b + 5 * c = 25 And c = 0 Then n = n + 1 Print (; n; ), c, b, a End If Next b, a End Sub27主页主页 执行下列程序段后,变量执行下列程序段后,变量t 的值是的值是_。 t = 0 For x = 2 To 3 n = 1 Do While n=x t = t +
26、n n = n + 1 Loop Next x A. 8 B. 9 C.10D. 11 请回答问题请回答问题想一想想一想思考题思考题B28主页主页 请回答问题请回答问题想一想想一想思考题思考题显示结果为:显示结果为: 16执行下列程序段后,显示的结果是执行下列程序段后,显示的结果是_ s = 0 For m = 1 To 4 Step 2 n = 1 Do While n= 0.00001 Loop While Abs(xn0 - xn1) = 0.00001 判断判断 Print a; Print a; 的平方根为的平方根为; xn1; xn1End SubEnd Sub 如果输入的如果输入
27、的a a值为值为3 3,程序运行结果是:,程序运行结果是: 3 3的平方根为的平方根为 1.7320511.732051例例5.1747主页主页5.5 5.5 程序举例程序举例 例例5.185.18 从键盘输入一个正整数,然后把该数的每位数字按逆序从键盘输入一个正整数,然后把该数的每位数字按逆序输出。例如:输入输出。例如:输入3485,则输出,则输出5843;输入;输入100000,则输出,则输出000001。 以下采用以下采用两种两种不同解法。不同解法。 (1 1)数值处理方法数值处理方法 通过表达式通过表达式x Mod 10x Mod 10取出该整数取出该整数x x的个位数并输出,如对于的
28、个位数并输出,如对于x=3485,x=3485,则取出则取出5 5; 利用赋值语句利用赋值语句x = x 10x = x 10截去截去x x的个位数的个位数, , 如如对于对于x=3485,x=3485,处理后处理后x=348x=348;重复执行重复执行和和, ,直到直到x10x= 10 Do While x = 10 Print x Mod 10; Print x Mod 10; x = x 10 x = x 10 Loop Loop例例5.18A48主页主页(2)字符串处理方法)字符串处理方法 把该整数作为一个数字字符串,从字符串后部往把该整数作为一个数字字符串,从字符串后部往前逐个取出字
29、符,即可实现按逆序输出。前逐个取出字符,即可实现按逆序输出。 Dim x As StringDim x As String x = x = InputBoxInputBox(请输入一个正整数请输入一个正整数) ) 把该数以字符串方式赋给变量把该数以字符串方式赋给变量x x For k = For k = Len(xLen(x) To 1 Step -1) To 1 Step -1 Print Print Mid(xMid(x, k, 1);, k, 1); 从后部往前逐个取出字符并显示从后部往前逐个取出字符并显示 Next kNext k例例5.18B49主页主页例例5.19 5.19 求解求
30、解s = 1! + 2! + 3! + s = 1! + 2! + 3! + + 10! + 10!的值的值 采用两种不同解法采用两种不同解法 (1)解法一:采用两重循环,外循环)解法一:采用两重循环,外循环10次,每次循环计算一次次,每次循环计算一次阶乘,把每次阶乘值累加起来,即得求解结果。阶乘,把每次阶乘值累加起来,即得求解结果。 Dim s As Long, t As Long s = 0 For j = 1 To 10 计算计算10个阶乘个阶乘 t = 1 计算计算1个阶乘前,先赋初值个阶乘前,先赋初值 For k = 1 To j 计算计算j!,需要循环,需要循环j次次 t = t
31、* k 连乘连乘j次次 Next k s = s + t 把每次计算得到的阶乘值把每次计算得到的阶乘值t累加累加 Next j Print s例例5.19A50主页主页(2)解法二)解法二 这这10个阶乘有一个特点,后一个阶乘为上一个阶乘再乘以一个阶乘有一个特点,后一个阶乘为上一个阶乘再乘以一个数,如个数,如2!=1!*2,3!=2!*3,4!=3!*4,k!=(k-1)!*k 。根据这。根据这一特点,程序只须采用单重循环就可以求解。一特点,程序只须采用单重循环就可以求解。把该整数作为一个把该整数作为一个数字字符串,从字符串后部往前逐个取出字符,即可实现按逆序数字字符串,从字符串后部往前逐个取
32、出字符,即可实现按逆序输出。输出。 Dim s As Long, t As Long s = 0 t = 1 For k = 1 To 10 循环循环10次,每次求次,每次求1个阶乘个阶乘 t = t * k 求求k!,其值等于,其值等于(k-1)!*k,即,即t*k s = s + t 每次加入一个阶乘值每次加入一个阶乘值t Next k Print s例例5.19B51主页主页 (1)创建应用程序的用户界面创建应用程序的用户界面 (2)设置对象属性设置对象属性 组合框的组合框的Style属性为属性为0,TabIndex(键序键序)为为0 两个标签;四个命令按钮;两个标签;四个命令按钮; 一
33、个文本框一个文本框Text1,用来显示当,用来显示当前的选修课总课程数前的选修课总课程数例例5.20 5.20 编制程序,把一批课程名放入组合框中,再对组编制程序,把一批课程名放入组合框中,再对组合框进行项目显示、添加、删除、全部删除等操作合框进行项目显示、添加、删除、全部删除等操作例例5.2052主页主页 (3)编写程序代码编写程序代码 Private Sub Form_Load() Combo1.AddItem 电子商务电子商务 Combo1.AddItem 网页制作网页制作 Combo1.AddItem Internet简明教程简明教程 Combo1.AddItem 计算机网络基础计算机
34、网络基础 Combo1.AddItem 多媒体技术多媒体技术 Combo1.Text = 置空值置空值 Text1.Text = Combo1.ListCount 表项个数表项个数 End Sub Private Sub Command1_Click() ”添加添加” If Len(Combo1.Text) 0 Then Combo1.AddItem Combo1.Text Text1.Text = Combo1.ListCount End If Combo1.Text = Combo1.SetFocus End Sub53主页主页 Private Sub Command2_Click() “
35、删除删除” Dim ind As Integer ind = Combo1.ListIndex If ind -1 Then -1表示无表项表示无表项 Combo1.RemoveItem ind 删除已选定的表项删除已选定的表项 Text1.Text = Combo1.ListCount End If End Sub Private Sub Command3_Click() “全清全清” Combo1.Clear Text1.Text = Combo1.ListCount End Sub Private Sub Command4_Click() End End Sub54主页主页Private Sub Command1_Click()For a = 1 To 9For b = 1 To 9t = a * bPrint a; *; b; =; t; Tab(12 * b);Next bPrintNext aEnd Sub55