第4章3循环结构2



《第4章3循环结构2》由会员分享,可在线阅读,更多相关《第4章3循环结构2(63页珍藏版)》请在装配图网上搜索。
1、,,,,教,,学,,课,,件,,,,,第,4,章,3,循环结结构,,在,Visual Basic,程序的三种结构中,循环结构是一,种,重要结构。,循环的本质,:不断地重复某种动作。,对计算机程序而言,循环必须具备两个重要因素:,1.,在一定的条件下,重复执行一组语句,2.,必然出现不满足条件的情况,使循环终止,一、循环程序设计结构,,VB,中提供了两种类型的循环语句:,一种是计数循环语句;另一种是条件循环语句。,Visual Basic,支持的循环结构有:,,☆,Do…Loop,,☆ For...Next,,☆ While…Wend,,☆ GoTo,语句,,重点掌握:,Do…Loop,、,Fo
2、r.Next,、,While…Wend,等前三种循环,1、,For,循环语句,语法格式:,,For,循环变量,=,初值,To,终值,[Step,步长,],,<,循环体,>,,Next [,循环变量,],循环体,循环变量增加步长,循环变量获得初值,F,循环变量在终值内,?,For,循环的执行过程,T,例,题:,,编程计算:,S=1*2*3*…*10,Dim S& , i%,,S=1 ',累加前变量,S,为,1,,For K=1 to 100,,S=S * K,,Next K,,Print " S=" , S,,,,For,循环语句,步长可为正、可为负、为
3、,1,时可省略,,如果步长为正,则变量小于等于终值时循环,,如果,步长为负,,则变量大于等于终值时循环,,当是单层循环时,,Next,后面的循环变量可不写,,特点:计数型循环,,,循环次数,=INT(,终值,-,初值,)/,步长,+1,,For,语句和,Next,语句必须成对出现,,在循环体中可以使用循环变量,但一般不再对循环变量赋值。,2,、,Do…Loop,循环结构,,Do,…,Loop,循环用于,事先不知道循环次数,的循环结构。此种语句四种语法格式:,,,⑴,. Do While,…,Loop,语句,,⑵,. Do,…,Loop While,语句,,⑶,. Do Until,…,Loop
4、,语句,,⑷,. Do,…,Loop Until,语句,,⑴. Do While … Loop,语句,,语法格式:,,Do While 〈,条件表达式,〉,,〈,循环体,〉,,Loop,,T,F,条件,循环体,流程图,说明:,,① 条件表达式可以是一个逻辑表达式,也可以是一个关系表达式,其值应是逻辑型。,,②,Do While,和,Loop,应成对出现。,,③ 循环体中要有改变循环控制变量值的语句,以避免出现死循环。,,④ 由于该循环的特点是,先判断条件,然后再决定是否要执行循环体,里的语句。所以,,这种循环可以一次也不执行循环体。,,⑤,Exit Do,表示当遇到该语句时,强制退出
5、循环,执行,Loop,后的下一条语句,一般与,If,语句联用,(,2,),. Do … Loop While,语句,语法格式:,,,Do,,〈,循环体,〉,,Loop While〈,条件表达式,〉,,流程图,T,F,条件,循环体,注意:,① 至少要执行循环体一次。,,② 与,Do While,循环的区别:,,,Do While,循环先测试条件是否成立,只有成立才执行循环;而该循环先执行循环体,后测试条件是否成立。,语法格式:,,,Do Until〈,条件表达式,〉,,〈,循环体,〉,,Loop,,,⑶ . Do Until …Loop,语句,Do Until … Loop,,语句流程图,
6、,⑷ . Do …Loop Until,语句,格式:,Do,,〈,循环体,〉,,,Loop Until〈,条件表达式,〉,T,F,条件,循环体,Do …Loop Until,,语句流程图,F,T,条件,循环体,A=val(InputBox(“,请输入第,1,个学生成绩”,),,B=val(InputBox(“,请输入第,2,个学生成绩”,),,C=val(InputBox(“,请输入第,3,个学生成绩”,),,Avg=(A+B+C)/3,,Print Avg,编程:通过输入对话框输入三个学生成绩,计算成绩平均分。,,此程序存在问题:如果需要输入,20,个成绩或更多或成绩个数根本不确定,则
7、几乎让人无法忍受,编程:通过输入对话框输入,10,个学生成绩,计算成绩平均分。,K=1,,Do While K<=10,,A=val(InputBox(“,请输入第,1,个学生成绩”,),,K=K+1,,Loop,,Avg=(A+B+C)/10,,Print Avg,思路,:在前一程序的基础上作些改动,,10,个数据的输入过程用循环实现:让第一个输入语句循环,10,次,思考:此程序存在哪些问题?,1,、输入的前面,9,个成绩丢失,,B,和,C,中无值,,2,、输入对话框中的提示总是显示“第,1,个”,解决办法:,1,、每个输入的成绩即时累加;,2,、提示信息分解成三部分: “请输
8、入第” 、,变量,K,,、 “个学生成绩”,K=1,:,s=0,,Do While K<=10,,A=val(InputBox(“,请输入第”,& K &,“,个学生成绩”,),,S=S+Val(A) : K=K+1,,Loop,,Avg=S/10,,Print Avg,编程:通过输入对话框,输入若干,成绩,,如果输入的成绩为,-1,,表示输入数据完毕,,计算成绩平均分。,S = 0 : N = 1,,cj = Val(InputBox(",请输入第," & N & ",个成绩,")),,Do While cj -1,,S = S + cj,,N
9、 = N + 1,,cj = Val(InputBox(",请输入第," & n & ",个成绩,")),,Loop,,Avg= S / (N-1),,Print ",平均成绩为:," ; Avg,,Exit Do,与,Exit For,语句,语句功能:强制退出循环,,Exit Do,语句只能用在,Do,循环语句中,,Exit For,语句只能用在,For,循环语句中,,使用方法:在循环体中,作为,IF,语句的子句,x = 1,,For K = 1 To 30,,If x >= 10 Then Exit For,,If x
10、 Mod 2 = 1 Then x = x + 7 Else x = x - 5,,Next K,,Print x,功能:,当,While,的条件表达式的值是,True,时执行循环体内的,,代码,直到,While,后的条件表达式的值为,False,。,,说明:,它与,Do,…,Loop,语句的差别是:,,While,…,Wend,语句中不能使用,Exit,语句跳出循环。,语法格式:,,While (,条件表达式 ),等价于,,do While,(条件表达式),,循环体 循环
11、体,,Wend LOOP,,3,、,While…Wend,循环结构,4,、,GoTo,语句构成循环,格式:,GoTo,标号,|,行号,,说明:,,标号:冒号结尾的标识符,,行号:一个整数,不跟冒号,,功能:无条件转移到指定行号或标号处执行,P=10000: r=0.025,,T=1,,Again:,,If t>10 then goto 100,,I=P* r,,P=P+I,,T=t+1,,Goto Again,,100,,Print p,,二、循环的嵌套,——,多重循环结构
12、,1,、如果在一个循环内完整地包含另一个循环,,结构,则称为多重循环,或循环嵌套,,,2,、嵌套的层数可以根据需要而定,嵌套一层,,称为二重循环,嵌套二层称为三重循环。,,上面介绍的几种循环控制结构可以相互嵌套,,,下面是几种常见的二重嵌套形式:,,(,1,),For I=….,,…..,,For J=….,,….,,Next J,,…..,,Next I,(,2,),For I=….,,…..,,Do While/Until ….,,….,,Loop,,…..,,Next I,(,3,),Do While….,,…..,,For J=….,,….,,Next J,,…..,,Loop,(
13、,4,),Do While/Until….,,…..,,Do While/Until ….,,….,,Loop,,…..,,Loop,,对于循环的嵌套,要注意以下事项:,,(1),内循环变量与外循环变量不能同名;,,(2),外循环必须完全包含内循环,不能交叉;,,,(3),不能从循环体外转向循环体内,也不能从外循环转向内循环,.,,,正 确 错 误,,,,,For i =1 To 10,,For j=1 To 20,,…,,Next i,,Next j,For i =1 To 10,,For j=1 To 20,,…,,Next j,,Next i
14、,For i =1 To 10,,…,,Next i,,For i =1 To 10,,…,,Next i,For i =1 To 10 For i=1 To 20,,…,,Next i,,Next i,一、程序分析举例,题目,1:,,K = 7,,A = 5,,Do,,K = K - 1,,A = A + 2,,Loop Until K <= 4,,Print "K=" ; K,,Print “A=" ; A,写出程序的输出结果,:,K=4,,A=11,程序分析举例,题
15、目,2:,,n = 3,,j = 1,,Do Until n >1,,n = n + 1,,j = j + n * (n + 1),,Loop,,Print n ; j,写出程序的输出结果,:,3 1,程序分析举例,题目,3:,,k = 1: m = 2: n = 4,,Do While k <= n,,m = m * 2,,k = k + 1,,Loop,,Print m ; k,写出程序的输出结果,:,32 5,程序分析举例,题目,4:,,C=4,,D=Val(InputBox(",请输入一个数,")),,Do While D>0,,If
16、D>C Then C= C+1,,D= Val(InputBox(",请输入一个数,")),,Loop,,Print C+D,运行时输入,9,8,7,0,写出程序的输出结果,:,7,程序分析举例,题目,5:,,S=0:i=1,,Do while i<100,,if i mod 100 then,,s=s+i,,end if,,i=i+1,,Loop,,Print "s= " ; s,写出程序的输出结果,:,S=4500,程序分析举例,题目,6:,,x = 1,,y = 1,,For i = 1 To 3,,f = x + y,,y = x,,
17、x = f,,Print f;,,Next i,写出程序的输出结果,:,2 3 5,程序分析举例,题目,7:,,x = 1,,For y = 1 To 30,,If x >= 10 Then,,Exit For,,End If,,If x Mod 2 = 1 Then,,x = x + 7,,Else,,x = x - 5,,End If,,Next y,,Print x,写出程序的输出结果,:,10,程序分析举例,题目,8:,,For i = 1 To 10,,k = 2 * i - 1,,Print k;,,
18、If I Mod 3 = 0 Then Print,,Next i,写出程序的输出结果,:,1 3 5,,7 9 11,,13 15 17,,19,循环结构程序的要素:,二、程序设计举例,依据四要素画出流程图,,,再写程序,处理的数据量大或处理的步骤多,,对每个数据的处理或每个步骤的处理有规律,首行考虑什么情况下要用循环技术来设计程序?,,循环体是什么?,,循环控制变量及循环控制表达式是什么?,,循环应如何初始化?,,对于每次循环,其控制变量如何改变?,循环控制变量赋初值,,及其他相关初始化语句,循环控制条件,循环体语句,改变循环控制变量的语句,题
19、目,1:,输入若干个职工工资,输入,0,时结束,求平均工资。,循环控制变量赋初值,,及其他相关初始化语句,循环控制条件,循环体语句,改变循环控制变量的语句,X=,输入一个工资,,S=0:N=0,工资,X0,?,S=S+x,X=,输入一个工资,,S=0,:,N=0,,X=Val(inputbox(…)),,Do while x0,,S=S+x,,X=Val(inputbox(…)),,loop,题目,2:,目前我国人口为,13,亿,如果以每年,1.1%,的速度增长,多少年以后我国人口将达到,15,亿。,循环控制变量赋初值,,及其他相关初始化语句,循环体语句,改变循环控制变量的语句,循环控
20、制条件,人口,x<=15?,X=13,,N=0,N=N+1,X=x*1.011,,Do while x<=15,,N=N+1,,X=x*1.011,,loop,题目,3:,对,SUM=1+3+5+……+N,,求,SUM,不大于,1000,的最大整数之和以及所对应的,N,值。,循环控制变量赋初值,,及其他相关初始化语句,循环控制条件,循环体语句,改变循环控制变量的语句,Sum<=1000?,Sum=1,,K=1,K=K+2,Sum=Sum+K,,Do while sum<=1000,,K=K+2,,sum=sum+k,,loop,题目,4:,输出所的水仙花数,所谓水仙花数是指一个
21、三位数,其各位数字的立方和等于该数本身,例如,,153,是一个水仙花数,因为,153=1,3,+5,3,+3,3,。,循环控制变量赋初值,,及其他相关初始化语句,循环控制条件,循环体语句,改变循环控制变量的语句,数值,K<=999?,K=100,a=,个位数,:b=,十位数,:c=,百位数,,判断是否是水仙花数,,,如是,,,则输出它,K=K+1,,Do while k<=999,,a=k mod 10:……,,if k=a^3+b^3 ……,,k=k+1,,loop,题目,5:,统计一文本框中数字字符的个数。,循环控制变量赋初值,,及其他相关初始化语句,循环控制条件,循环体语句,改
22、变循环控制变量的语句,位置号,k<=,总长,L,?,K=1,,L=len(text1.text),C=,第,k,个字符,,C,是数字字符,?,如是,个数,N,累加,1,K=k+1,:N=0,,Do while k<=L,,c=mid(text1.text,k,1),,if c>=“0” and c……,,k=k+1,,loop,Do while k 23、他相关初始化语句,循环控制条件,循环体语句,改变循环控制变量的语句,分母,k 24、语句,项数,k<=20?,K=3,,A=1:B=1,C=A+B:,输出,C,,A=B,:,B=C,K=K+1,,a=1:b=1,,For k=3 to 20,,c=a+b,,print c,,a=b:b=c,,Next k,循环嵌套举例,一、程序分析举例,题目,1:,,n = 1,,For i = 1 To 3,,For j = 5 To I Step -1,,n = n + 2,,Next j,,Print n ; j ; i,,Next i,,Print n ; j ; i,写出程序的输出结果,:,11 25、 0 1,,19 1 2,,25 2 3,,25 2 4,程序分析举例,题目,2:,,k = 0,,For j = 1 To 2,,Print I,,For i = 1 To 3,,k = i + 1,,Next I,,Print I,,For i = 1 To 2,,k = k + 1,,Next I,,Print I,,Next j,,Print k ; I,写出程序的输出结果,:,4,,3,,3,,4,,3,,6 3,程序分析举例,题目,3:,,For 26、 m = 1 To 2,,For j = 1 To m,,For k = j To 2,,Print "m=" ; m , "j="; j , "k= " ; k,,Next k , j , m,写出程序的输出结果,:,注意其写法:顺序,原则,等价形式,程序分析举例,题目,4:,,For i = 5 To 4 Step -1,,s = 0#,,For j = i To 3 Step -1,,s = s + i * j,,Next j,,Next i,,Print 27、 s,写出程序的输出结果,:,28,把,s = 0#,放在,For i,的前一行呢,?,程序设计举例,题目,1:,,,输出一行(,20,个)星号。,,输出一列(,20,个)星号。,,输出,5,行星号,每行,20,个。,,输出,5,行三角形形式星号。,*,,* *,,* * *,,* * * *,,* * * * *,* * * * *,,* * * *,,* * *,,* *,,*,Print "********************",Print "*",,Print "*",,Print "*",,Print "*",,. 28、,,.,,.,,Print "*",,Print "*",,Print "*",,Print "*",,Print "*",Print "********************",,Print "********************",,Print "********************“,,Print "********************",,Print "********************",Print "*",,Print "**",,Print "***",,Print "****",,Print "** 29、***",请分析这些语句与,,Print "*" ;,,的联系与区别,循环控制变量赋初值,,及其他相关初始化语句,循环控制条件,循环体语句,改变循环控制变量的语句,列号,X<=20?,X=1,输出一个星号,,,输出后不换行,X=X+1,,For X=1 to 20,,Print "*" ;,,Next X,,,循环控制变量赋初值,,及其他相关初始化语句,循环控制条件,循环体语句,改变循环控制变量的语句,行号,K<=5?,K=1,输出第,K,行星号,,,中间不换行,,输出完后换行,K=K+1,For K=1 to 5,,,,,输出第,K,行星号,,,,Print, 30、,Next K,******************,,******************,,******************,,******************,,******************,,循环控制变量赋初值,,及其他相关初始化语句,循环控制条件,改变循环控制变量的语句,行号,K<=5?,K=1,换行,,K=K+1,初始化语句,循环控制条件,循环体语句,改变循环控制变量的语句,列号,X<=20?,X=1,输出一个星号,,,不换行,X=X+1,,For K=1 to 5,,For X=1 to 20,,Print "*",;,,Next X,,, 31、Print,,Next K,*,,* *,,* * *,,* * * *,,* * * * *,,,* * * * *,,* * * *,,* * *,,* *,,*,*,,* * *,,* * * * *,,* * * * * * *,,* * * * * * * * *,*,,* *,,* * *,,* * * *,,* * * * *,For K=1 to 5,,,在第,K,行前输出,?,个空格,,,For X=1 to,?,,Print "*",;,,Next 32、 X,,,Print,,Next K,For K=1 to 5,,,在第,K,行前输出,?,个空格,,,For X=1 to,?,,Print "*",;,,Next X,,,Print,,Next K,Print tab(5-K);,例题:,打印九九乘法表,.,,,For i = 1 To 9,,,For j = 1 To 9,,se = i & "×" & j & "=" & i * j,,Print Tab(( j - 1) * 9 + 1) ; se;,,Next j,,Print,,Next 33、 i,题目,2:,求,100,至,200,内所有素数(之和)。,循环控制变量赋初值,,及其他相关初始化语句,循环控制条件,循环体语句,改变循环控制变量的语句,数值,X<201?,X=101,X,是否是素数,?,如是,累加到,S,X=X+2,思考:什么情况下说明是素数,?,循环控制变量赋初值,,及其他相关初始化语句,循环控制条件,循环体语句,改变循环控制变量的语句,分母,K 34、ile K< X,,If X mod K=0 Then Exit Do,,K=K+1,,Loop,,,,Sqrt(X),循环控制变量赋初值,,及其他相关初始化语句,循环控制条件,改变循环控制变量的语句,数值,x<201?,X=101:s=0,如果是素数,则累加:,X=x+2,初始化语句,循环控制条件,循环体语句,改变循环控制变量的语句,分母,k 35、,if x=k then s=s+x,(print,,x),,Next x,题目,3:,求,S=1!+2!+3!+……+7,!,,循环控制变量赋初值,,及其他相关初始化语句,循环控制条件,循环体语句,改变循环控制变量的语句,数值,X<8?,X=1:Sum=0,S = X!,累加,:Sum=Sum+S,,,X=X+1,,循环控制变量赋初值,,及其他相关初始化语句,循环控制条件,循环体语句,改变循环控制变量的语句,k<=X?,K=1,,X=val(text1.text),S=S*K,K=k+1,例,:,求一个数,X,的阶乘,循环控制变量赋初值,,及其他相关初始化语句,循环控制条件,改变循环控制 36、变量的语句,数值,X<8?,X=1:Sum=0,Sum=Sum+S,:,X=X+1,初始化语句,循环控制条件,循环体语句,改变循环控制变量的语句,k<=X?,S=1:K=1,S=S*K,K=k+1,,Sum=0,,For X=1 to 8,,S=1,,For k=1 to x,,S=S*K,,Next K,,Sum=Sum+S,,Next X,解法一,:,,每一项阶乘值独立求解,循环控制变量赋初值,,及其他相关初始化语句,循环控制条件,改变循环控制变量的语句,数值,N<8?,N=1:,S=1,:Sum=0,S=S*N,累加,:Sum=Sum+S,,,N=N+1,解法二,:, 37、,第,N,项阶乘值等于第,N-1,项阶乘值再乘以,N,优点,:,省去内层,,循环,,,效率高,,Sum=0:S=1,,For N=1 to 8,,S=S*N,,Sum=Sum+S,,Next N,练习:教材习题,P116,,二,,5,程序设计举例,题目,4:,穷举法,,,for a=1 to 9,,for b=0 to 9,,for c=0 to 9,,……,,next c , b , a,(1),请用上面的循环方式找出所有水仙花数,,(2),教材,P105,,例,4-22,,(3),教材习题:,P116,,二,,4,以下代码用于计算, 38、的近似值,当级数第,i,项的绝对值小于,10,-5,时计算结束,同时调用内部函数进行验证。这里,,x,为弧度。,,x=3.14159/6,,i=1:t=x:sinx=t,,Do While,(1),,i=i+2,,t=,(2),,sinx=sinx+t,,Loop,,Print sinx,,(3),下面的程序用于对,9,位的准考证号进行校验。参数,mno,存放准考证号,,mjy,存放产生的校验位,,tag,判断校验正确否,若校验正确在,L1,中显示“,yes”,,否则在,L1,中显示“,no”,。产生校验位的算法为:取准考证号右边的,8,位数之和关于,9,的模作为校验值,准考证号最左边的一位为 39、校验位。,,Mno$=text1.text,,msum = 0,,,(1),,m = Mid(mno, j, 1),,msum = msum + Val(m),,,Next j,,mjy =,(2),,If,(3),Then,,L1.Caption=“Yes”,,Else,,L1.Caption=“No”,,End If,三、程序填空题,题目,1,:以下程序用于计算数学表达式,,,1,2,-2,2,+3,2,-……+97,2,-98,2,的值,,S=0 : I=1 : C=1,,Do,,S=S+C*I*I,,c=________,,I=________,,Loop while________,,Print "s= " ; s,本章到此结束,
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。