VB教程第5章教案.ppt_第1页
VB教程第5章教案.ppt_第2页
VB教程第5章教案.ppt_第3页
VB教程第5章教案.ppt_第4页
VB教程第5章教案.ppt_第5页
免费预览已结束,剩余49页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第 5 章,循环结构程序设计,采用循环程序可以解决一些按一定规则重复执行的问题。例如,统计一个班几十名学生,甚至全校几千名学生的学期成绩,如求平均分、不及格人数等 本章主要内容,第5章 循环结构程序设计,Do.Loop,For.Next,退出,循环出口语句(Exit),循环语句,多重循环,列表框与组合框,常用算法,程序举例,循环是指在指定的条件下多次重复执行一组语句 被重复执行的一组语句称为循环体 VB提供的循环语句有 For.Next Do.Loop While.Wend For Each.Next 最常用的是For.Next和Do.Loop语句,For.Next循环主要是用在知道循环次数的

2、情况下;若事先不知道循环次数,可以使用当型循环Do.Loop 1. For.Next循环语句 (计数控制) For 循环变量初值 To 终值 Step 步长值 循环体 Next 循环变量 2. 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 Pri

3、nt s=; s,例5.2,K为循 环变量,专设变量n来控制循环,例5.2 求S = 1 + 2 + 3 + 8,把结果显示在窗体上。 s = 0 累加器初值为0 For k = 1 To 8 s = s + k 累加器,在原有和的基础上每次加一个数 Next Print s= ; s 程序执行结果是:s36 分析,算法:通常采用重复运算来解决问题 累加、累乘等 如用级数 /41 - 1/3 + 1/5 - 1/7 + 来求 设置循环变量 使每次运算变量值有所不同 控制循环 计数控制或条件控制,循环结构程序的实现,求 S = 1 + 2 + 3 + + 8 s = 0 For k = 1 To

4、 8 s = s + k Next k Print s=; s 把长式子改为8次加,采用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)。在循环程序中,常用累加和累乘来完成各种计算任务,例5.3 求T = 8! = 1238,例5.3,例5.3 T = 8! = 123 8,把结果显示在网页上。 t = 1 累乘器初值为 For c = 1 To

5、 8 t = t * c 累乘器,在原有积的基础上每次乘一个数 Next Print T=; t 程序执行结果是:T40320 分析,采用Print直接在窗体上输出结果,程序代码如下: Private Sub Form_Load() Show Dim pi As Single, 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

6、 用/41 - 1/3 + 1/5 - 1/7 + 级数求的近似值 (取前5000项来进行计算),例5.4,For t = 1 To 3 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 3 B. 1 2 3 4 C. 3 2 1 4 D. 1 1 1 4,下列程序的运行结果是?,想一想,思考题,D,For t = 1 To 3 If t = 1 Then a = 3 If t = 2 Then a = 2 If t = 3 Then a = 1 Print

7、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,下列程序的运行结果是?,想一想,思考题,C,运行下面程序后,循环体执行了_次。 i = 0: n = 1 Do While i 32 i = (i + 1) * (i + 1) n = n + 1 Loop Print n A. 2 B. 3 C. 4 D. 5,请回答问题,想一想,思考题,C,s = ABCDEFGHIJ: c = For k = 2 To Len(s) Step 3 a = Mid(s, k) c = c + Left(a, 1) Next k Pri

8、nt c A. BDF B. CFI C. BEH D.BEI,下列程序的运行结果是?,想一想,思考题,C,采用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 Loop Print s=; s End Sub 程序运行结果: S338350,例5.5 求 S12 + 22 + + 1002,例5.5,采用Print直接在窗体上输出结果,程序代码

9、: Private Sub Form_Load() Show Dim pi As Single, n As Long, s As Integer pi = 0 : n = 1 : s = 1 Do While n =0.00001 pi = pi + s / n s = -s n = n + 2 Loop Print =; pi * 4 End Sub 程序运行结果: 3.141575,例5.6 用/41 - 1/3 + 1/5 - 1/7 + 级数,求的近似值。当最后一项的绝对值小于10-5时,停止计算,例5.6,“辗转相除法”算法:求出m/n余数p,若p0,n即为最大公约数;若p非0,则把

10、原来的分母n作为新的分子m,把余数p作为新的分母n继续求解 设计步骤如下: (1)创建应用程序的用户界面和设置对象属性,例5.7 输入两个正整数,求它们的最大公约数,例5.7,编写的“计算”按钮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 Text3.Text = m End Sub 若输入的m和n的值为85和68,则运行结果如上图,用于提前退出循环 格式: Exit

11、 For|Do功能:直接从For循环或Do循环中退出 当程序运行时遇到Exit语句时,就不再执行循环体中的任何语句而直接退出,转到循环语句(Next、Loop)的下面继续执行,5.1.4 循环出口语句,把每次输入的数累加。当输入-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

