资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,重庆医科大学计算机教研室,*,第,0,章循环控制结构,贺向前,2007,年,5,月,17,日星期四,重庆医科大学计算机教研室,主要内容:,For,循环语句,While,循环语句,DoLoop,循环语句,各种算法,重庆医科大学计算机教研室,循环语句,While,循环条件,语句块,Wend,Do While,循环条件,语句块,Loop,Do Until,循环条件,语句块,Loop,Do,语句块,Loop While,循环条件,Do,语句块,Loop Until,循环条件,For,变量,=,值,1,To,值,2,Step,步长,语句块,Next,变量,重庆医科大学计算机教研室,教师惩罚小学生抄写课文遍,Print ,重庆医科大学,“,Print ,重庆医科大学,“,Print ,重庆医科大学,“,Print ,重庆医科大学,三十行,重庆医科大学计算机教研室,5.3,各种循环语句的语法格式,5.3.2,WhileWend,循环,While,循环条件,语句块,Wend,While,循环条件,语句块(循环体),Wend,循环之后语句,True,False,重庆医科大学计算机教研室,5.3.2,WhileWend,循环,i=1,While i=30,Print ,重庆医科大学,i=i+1,Wend,i,i=30?,执行?,i=i+1,1,yes,yes,i=i+1=1+1=,2,2,yes,yes,i=i+1=2+1=,3,29,yes,yes,i=i+1=29+1=,30,30,yes,yes,i=i+1=30+1=,31,31,No,No,重庆医科大学计算机教研室,5.3,各种循环语句的语法格式,5.3.3,Do WhileLoop,循环,Do While,循环条件,语句块,Loop,While,循环条件,语句块(循环体),Loop,循环之后语句,True,False,重庆医科大学计算机教研室,5.3.3,Do,WhileLoop,循环,i=1,Do While i=30,Print ,重庆医科大学,i=i+1,Loop,i,i30,Print ,重庆医科大学,i=i+1,Loop,i,i30?,执行?,i=i+1,1,No,yes,i=i+1=1+1=,2,2,No,yes,i=i+1=2+1=,3,29,No,yes,i=i+1=29+1=,30,30,No,yes,i=i+1=30+1=,31,31,Yes,No,重庆医科大学计算机教研室,5.3,各种循环语句的语法格式,5.3.5,Do Loop While,循环,Do,语句块,Loop While,循环条件,While,循环条件,语句块(循环体),循环之后语句,False,True,重庆医科大学计算机教研室,5.3.5,Do,Loop While,循环,i=1,Do,Print ,重庆医科大学,i=i+1,Loop While i=30,i,i30,i,i30?,执行?,i=i+1,1,No,yes,i=i+1=1+1=,2,2,No,yes,i=i+1=2+1=,3,29,No,yes,i=i+1=29+1=,30,30,No,yes,i=i+1=30+1=,31,31,Yes,No,重庆医科大学计算机教研室,5.3,各种循环语句的语法格式,5.3.1,ForNext,循环,For,循环控制变量,=,初值,To,终值,Step,步长,语句块,1 ,Exit For,语句块,2 ,Next,循环控制变量,循环体,重庆医科大学计算机教研室,5.3.1,ForNext,循环,For,i = 1,To,30,Step,1,Print ,重庆医科大学,Next,i,i,i=30?,执行?,i=i+,步长,1,yes,yes,i=i+1=1+1=,2,2,yes,yes,i=i+1=2+1=,3,29,yes,yes,i=i+1=29+1=,30,30,yes,yes,i=i+1=30+1=,31,31,No,No,重庆医科大学计算机教研室, “循环控制变量”只能是一个数值型变量。,步长是循环控制变量的增量,其值可为正数或负数,如果省略不写,则默认步长为,1,。, 程序执行到,Next,语句时,循环控制变量,自动,加步长,然后再决定是否进入下一循环。,ForNext,循环说明:,重庆医科大学计算机教研室,如何判断,For,循环的次数呢?,当,For,循环运行时,如果,循环变量未被修改且未使用,Exit For,语句,,则循环的次数为,:,n=,int,(,终值,-,初值,)/,步长,+1),例如,:,For i=-3 to 20 step 4,的循环次数为多少呢?,n=int(20-(-3)/4+1)=6,例如,:要使,For i=-3 to _,x,_ step 4,的循环次数为,7,循环终值,x,应为多少呢?,7=int(x-(-3)/4+1),x,可以为:,21,,,22,,,23,,,24,通常解的个数与步长数相同。,也可求初值,重庆医科大学计算机教研室,无限循环,(infinite loop,死循环,),i=1,Do,s=,s+i,Loop while i=1000,解决办法,:,Ctrl+,或,VB,界面中的,”,结束,”,命令,重庆医科大学计算机教研室,累加和累乘(阶乘)算法,0,:,s=0,1,:,s=s+1,2,:,s=s+2,99:,s=s+99,100:,s=s+100,s=0,i=1,:,s=,s+i,i=2,:,s=,s+i,i=99:,s=,s+i,i=100:,s=,s+i,假定,N=100,重庆医科大学计算机教研室,累加和累乘(阶乘)算法,0,:,s=1,1,:,s=s*1,2,:,s=s*2,11:,s=s*11,12:,s=s*12,s=0,i=1,:,s=s*i,i=2,:,s=s*i,i=11:,s=s*i,i=12:,s=s*i,假定,N=12,重庆医科大学计算机教研室,用,ForNext,实现累加,Option Explicit,Private Sub,Form_Click,(),Dim i%, s&,For i = 1 To 100 Step 1,s = s + i,Next i,Print s=1+2+.+100=; s,End Sub,思考:,循环控制变量,i,的值为多少?为什么?,重庆医科大学计算机教研室,用,WhileWend,实现累加,Option Explicit,Private Sub,Form_Click,(),Dim i%, s&,i = 1,While i = 100,s = s + i,i = i + 1,Wend,Print s=1+2+.+100=; s,End Sub,思考:,循环控制变量,i,的值为多少?为什么?,重庆医科大学计算机教研室,用,DoLoop,实现累加,Option Explicit,Private Sub,Form_Click,(),Dim i%, s&,i = 1,Do While i = 100,s = s + i,i = i + 1,Loop,Print s=1+2+.+100=; s,End Sub,思考:,循环控制变量,i,的值为多少?为什么?,重庆医科大学计算机教研室,用,DoLoop,实现累加,Option Explicit,Private Sub,Form_Click,(),Dim i%, s&,i = 1,Do,s = s + i,i = i + 1,Loop While i 100,s = s + i,i = i + 1,Loop,Print s=1+2+.+100=; s,End Sub,思考:,循环控制变量,i,的值为多少?为什么?,重庆医科大学计算机教研室,用,DoLoop,实现累加,Option Explicit,Private Sub,Form_Click,(),Dim i%, s&,i = 1,Do,s = s + i,i = i + 1,Loop Until i 100,Print s=1+2+.+100=; s,End Sub,思考:,循环控制变量,i,的值为多少?为什么?,重庆医科大学计算机教研室,用,ForNext,实现累乘,Option Explicit,Private Sub,Form_Click,(),Dim i%, s&,s = 1,For i = 1 To 12,s = s * i,Next i,Print s=1*2*.*12=; s,End Sub,思考:,循环控制变量,i,的值为多少?为什么?,重庆医科大学计算机教研室,用,WhileWend,实现累乘,Option Explicit,Private Sub,Form_Click,(),Dim i%, s&,s = 1: i = 1,While i 13,s = s * i,i = i + 1,Wend,Print s=1*2*.*12=; s,End Sub,思考:,循环控制变量,i,的值为多少?为什么?,重庆医科大学计算机教研室,用,DoLoop,实现累乘,Option Explicit,Private Sub,Form_Click,(),Dim i%, s&,s = 1: i = 1,Do While i = 13,s = s * i,i = i + 1,Loop,Print s=1*2*.*12=; s,End Sub,思考:,循环控制变量,i,的值为多少?为什么?,重庆医科大学计算机教研室,用,DoLoop,实现累乘,Option Explicit,Private Sub,Form_Click,(),Dim i%, s&,s = 1: i = 1,Do,s = s * i,i = i + 1,Loop While i = 13,Print s=1*2*.*12=; s,End Sub,思考:,循环控制变量,i,的值为多少?为什么?,重庆医科大学计算机教研室,累加和累乘(阶乘)算法,0,:,s=0,1,:,s=s+100,2,:,s=s+99,99:,s=s+2,100:,s=s+1,s=0,i=100,:,s=,s+i,i=99,:,s=,s+i,i=2:,s=,s+i,i=1:,s=,s+i,假定,N=100,重庆医科大学计算机教研室,累加和累乘(阶乘)算法,0,:,s=1,1,:,s=s*12,2,:,s=s*11,11:,s=s*2,12:,s=s*1,s=0,i=12,:,s=s*i,i=11,:,s=s*i,i=2:,s=s*i,i=1:,s=s*i,假定,N=12,重庆医科大学计算机教研室,用,ForNext,实现累加,Option Explicit,Private Sub,Form_Click,(),Dim i%, s&,For i = 100 To 1 Step -1,s = s + i,Next i,Print s=1+2+.+100=; s,End Sub,思考:,循环控制变量,i,的值为多少?为什么?,重庆医科大学计算机教研室,用,ForNext,实现累乘,Option Explicit,Private Sub,Form_Click,(),Dim i%, s&,s = 1,For i = 12 To 1 Step -1,s = s * i,Next i,Print s=1*2*.*12=; s,End Sub,思考:,循环控制变量,i,的值为多少?为什么?,重庆医科大学计算机教研室,用,DoLoop,实现累加,Option Explicit,Private Sub,Form_Click,(),Dim i%, s&,i = 100,Do While i 0,s = s + i,i = i - 1,Loop,Print s=1+2+.+100=; s,End Sub,思考:,循环控制变量,i,的值为多少?为什么?,重庆医科大学计算机教研室,用,DoLoop,实现累乘,Option Explicit,Private Sub,Form_Click,(),Dim i%, s&,s = 1: i = 12,Do While i 0,s = s * i,i = i - 1,Loop,Print s=1*2*.*12=; s,End Sub,思考:,循环控制变量,i,的值为多少?为什么?,重庆医科大学计算机教研室,例,6-1,:找出并显示出,100,900,间的所有是的倍数的数。,i,If i mod 3=0 then print i,100,If 100 mod 3=0 then print 100,101,If 101 mod 3=0 then print 101,899,If 899 mod 3=0 then print 899,900,If 900 mod 3=0 then print 900,重庆医科大学计算机教研室,例,6-1,:找出并显示出,100,900,间的所有是的倍数的数。,Private Sub,Form_Click,(),Dim i%,For i = 100 To 900,If i Mod 3 = 0 Then Print i,Next i,End Sub,Private Sub,Form_Click,(),Dim i%,For i = 900 To 100 Step -1,If i Mod 3 = 0 Then Print i,Next i,End Sub,重庆医科大学计算机教研室,分行显示技术,Option Explicit,Private Sub,Form_Click,(),Dim i%, c%,For i = 100 To 900,If i Mod 3 = 0 Then,Print i,;,c = c + 1,If c Mod 20 = 0 Then Print,End If,Next i,End Sub,统计,3,的倍数的个数,分号表示满足条件的,i,都显示在一行上,重庆医科大学计算机教研室,分行显示技术,例,6-2,:显示所有的两位数,每一行显示个数,Option Explicit,Private Sub,Form_Click,(),Dim i%, c%,For i = 10 To 99,Print i;,c = c + 1,If c Mod 10 = 0 Then Print,Next i,End Sub,重庆医科大学计算机教研室,分行显示技术,Option Explicit,Private Sub,Form_Click,(),Dim i%, j%,For i = 1 To 9,Print Tab(15 - i),;,For j = 1 To 2 * i - 1,Print *,;,Next j,Print,Next i,End Sub,例,6-3,:显示各种星号三角形,重庆医科大学计算机教研室,Option Explicit,Private Sub,Form_Click,(),Dim i As Integer, sum As Integer,sum = 0,For i = 2 To 100 Step 2,sum =,sum,+ i,Next i,Print sum=; sum,End Sub,例,6-4,:计算,100,以内(含,100,)偶数的累加和。,重庆医科大学计算机教研室,例,6-5,:求两个正整数,m,和,n,的最大公约数。程序界面如图所示。,分析,:求两个正整数的最大公约数有许多方法,其中,采用,辗转相除,的算法为:,已知两个正整数,m,、,n,,且,m,n,;,m,除以,n,得余数,r,;,若,r,= 0,,则,n,为最大公约数,算法结束;否则执行步骤;,将,n,赋值给,m,,,r,赋值给,n,,重复步骤。,重庆医科大学计算机教研室,Option Explicit,Private Sub Command1_Click(),Dim m As Integer, n As Integer, r As Integer,m = Val(Text1.Text),n = Val(Text2.Text),r = m Mod n,While r 0,m = n,n = r,r = m Mod n,Wend,Label3.Caption = ,最大公约数为,: & n,End Sub,最大公约数,Msgbox,“,最小公倍数为:”,& val(text1)*val(text2)/n,Msgbox,“,最小公倍数为:”,& m*n ?,重庆医科大学计算机教研室,最小公倍数,-,方法,2,Private Sub Command1_Click(),Dim m%, n%, r%, s&,m = Val(Text1.Text),n = Val(Text2.Text),If m n Then r = m: m = n: n = r,s = m * n,For i = n To s,If (i Mod n = 0) And (i Mod m = 0) Then,Exit For,End If,Next i,Label3.Caption = ,最小公倍数为,: & i,End Sub,重庆医科大学计算机教研室,例,6-6,:输入一个正整数,m,,并判断,m,是否为质数,(,素数,),。,素数:除能被和本身整除外,不能被其他数整除的数。,方法,1,:,步骤,操作,1,假定,m,是质数, T=true,2,If m mod 2=0 then T=False,3,If m mod 3=0 then T=False,m-1,If m mod m-1=0 then T=False,m,If T=True then “m is a prime”,重庆医科大学计算机教研室,输入一个正整数,m,,并判断,m,是否为质数。,素数:除能被和本身整除外,不能被其他数整除的数。,方法,2,:,步骤,操作,1,统计,m,除以,2,m-1,间的数除不净的个数,2,If m mod 20 then c=c+1,3,If m mod 3 0 then c=c+1,m-1,If m mod m-1 0 then c=c+1,m,If c=m-2 then “m is a prime”,重庆医科大学计算机教研室,用,ForNext,语句实现,(方法,1,),Option Explicit,Private Sub,Form_Click,(),Dim m&, i%, T As Boolean,m =,Val(InputBox(input,M),T = True,For i = 2 To m - 1,If m Mod i = 0 Then,T = False,Exit For,End If,Next i,If T = True Then,Print m & is a prime!,Else,Print m & is not a prime!,End If,End Sub,重庆医科大学计算机教研室,用,ForNext,语句实现,(方法,2,),Option Explicit,Private Sub,Form_Click,(),Dim m&, i%, c%,m =,Val(InputBox(input,M),For i = 2 To m - 1,If m Mod i 0 Then c = c + 1,Next i,If c = m - 2 Then,Print m & is a prime!,Else,Print m & is not a prime!,End If,End Sub,重庆医科大学计算机教研室,问题:,使用,DoLoop,循环语句如何实现素数的判断?,如何找出并显示,1000-9999,间的所有素数?(,Print,方法每一行显示,10,个数),如何产生一个随机整数并判断其是否是一个素数?,重庆医科大学计算机教研室,例,:6-7,用公式: 计算,的近似值,直到最后一项的绝对值小于 为止。,算法:累加,s=,s+t,i,t,i,=f/(2*n-1),f=-f,f=1,重庆医科大学计算机教研室,例,6-7,用公式: 计算,的近似值,直到最后一项的绝对值小于 为止。,Option Explicit,Private Sub,Form_Click,(),Dim s#, i#, f#,ti,#,i = -1: f = -1,Do,i = i + 2,f = -f,ti,= f / i,s = s +,ti,Loop Until,Abs(ti,) 10 (-6),Print 4 * s,End Sub,Option Explicit,Private Sub,Form_Click,(),Dim s#, n#, f#,ti,#, fm#,n = 1: f = 1,Do,fm = 2 * n - 1,ti,= f / fm,s = s +,ti,f = -f,n = n + 1,Loop Until,Abs(ti,) ,Asc(Z,) Then p = 65,Print,Chr(p,);,p = p + 1,Next j,Print,Next i,End Sub,重庆医科大学计算机教研室,例,6-9,:进制转换。任意输入一个十进制整数,单击“转换”按钮后,将该数转换为指定进制的数。程序界面,如图所示。,重庆医科大学计算机教研室,程序代码如下:,Option Explicit,Private Sub Command1_Click(),Dim num As Integer, base As Integer, r As Integer,num = Val(Text1.Text),Text2.Text = ,Select Case True,Case Option1.Value,base = 2,Case Option2.Value,base = 8,End Select,Do While num 0,r = num Mod base,num =,num, base,Text2.Text =,LTrim(Str(r,) & Text2.Text,Loop,End Sub,注意连接的顺序:,a$=a$ & b&,a$=b$ & a$,功能上有什么区别?,重庆医科大学计算机教研室,例,6-10,:随机产生,10000,个,1,,,4,间的随机整数,统计,1,、,2,、,3,、,4,各数字出现的次数。,Dim N%, c1%, c2%, c3%, c4%, i%,i = 1,Do While i max Then max = N,If N min Then min = N,sum =,sum,+ N,Next i,mean = sum / 20,Print max, min, mean,End Sub,重庆医科大学计算机教研室,例,6-12,:迭代求,a,的立方根。,X,i+1,=1/3*(2*,x,i,+a,/x,i,),Private Sub,Form_Click,(),Dim x1#, x2#, a#,x2 = 1,a =,Val(InputBox(input,a),Do Until Abs(x2 - x1) 0.00001,x1 = x2,x2 = 2 * x1 / 3 + a / (3 * x1 *,x1,),Loop,MsgBox,a & ,的立方根是:, & x2,End Sub,重庆医科大学计算机教研室,总结,For,循环语句,While,循环语句,DoLoop,循环语句,各种算法,重庆医科大学计算机教研室,Thanks for your attendance,重庆医科大学计算机教研室,
展开阅读全文