资源描述
,教,学,课,件,第,4,章,3,循环结结构,在,Visual Basic,程序的三种结构中,循环结构是一,种,重要结构。,循环的本质,:不断地重复某种动作。,对计算机程序而言,循环必须具备两个重要因素:,1.,在一定的条件下,重复执行一组语句,2.,必然出现不满足条件的情况,使循环终止,一、循环程序设计结构,VB,中提供了两种类型的循环语句:,一种是计数循环语句;另一种是条件循环语句。,Visual Basic,支持的循环结构有:,DoLoop, For.Next, WhileWend, GoTo,语句,重点掌握:,DoLoop,、,For.Next,、,WhileWend,等前三种循环,、,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,循环语句,步长可为正、可为负、为,1,时可省略,如果步长为正,则变量小于等于终值时循环,如果,步长为负,,则变量大于等于终值时循环,当是单层循环时,,Next,后面的循环变量可不写,特点:计数型循环,,循环次数,=INT(,终值,-,初值,)/,步长,+1,For,语句和,Next,语句必须成对出现,在循环体中可以使用循环变量,但一般不再对循环变量赋值。,2,、,DoLoop,循环结构,Do,Loop,循环用于,事先不知道循环次数,的循环结构。此种语句四种语法格式:,. Do While,Loop,语句,. Do,Loop While,语句,. Do Until,Loop,语句,. Do,Loop Until,语句,. Do While Loop,语句,语法格式:,Do While ,条件表达式,循环体,Loop,T,F,条件,循环体,流程图,说明:, 条件表达式可以是一个逻辑表达式,也可以是一个关系表达式,其值应是逻辑型。,Do While,和,Loop,应成对出现。, 循环体中要有改变循环控制变量值的语句,以避免出现死循环。, 由于该循环的特点是,先判断条件,然后再决定是否要执行循环体,里的语句。所以,,这种循环可以一次也不执行循环体。,Exit Do,表示当遇到该语句时,强制退出循环,执行,Loop,后的下一条语句,一般与,If,语句联用,(,2,),. Do Loop While,语句,语法格式:,Do,循环体,Loop While,条件表达式,流程图,T,F,条件,循环体,注意:, 至少要执行循环体一次。, 与,Do While,循环的区别:,Do While,循环先测试条件是否成立,只有成立才执行循环;而该循环先执行循环体,后测试条件是否成立。,语法格式:,Do Until,条件表达式,循环体,Loop, . Do Until Loop,语句,Do Until Loop,语句流程图, . 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,个成绩或更多或成绩个数根本不确定,则几乎让人无法忍受,编程:通过输入对话框输入,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,、提示信息分解成三部分: “请输入第” 、,变量,K,、 “个学生成绩”,K=1,:,s=0,Do While K= 10 Then Exit For,If x 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,(条件表达式),循环体 循环体,Wend LOOP,3,、,WhileWend,循环结构,4,、,GoTo,语句构成循环,格式:,GoTo,标号,|,行号,说明:,标号:冒号结尾的标识符,行号:一个整数,不跟冒号,功能:无条件转移到指定行号或标号处执行,P=10000: r=0.025,T=1,Again:,If t10 then goto 100,I=P* r,P=P+I,T=t+1,Goto Again,100,Print p,二、循环的嵌套,多重循环结构,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,(,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,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 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 0,If DC Then C= C+1,D= Val(InputBox(,请输入一个数,),Loop,Print C+D,运行时输入,9,8,7,0,写出程序的输出结果,:,7,程序分析举例,题目,5:,S=0:i=1,Do while i= 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;,If I Mod 3 = 0 Then Print,Next i,写出程序的输出结果,:,1 3 5,7 9 11,13 15 17,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,亿。,循环控制变量赋初值,及其他相关初始化语句,循环体语句,改变循环控制变量的语句,循环控制条件,人口,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:,输出所的水仙花数,所谓水仙花数是指一个三位数,其各位数字的立方和等于该数本身,例如,,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=a3+b3 ,k=k+1,loop,题目,5:,统计一文本框中数字字符的个数。,循环控制变量赋初值,及其他相关初始化语句,循环控制条件,循环体语句,改变循环控制变量的语句,位置号,k=,总长,L,?,K=1,L=len(text1.text),C=,第,k,个字符,C,是数字字符,?,如是,个数,N,累加,1,K=k+1,:N=0,Do while k=“0” and c,k=k+1,loop,Do while kx,if x mod k=0 then exit do,k=k+1,Loop,If k=x then print x,思考:什么情况下说明是素数,?,题目,6:,判断一个数,x,是否为素数。,循环控制变量赋初值,及其他相关初始化语句,循环控制条件,循环体语句,改变循环控制变量的语句,分母,kx?,K=2,X=val(text1.text),如果,x,能被,k,整除,则强行退出,K=k+1,For k=2 to x-1,if ,Next k,If k=x then print x,结论:,x=k,说明是素数,题目,7:,求裴波那契数列的前,20,项,该数列形式为:,1,,,1,,,2,,,3,,,5,,,8,。即,A(1)=1,,,A(2)=1,,,A(K+2)=A(K)+A(K+1),循环控制变量赋初值,及其他相关初始化语句,循环控制条件,循环体语句,改变循环控制变量的语句,项数,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 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 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 s,写出程序的输出结果,:,28,把,s = 0#,放在,For i,的前一行呢,?,程序设计举例,题目,1:,输出一行(,20,个)星号。,输出一列(,20,个)星号。,输出,5,行星号,每行,20,个。,输出,5,行三角形形式星号。,*,* *,* * *,* * * *,* * * * *,* * * * *,* * * *,* * *,* *,*,Print *,Print *,Print *,Print *,Print *,.,.,.,Print *,Print *,Print *,Print *,Print *,Print *,Print *,Print *“,Print *,Print *,Print *,Print *,Print *,Print *,Print *,请分析这些语句与,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,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,Print,Next K,*,* *,* * *,* * * *,* * * * *,* * * * *,* * * *,* * *,* *,*,*,* * *,* * * * *,* * * * * * *,* * * * * * * * *,*,* *,* * *,* * * *,* * * * *,For K=1 to 5,在第,K,行前输出,?,个空格,For X=1 to,?,Print *,;,Next 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 i,题目,2:,求,100,至,200,内所有素数(之和)。,循环控制变量赋初值,及其他相关初始化语句,循环控制条件,循环体语句,改变循环控制变量的语句,数值,X201?,X=101,X,是否是素数,?,如是,累加到,S,X=X+2,思考:什么情况下说明是素数,?,循环控制变量赋初值,及其他相关初始化语句,循环控制条件,循环体语句,改变循环控制变量的语句,分母,KX?,K=2,X=val(t1.text),如果,x,能被,k,整除,则强行退出,K=K+1,结论:,X=k,说明是素数,如何判断,X,是素数,?,K=2,X=Val( T1 . text ),Do while K X,If X mod K=0 Then Exit Do,K=K+1,Loop,Sqrt(X),循环控制变量赋初值,及其他相关初始化语句,循环控制条件,改变循环控制变量的语句,数值,x201?,X=101:s=0,如果是素数,则累加:,X=x+2,初始化语句,循环控制条件,循环体语句,改变循环控制变量的语句,分母,kx?,K=2,如果,x,能被,k,整除,则强行退出,K=k+1,S=0,For x=101 to 201 step 2,for k=2 to x-1,if x mod k=0 then exit for,next k,if x=k then s=s+x,(print,x),Next x,题目,3:,求,S=1!+2!+3!+7,!,循环控制变量赋初值,及其他相关初始化语句,循环控制条件,循环体语句,改变循环控制变量的语句,数值,X8?,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,的阶乘,循环控制变量赋初值,及其他相关初始化语句,循环控制条件,改变循环控制变量的语句,数值,X8?,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,解法一,:,每一项阶乘值独立求解,循环控制变量赋初值,及其他相关初始化语句,循环控制条件,改变循环控制变量的语句,数值,N8?,N=1:,S=1,:Sum=0,S=S*N,累加,:Sum=Sum+S,N=N+1,解法二,:,第,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,以下代码用于计算,的近似值,当级数第,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,的模作为校验值,准考证号最左边的一位为校验位。,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,本章到此结束,
展开阅读全文