




已阅读5页,还剩43页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章 循环结构程序设计,循环结构 用For-Next语句实现循环结构 用Do While-Loop语句实现循环结构 嵌套的循环结构,For 循环变量 = 初值 To 终值 Step 步长 循环体语句 Next 循环变量,ForNext循环的一般语法格式,步长可取正或负数;步长为负时终值应小于初值,For-Next常用于循环次数已知的循环中 循环体语句可以是一条或多条语句 可以使用Exit For语句提前结束循环 For i =1 To 10 x = x + Int( Rnd * 100 ) sum = sum + x If sum 300 Then Exit For End If Next i Print sum,程序说明,【例】找最大值。单击最大值按钮时产生10个1100之间的随机整数显示在框架内的标签中,同时将最大值显示在下方的标签内。,lbldata,lblmax,处理第1个数据 产生一个随机数,存放在变量a中 将a显示在标签(lblData)中 将a作为当前最大值放在变量max中 处理第2个数据 产生新的随机数,存放在变量a中 将a连接显示在标签(lblData)原有内容之后 如果a大于max,则将a作为最大值放在max中,编程分析,a = Int(Rnd * 100) + 1,lblData.Caption = a,max = a,a = Int(Rnd * 100) + 1,lblData.Caption = lblData.Caption & “,“ & a,If a max Then max = a End If,9次,Private Sub cmdMax_Click() Dim a As Integer, i As Integer, max As Integer Randomize a = Int(Rnd * 100) + 1 lblData.Caption = a max = a For i = 1 To 9 重复执行9次 a = Int(Rnd * 100) + 1 lblData.Caption = lblData.Caption & “,“ & a If a max Then max = a End If Next i lblMax.Caption = max End Sub,求1000个数中的最大?,程序代码,常用于执行条件明确,但事前不知道循环次数的循环 语法格式 Do While 循环条件 循环体语句 Loop 执行流程,Do While - Loop语句,循环体语句,Yes,No,通常情况下,在进入Do While - Loop语句前应给循环变量设置初值 循环体中必须包含使循环趋于结束的语句 可以使用 Exit Do 语句随时跳出当前所在的循环,提前结束循环语句 Exit Do 可出现在循环体语句中的任意位置,通常与 If 语句联合使用,Do While - Loop语句,语法格式 Do 循环体语句 Loop While 循环条件 执行流程,Do - Loop While语句,循环体语句,Yes,No,【实例】输入若干成绩(输入-1时结束)计算总成绩和平均成绩 。,连续弹出输入框接收成绩,直至-1时结束,计算总成绩和平均成绩,多行文本框,Lblaverage,Lblsum,txtscore,输入第1个数据 输入第一个数据,存放在变量score中 判断输入的数据是否是-1,如果不是-1 记录已经输入的学生人数 将数据显示在txtscore原有内容之后中 计算总成绩 接收下一个数据,编程分析成绩输入,score = Val( ),InputBox(“请输入.”, “成绩输入“, -1),n = n + 1,txtScore.Text = txtScore.Text & score & Chr(13) & Chr(10),直到输入-1,sum =sum+ score,score = Val(InputBox(“请输入.”, “成绩输入“, -1),换行符,Dim sum As Integer 总成绩 Dim n As Integer 成绩个数 Private Sub cmdInput_Click() Dim score As Integer txtScore.Text = “ lblSum.Caption = “ lblAverage.Caption = “ sum = 0 : n = 0 score = Val(InputBox(“请输入.”, “成绩输入“, -1) Do While score -1 n = n + 1 txtScore.Text = txtScore.Text & score & Chr(13) & Chr(10) sum = sum + score score = Val(InputBox(“请输入.“, “ 成绩输入“, -1) Loop End Sub,程序代码,Private Sub cmdCala_Click() Dim ave As Single lblSum.Caption = sum ave = sum / n lblAverage.Caption = ave End Sub,程序代码,【程序改进】 修改上例,当输入非法成绩时,再次弹出输入框等待重新输入,直至输入1 100之间的整数为止。要求在文本框中只显示出有效的输入成绩。,循环的嵌套,在一个循环体内又出现另外的循环语句称为循环嵌套,也称为多重循环。 在嵌套结构中,对嵌套的层数没有限制,有几层嵌套,就说是几重循环。 多重循环的执行过程是,外循环每执行一次,内循环都要从头到尾执行一遍。 嵌套时,内层循环必须完全包含在外层循环之内,不能相互“交叉”。,正确的嵌套,错误的嵌套,For循环的嵌套,其形式通常有以下两种:,1)一般形式 For I1= For I2= For I3 Next I3 Next I2 Next I1,2)省略Next后面的循环变量 For I1= For I2= For I3= Next Next Next,每层For循环的Next语句都不可省略。 但当多重循环的Next语句连续出现时,Next语句可以合并成一条,内层循环变量写在前面,外层循环变量写在后面。 For I1= For I2= For I3= Next I3, I2, I1,在循环的嵌套中,内层循环和外层循环应该使用不同的循环控制变量。 在多重循环的任何一层循环中都可以使用Exit Do或Exit For退出循环,但要注意只能退出Exit Do或Exit For 语句所对应的最内层循环,而不是一次退出多层循环。,For循环的嵌套,例如,下面的循环退出位置如箭头所示: f = 1 For i = 1 To 10 For j = 1 To 10 f = f * i * j If f 1000 Then Exit For Next j Print i; j; f Next I,使用多重循环处理程序时,需要考虑清楚内外层循环分别用来控制哪一个量的变化,其变化规律如何。,多重循环应用举例,1. 字符图形的输出,3. 其他综合应用,2. 方程求解问题,字符图形的输出,(a),(b),(c),(d),在解决这类问题时,应首先考虑一个一般行的输出,只需要把这个一般行的输出语句利用循环结构控制执行多次即可。 例如:在输出图形(a)时,每一行都输出了同样的6个字符,在输出每一行之后换行,然后输出下一行,所以,只需要将输出一行字符的语句连续执行5次就可以了。,输出图形(a)的程序如下: For j = 1 To 5 For i = 1 To 6 内循环控制输出一行的多个星号 Print “*“; Next i Print 输出每一行后换行 Next j 两个循环控制变量i和j,分别用来控制图形中列与行的变化,称之为列变量和行变量。 在实现输出字符图形时,要找清楚要输出的图形与行列变量之间的关系。,图形(b)与图形(a)的差别 在输出每一行星号时首先输出了若干个空格 每一行之前输出的空格的个数与其行号相同,即始终与行变量j相同。,(b),(a),字符图形的输出,输出图形(b)的程序如下: For j = 1 To 5 Print Tab(j); 先输出j个空格 For i = 1 To 6 Print “*“; Next i Print Next j,图形c)与图形a)的差别 在于每一行输出的星号个数不同 图形a)中每行都输出了固定个数的字符,而图形c)中每行输出的字符个数与其行数相同 只需要修改一下内循环控制变量的终值就可以了。,返回,(a),(c),输出图形(c)的代码如下: For j = 1 To 5 For i = 1 To 6 Print “*“; Next i Print Next j,j,输出矩阵图形,例:请输入n值,编写程序输出下列图形(例如n=5). 1 2 3 4 5 1 1 2 3 4 1 1 1 2 3 1 1 1 1 2 1 1 1 1 1,第1行:1个1,2-5 第2行:2个1,2-4 第3行:3个1,2-3 第5行:5个1,第1行:1个1,2n 第2行:2个1,2n-1 第3行:3个1,2n-2 第n行:n个1,代码,Private Sub Form_Activate() Dim i As Integer, j As Integer For i = 1 To 5 For j = 1 To i Print 1; Next j For j = 2 To 6 - i Print j; Next j Print Next i End Sub,实例4.4,第1行:1个1,2-5 第2行:2个1,2-4 第3行:3个1,2-3 第5行:5个1,第1行:1个1,2n 第2行:2个1,2n-1 第3行:3个1,2n-2 第n行:n个1,第行:个,2n-(i-1),Yes,打印第i行,i=n,i =i+ 1,打印1,打印2n-i+1,For j = 1 To i Print 1; Next j,For j = 2 To n - i + 1 Print j; Next j,例:编程打印“乘法九九表”。,分析:将每一个等式作为一个方阵的节点,则每一个等式出现的位置上行列的数字是相同的。 For i=1 to 9 For j=1 to i Next j Next i 为乘法等式:expss = i ,(2)方程求解,【例】编写程序求下列方程组的所有正整数解。 2X+5Y=20 2Y=3X-1 分析: 根据两个方程确定X和Y的取值范围分别为: X在0和10之间,Y在0到4之间。 对该范围内的所有整数依次用方程进行验证,从而得出方程的解。,For X = 0 To 10 For Y = 0 To 4 If 2 * X + 5 * Y = 20 And 2*Y = 3 * X - 1 Then Print X; Y End if Next Y, X,(3)其他综合应用,【例】编程求Sum=1+(1+2)+(1+2+3)+(1+2+3+n),其中n由用户输入。 分析: 该题是一个累加问题,共有n项相加,设置存放累加和的变量为Sum 对于第i个累加项1+2+i,又是一个累加问题,设存放该累加项的变量为Sum1,因此可以用双重循环来实现。 用外循环i依次取1、2、n值, 对于每一次的累加项(如第i项),用内循环控制求1+2+i。 设文本框Text1用于输入总项数n,Text2用于输出总和Sum,运行时单击窗体计算结果。,Private Sub Form_Click() n = Val(Text1.Text) Sum = 0 For i= 1 To n Sum1 = 0 在计算每个累加项之前,将放和的变量清零 For j= 1 To i Sum1 = Sum1 + j Next j Sum = Sum + Sum1 Next i Text2.Text = Sum End Sub 本题应注意Sum=0和Sum1=0在程序中的位置。,For i = 2 To r - 1 If r Mod i = 0 Then Exit For Next i If i = r Then End if,判断r是否素数,lblprime.Caption = lblprime.Caption + “ + Str$(r),r是素数,Flag=0,Flag=1:exit for,Flag=0,补充例题,译密码: 字母翻译:按26个字母排列顺序向后移动n位,若移出了最后一个则移到字母a或A并顺序往后移 例:今天是28号,a 向后移动28位 abcdefghijklmnopqrstuvwxyz,28,25,补充例题代码,If ch = “a“ And ch = “z“ Then asch = Asc(ch) - 97 + 1 在26个小写字母中的位置 trap = Chr$( asch + n ) Mod 26 + 97 - 1) 求出按规则转换后的字符,补充例题,题目要求:输入一行数字,按相反的顺序输出。 例如:输入“1 2 3 4 5 6 7 8” 输出“8 7 6 5 4 3 2 1” 难点:如何获得各位数字,补充例题代码,Private Sub lblout_Click() n = Val(txtin.Text) While n 0 r = n Mod 10 lblout.Caption = lblout.Caption & r n = n 10 Wend End Sub,译码器密码检测窗体设计,案例译码器,译码器密码检测窗体设计,添加窗体:工程|添加窗体 密码框属性:PasswordChar * 代码 Dim n As Integer 定义n为窗体级变量,用于累计验证密码的次数 Private Sub cmdok_Click() Const password = “061216“ Const name = “santa“ n = n + 1 If n = 3 Then 控制验证密码的次数,If txtname.Text = “ Or txtpassword.Text = “ Then MsgBox “必须输入姓名和密码“, 0 + 64, “提示“ Else If txtname.Text = name And txtpassword.Text = password Then frm1.Hide frm2.Show Else MsgBox “姓名或密码错误“, 0 + 48, “警告“ End If End If Else End End If End Sub,译码器译码器窗体设计,译码器译码器窗体设计,函数 Asc(C)的功能是将字符转换成ASCII码值,如Asc(“A”)的值65 Chr(65)其功能是将ASCII码值转换成字符,如Chr(65)的值“A” LTrim(C)是去掉字符串左边的空格, 如LTrim(“ABVC”)的值为ABVC Mid(C,N1,N2)是取字符子串,在C中从N1位开始向右取N2个字符,译码器译码器窗体设计,约定 “原文”文本框中的数字字符串每三位代表一个完整的信息,如一个字母(065表示字符“A”)或一个空格(000表示空格),一个数字(033非字母或空格,表示数字33),字符串结束(“#”),译码器“译码”代码,n = 1 ori = LTrim$(txtori.Text) 去掉“原文”文本框字符串右边的空格,赋值给变量ori orip = Mid$(ori, n, 3) 从字符串ori的第一个位置开始取3个字符,赋值给字符串变量orip While orip “#“ n = n + 3 确定下一次取字符的位置 If Val(orip) = 0 And Val(orip) = 255 Then ASAII码的范围是0255 orip = Chr$(Val(orip),If orip = “a“ And orip = “A“ And orip = “Z“ Then trapn = Asc(orip) - 65 + 1 trap = Chr$(trapn + Day(Now)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度财务人员年终工作总结7篇
- 高速站安全知识培训总结课件
- 电视导演基础知识培训内容课件
- 电脑知识线上培训班课件
- 高考散文结构鉴赏课件
- 电脑培训基本知识书课件
- qc人员上岗考试及答案
- orcal考试题及答案
- 电缆知识及销售技巧培训课件
- 电线生产知识培训
- 感染性休克教学查房演示文稿
- 碎石组织供应及运输售后服务保障方案
- 护理服务规范整改措施(共15篇)
- 幼儿园教育活动设计与实践 张琳主编 PPT
- 建筑施工过程中成品保护施工方案
- 法律职业伦理(第二版)完整版教学课件全书电子讲义(最新)
- 西师版三年级上册数学全册教案(完整)
- 关键过程(工序)和特殊过程(工序)管理办法
- 整套VI品牌形象设计项目报价(费用明细)
- 武术校本课程武术基本功
- 机械制造及自动化专业讲座
评论
0/150
提交评论