12、 Text1.Text = Sum Loop MsgBox (累加运算结束) End Sub 以-1作为“终止循环标志”,例5.8 设计一个“加法器”程序,例5.8,多重循环是指循环体内含有循环语句的循环 例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 Next i 3 5 End Sub 3 6 3 7 注意内、外循环层次要分清,不能交叉,5.2 多 重 循 环,例5.9,本例可采用

13、两重循环来实现。外循环控制输出7行,内循环控制每行输出要求的字符数。 在进入内循环之前,使用Print Tab()来对起始输出位置定位,退出内循环后,使用Print来控制换行。,例5.10 编一程序,输出下列所示的图形,例5.10,采用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有所

14、不同,(1)分析:设一元硬币为a枚,二元硬币为b枚,五元硬币为c枚,可列出方程 a+b+c=10 a+2b+5c=25采用两重循环,外循环变量a从010,内循环变量b从010 (2)创建应用程序的用户界面,例5.11 取一元、二元、五元的硬币共十枚,付 给25元钱,有多少种不同的取法?,例5.11,(3)编写程序代码 程序通过Print方法把处理结果输出在标签的下方 Private Sub Form_Load() Show CurrentX = 0 : CurrentY = 1500 确定开始显示的坐标 Print , 五元, 二元, 一元 n = 0 记录解的组数 For a = 0 To

15、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 Sub,执行下列程序段后,变量t 的值是_。 t = 0 For x = 2 To 3 n = 1 Do While n=x t = t + n n = n + 1 Loop Next x A. 8 B. 9 C.10D. 11,请回答问题,想一想,思考题,B,请回答问题,想一想,思考题,显示结果为: 16,执行下列程序段后,显示的结果是_

16、 s = 0 For m = 1 To 4 Step 2 n = 1 Do While n=m s = s + n n = n + 1 Loop Next m Print s + m + n,例5.12a,5.3 列表框与组合框,列表框和组合框都能为用户提供若干个选项,供用户从中任意选择 5.3.1 列表框(ListBox) List属性:字 符型数组, 存放列表 框的表项 数组的下标从0开始。 例如,List1.List(0)的值为“教授”, List1.List(1)的值为“副教授” 。 ListCount属性:表项数目 Text属性:当前选定表项的文本内容 ListIndex属性:返回已

17、选定表项的顺序号(索引)。若未选定任何项,则ListIndex的值为-1 Selected属性:逻辑型数组,表示列表框中某一表项是否被选中,例5.12b,假设列表框List1中有四个表项,并已选定第2项,则 有: List1.ListIndex 为1 List1.Text的值为”副教授” List1.Selected(1)为True,方法 (1) AddItem方法:用于把一个列表项加入列表框 格式: 对象.AddItem 列表项,索引 举例:List1.AddItem 海南省 ,28 (2) Clear方法:用于清除列表框中的所有项目 (3) RemoveItem方法:用于删除指定的列表项

18、采用以下方法,可为列表框List1赋值: (1)在属性窗口中设置 (2)利用AddItem赋值 (3) 利用List属性赋值 List1.AddItem “教授” List1.List(0)= “教授” List1.AddItem “副教授” List1.List(1)= “副教授” List1.AddItem “讲师” List1.List(2)= “讲师” List1.AddItem “助教” List1.List(3)= “助教”,列表框表项的输出 (1) 用鼠标单击列表框内某一表项,则该表项值存放在Text属性中。 例如:x = List1.Text 把表项值存放在x变量中 (2) 指

19、定索引号来取表项的内容,例如: List1.ListIndex = 3 x = List1.Text (3) 直接从数组List()中读取,例如: x = List1.List(5),(1)分析:判别条件为 (n Mod 14=0) And (n Mod 10=8) (2)创建应用程序的用户界面和设置对象属性,例5.12 设计一程序,找出三位数中能被14整除且个位数为8的自然数,把这些自然数显示在列表框中,其个数显示在标签中。,例5.12,(3)编写程序代码 编写的“显示”按钮Click事件过程代码: Private Sub Command1_Click() “显示” List1.Clear

20、For n = 100 To 800 If (n Mod 14 = 0) And (n Mod 10 = 8) Then List1.AddItem n End If Next n Label1.Caption = 符合条件的自然数的个数为: _ Combo1.Text Picture1.Print 硬盘(GB):; Combo2.Text Picture1.Print 内存(MB):; Combo3.Text End Sub,5.4 常用算法,算法是对某个问题求解过程的描述。 常用的算法有:穷举法、递推法、排序法、查找法、递归法等。 1. 累加、连乘和计数 累加(如s=s+k)是在原有和的基

