循环结构程序设计(1).ppt_第1页
循环结构程序设计(1).ppt_第2页
循环结构程序设计(1).ppt_第3页
循环结构程序设计(1).ppt_第4页
循环结构程序设计(1).ppt_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

Visual Basic 程序设计,ch4第一讲 循环结构程序设计,计算机具有速度快、精度高的特点,特别适于进行重复性的工作,重复次数越多越能显示它的威力。所以,使用计算机时,应尽量把问题归纳为简单而有规则的重复运算和操作,以充分发挥计算机的特长。,程序结构清晰,可读性好,也易于查错和修改 具有单入口,单出口的特点,结构化程序的基本结构,引例,1+2+3+n和的过程可以描述如下: Sum=Sum+1 Sum=Sum+2 Sum=Sum+3 重复执行Sum=Sum+i的过程 Sum=Sum+n,Sum=0 For i = 1 To n step 1 sum = sum + i Next i,实例4.1,求1+2+3+n的和。窗体界面如图所示。,任务一,求正整数N的阶乘 如:10!=1*2*3*4*10,算法分析,(1)1*2*3*+n和的过程可以描述如下: fac=fac*1 fac=fac*2 fac=fac*3 重复执行fac=fac*i的过程 fac=fac*n,fac = 1 For i=1 to n fac = fac * i Next i,实例拓展,1、求1n之间的奇数和的代码段为: For i=1 to (n+1)2 Sum=Sum+2*i-1 Next i 当然,也可以通过调整步长解决,代码段为: For i=1 to n Step 2 Sum=Sum+i Next i 2、求1+1/2+1/3+1/n的代码段为: For i=1 to n Sum=Sum+1/i Next i 补充作业:求n!,1、For 语句(一般用于循环次数已知),For 循环变量初值 to 终值 Step 步长 语句块 Exit For 语句块 Next 循环变量,循环体,0 初值终值 =0 死循环 循环次数,(1)为循环变量赋初值。 (2)判断循环变量值是否超过终值(步长值为正时,指大于终值;步长值为负时,指小于终值)。超过终值时,退出循环,执行Next之后的语句;没有超过,则执行循环体 (3)遇到Next语句时,修改循环变量值(即循环变量=循环变量+步长值),再转到(2)去判断循环条件。,For.Next语句的执行步骤,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,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,下列程序的运行结果是?,想一想,思考题,C,(1) 问题中的共性: 程序设计中需要按照某种规律反复不断执行某一段程序;能够完成此功能的程序结构成为“循环结构”,被反复执行的“程序段”成为“循环体语句”。 (2)循环结构的三要素: A. 构成循环的基本条件是什么? B. 循环体要完成的功能是什么? C.在什么情况下结束循环过程?,任务二,实现1*2*3*n的操作,当阶乘值5000时结束操作。,i = 1 fac = 1 While fac = 5000 fac = fac * i i = i + 1 Wend,算法分析,(1)1*2*3*+n和的过程可以描述如下: fac=fac*1 fac=fac*2 fac=fac*3 重复执行fac=fac*i的过程 fac=fac*n (2)循环的次数未确定,所以用While循环。 循环体为fac=fac*i, 循环条件为累乘积fac=5000。,i = 1 fac = 1 While fac = 5000 fac = fac * i i = i + 1 Wend,1.2、While语句(一般用于循环次数未知),While 条件 循环体 Wend (1)功能:当条件成立(为真)时,执行循环体; 当条件不成立(为假)时,终止循环。 (2)说明: A.逻辑表达式作为进入循环的条件,当条件成立时进入循环. B. 循环体由若干条语句构成,在循环体中至少包含一条不断修正逻辑表达式的语句,使得循环过程朝退出的方向发展。 C. 一直循环到逻辑表达式不成立为止。,(1)求出条件表达式的值,如果值为True(非0值),则执行(2),否则执行Wend后的语句 (2)执行“循环体”,当遇到Wend语句转到步骤(1),While.Wend语句的执行步骤,实例4.2,实现1*2*3*n的操作,当阶乘值5000时结束操作。窗体界面如图所示。“计算”命令按钮代码用来计算累乘积;“手动计算”按钮代码是执行一次累乘积操作,主要目的是用于演示1*2*3*n的过程。,“手动计算”,If j = 0 Then fact = 1 If fact = 5000 Then j = j + 1 fact = fact * j txtcyc.Text = j txtfac.Text = fact Else Cmdcalh.Enabled = False End If,任务三,用wile wend结构实现5+10+15+100的操作。,i = 5 S=0 While i = 100 s=s+i i = i + 5 Wend,任务四,随机产生一个两位数正整数,判断是否是素数。,1.3、Do语句(一般用于循环次数未知),1先判断后语句形式1(执行,执行次数=0) Do While 或Until 条件 语句块 Exit Do 语句块 Loop 语句形式2(先执行后判定,执行次数=1) Do 语句块 Exit Do 语句块 Loop While 或Until 条件,语句说明: While条件:当条件成立时执行循环,条件不成立时结束循环。 Until 条件:条件不成立时执行循环,直到条件成立时结束循环。 Exit Do:从循环中间退出循环,执行do循环后的语句。,2. DoLoop循环语句(用于控制循环次数未知) 形式1: (先测试后执行;执行次数=0) Do While|Until 语句块 Exit Do 语句块 Loop,形式2:(先执行后测试;执行次数=1) Do 语句块 Exit Do 语句块 Loop While|Until ,Do While语句的执行步骤,注:循环体由若干条语句构成,在循环体中至少包含一条不断修正逻辑表达式的语句,使得循环过程朝退出的方向发展。,实例4.3,产生m个1099之间的随机整数,求出其中的素数,并求出素数中的最大值、最小值和平均值。窗体设计界面和运行界面如图所示。,算法分析,(1)产生随机数:r= Int(Rnd*90)+10 (2)判断r 是否素数。素数是只能被1和其本身整除的数。也就是说,要判断r是否为素数,只要依次用整数2,3,4,r-1去除r,只要有一个能整除r,则r不是素数,否则r是素数。 (3)素数最大最小值。用变量max和min分别存放最大和最小值。如果随机素数r大于最大值max则r为最大值;如果r小于最小值min则r为最小值。 (4)随机素数累加:sum = sum + r (5)重复步骤 m次产生m个随机数。最后求出m个数中的最大最小值和总和,For i = 2 To r 1 If r Mod i = 0 Then Exit For Next i,If r max Then max = r Else If r min Then min = r End If,if i = r then r是素数 End if,代码实现,Do r = Int(Rnd * 90) + 10 lblrnd.Caption = lblrnd.Caption + “ + Str$(r) n = n + 1 计随机数的个数 For i = 2 To r - 1 判定r是否素数 If r Mod i = 0 Then Exit For Next i If i r Then If r max Then max=r求最大最小值及总 If r min Then min = r sum = sum + r lblprime.Caption = lblprime.Caption + “ + Str$(r) p = p + 1 计随机素数数的个数 End If Loop While n m,格式: Exit For|Do 功能:直接从For循环或Do循环中退出 当程序运行时遇到Exit语句时,就不再执行循环体中的任何语句而直接退出,转到循环语句(Next、Loop)的下面继续执行,Exit用于提前退出循环,运行下面程序后,循环体执行了_次。 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,n = 1: s = 0 Do While n = 100 s = s + n * n n = n + 1 Loop Print “s=“; s,把 Do-While改成 For-Next,想一想,思考题,s = 0 For n=1 To 100 s = s + n * n Next n Print “s=“; s,Do While n = 100,n = n + 1 Loop,n = 1 :,ForNext 前测型 S=0 s=0:k=1 For k=1 to 8 Do While k=8 s=s+k s=s+k Next k k=k+1 Print s Loop Print s s=0 : k=1 do s=s+k k=k+1 Loop While k=8 Print s,三种循环语句比较 示例:求和s = 1 + 2 + 3 + + 8,后测型,1.4 循环的嵌套,一个循环体内嵌套另外的循环称为循环的嵌套。 外部的循环称为外循环,内嵌的循环称为内循环。 注意:内循环是外循环的循环体的一部分,不能交叉。,实例4.4,编写程序在窗体内的图片框(pict)中输出图形,如图所示。,算法分析,(1)图形由若干行组成,也就是要重复打印行的操作若干次。重复操作用循环实现。这样程序的基本结构为: (2)循环体为“打印第i行”的操作。而第i行是由若干列组成,即i个1及2,3,n-i组成。所以打印“第i行”的操作为输出n个数:,For i=1 to n 打印第i行 Next i,for j=1 to i print 1; Next j For j = 2 To n - i + 1 Print j; Next j,代码实现,For i = 1 To k For j = 1 To i pict.Print 1; Next j For j = 2 To k - i + 1 pict.Print j; Next j pict.Print Next i,多重循环是指循环体内含有循环语句的循环 多重循环程序示例 程序运行结果 Private Sub Form_Load() Show For i = 1 To 3 外循环 For j = 5 To 7 内循环 Print i, j Next j Next i End Sub 注意内、外循环层次要分清,不能交叉,5.2 多 重 循 环,1 5 1 6 1 7 2 5 2 6 2 7 3 5 3 6 3 7,执行下列程序段后,变量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.10 D. 11,下列程序的运行结果是?,想一想,思考题,B,请回答问题,想一想,思考题,显示结果为: 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,可采用“穷举法”来解此题。 其做法是:从所有可能解中,逐个进行试验,若满足条件,就得到一个解,否则不是。直到条件满足或判别出无解为止。 令母鸡为x只,小鸡为y只,根据题意可知 y = 100 x 开始先让x初值为1,以后逐次加1,求x为何值时,条件3x+y/3=100成立。如果当x达到30时还不能使条件成立,则可以断定此题无解。,补充作业: 用100 元买100 只鸡,母鸡3元1只,小鸡1元3只,问各应买多少只?,采用Print直接在窗体上输出结果,程序代码: Private Sub Form_Load() Dim x As Integer, y As Integer Show For x = 1 To 30 y = 100 - x If 3 * x + y / 3 = 100 Then Print “母鸡只数为:“; x, Print “小鸡只数为:“; y End If Next x End Sub 运行结果: 母鸡只数为:25 小鸡只数为:75,【实例】应用嵌套的循环结构,输出由字符构成的特定图案。程序运行时,便激活窗体,并在窗体上输出如下图案。 * 1 * * 2 2 * * 3 3 3 * * 4 4 4 4 * * 5 5 5 5 5 *,嵌套的循环结构,(2)编写激活窗体时的代码,即Form的Activate 事件过程,Private Sub Form_Activate() For i = 1 To 5 Print “*“; For j = 1 To i Print i; Next j Print “*“ Next i End Sub,i = 1时:执行 Print “*“; For j = 1 To 1 Print 1; Next j Print “*“,* 1 *,Private Sub Form_Activate() For i = 1 To 5 Print “*“; For j = 1 To i Print i; Next j Print “*“ Next i End Sub,i = 2时:执行 Print “*“; For j = 1 To 2 Print 2; Next j Print “*“,* 1 * * 2 2 *,(2)编写激活窗体时的代码,即Form的Activate 事件过程,Private Sub Form_Activate() For i = 1 To 5 Print “*“; For j = 1 To i Print i; Next j Print “*“ Next i End Sub,i = 3时:执行 Print “*“; For j = 1 To 3 Print 3; Next j Print “*“,* 1 * * 2 2 * * 3 3 3 *,(2)编写激活窗体时的代码,即Form的Activate 事件过程,Private Sub Form_Activate() For i = 1 To 5 Print “*“; For j = 1 To i Print i; Next j Print “*“ Next i End Sub,i = 4时:执行 Print “*“; For j = 1 To 4 Print 4; Next j Print “*“,* 1 * * 2 2 * * 3 3 3 * * 4 4 4 4 *,(2)编写激活窗体时的代码,即Form的Activate 事件过程,Private Sub Form_Activate() For i = 1 To 5 Print “*“; For j = 1 To i Print i; Next j Print “*“ Next i End Sub,i = 5时:执行 Print “*“; For j = 1 To 5 Print 5; Next j Print “*“,* 1 * * 2 2 * * 3 3 3 * * 4 4 4 4 * * 5 5 5

温馨提示

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

评论

0/150

提交评论