21、础上一次一次地每次加一个数,连乘(如t=t*c)则是在原有积的基础上一次一次地每次乘一个数。计数通常每次增加的值不是一个加数,而是1。 例5.15 找出100999三位数中的“水仙花”数,计算其个数。所谓水仙花数,是指各位数字立方和等于该数本身,如153是一个水仙花数,因为153=13 + 53 + 33。 程序中采用计数方法n=n+1(或称“计数器”)来记录有多少个“水仙花”数。,找水仙花数,Private Sub Form_load() Dim k As Integer, a As Integer, b As Integer Dim c As Integer, n As Intege Sh

22、ow n = 0 Print 三位数的水仙花数是: For k=100 To 999 a = Int(k/100) 求百位数 b = Int(k-100*a)/10) 求十位数 c = k Mod 10 求个位数 If k=a3 + b3 + c3 Then Print k 输出水仙花数 n=n+1 对满足条件的数进行计数 End If Next k Print 一共有 x, Print “小鸡只数为:”; y End If Next x End Sub,例5.16,3. 递推法,“递推法”也称为“迭代法”,其基本思想是把一个复杂的计算过程转化为简单过程的多次重复。每次重复都从旧值的基础上递推

23、出新值,并由新值代替旧值。 通过InputBox函数输入a值,并以a作为x的初值。要求前后两次求出的x的差的绝对值小于10-5。 分析:这是一个“递推”问题,先从a推出第一个x值 即(a+a/a)/2x,再以该x值(旧值)推出x的新值 即(x+a/x)/2x,依次向前推,每次以x旧值推出x的新值 即(x+a/x)/2x。当x旧值与新值之差的绝对值小于10-5时,此时的x新值为所求。,例5.17,Private Sub Form_Load() Dim a As Single, xn0 As Single, xn1 As Single Show 用xn0表示旧值,xn1表示新值 a = Val(I

24、nputBox(请输入一个正数) xn1 = a 以a作为x的初值 Do xn0 = xn1 确定旧值 xn1 = (xn0 + a / xn0) / 2 计算新值 Loop While Abs(xn0 - xn1) = 0.00001 判断 Print a; 的平方根为; xn1 End Sub 如果输入的a值为3,程序运行结果是: 3的平方根为 1.732051,例5.17,5.4 程序举例,例5.18 打印“九九乘法表” 两重循环; 采用Print直接在窗体上输出结果,例5.18,打印“九九乘法表”,Private Sub Form_Load() Show FontSize = 15 设

25、置字号 Print Tab(12); “九九乘法表“ 输出标题 FontSize = 12 Print 输出空行 For k = 0 To 9 Print Tab(k * 4); k; 输出第一行数字 Next k Print 换行 For j = 1 To 9 外循环 Print j; For k = 1 To j 内循环 Print Tab(k * 4); j * k; 输出乘积 Next k Print 换行 Next j End Sub,(1)创建应用程序的用户界面和设置对象属性 功能要求:用户在文本框Text1中输入要转换的十进制数,选择转换进制,单击“转换”按钮(Command1)

26、后,则在文本框Text2中输出转换结果。,例5.19 输入一个十进制整数,将其转换成二进制 数、八进制数或十六进制数,例5.19,(2)算法:模仿十进制整数转换成二进制数的方法(即“除2取余”),采用逐次“除n取余”法(n为2,8或16),即用n不断去除要转换的十进制数,直至商为0为止,将每次所得的余数逆序排列(以最后余数为最前位),即得到所转换的n进制数。 示例: (6)10 = (110)2 (142)10 = (8E)16,求余数 = 142 Mod n,求商数 = Int(142/n),(3)把 0 15转换为十六进制数”0” ”F” 把数值09,10 15 转换为字符“0” ”9”

27、,”A”F” 利用 “换码表”(Ch变量) Ch = “0123456789ABCDEF” 要把数值s(0 15)转换为十六进制数码”0” ”F”,可采用 c = Mid(Ch, s + 1, 1) 即以 s+1 确定位置,从Ch中取出相应的一个字符。 当s=5时, c = “5” 当s=14时,c = “E”,(4) List属性 列表框的名称为List1,其List属性设置了三个表项:2进制、8进制和16进制。 (5)编写程序代码,Private Sub Command1_Click() “转换”按钮单击事件过程 Dim y As String, x As Long, s As Integer Dim Ch As String, n As Integer Ch = 0123456789ABCDEF 换码表 If List1.ListIndex = -1 Then n = 2 未选,则以二进制转换 Else n = Val(List1.List(List1.ListIndex) End If y = :x = Val(Text1.Text) If x = 0 Then Text2.Text = Exit Sub End If Do While x 0 s = x Mod n 取余数 x = Int(x / n) 求商 y = Mid(Ch, s + 1, 1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论