版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、4.4 循环(xnhun)结构 n 计算机最擅长的功能之一就是(jish)(jish)按规定的条件,重复执行某些操作。 n VBVB中提供了两种类型的循环语句:n 1.1.计数循环语句-循环次数固定;n 2.2.条件型循环语句-循环次数不固定,由循环条件决定。第1页/共145页第一页,共146页。4.4 循环(xnhun)结构 nVB中提供(tgng)的循环语句:n1.循环次数固定:For循环语句n2.循环次数不固定的循环n(1)While循环语句n(2)Do Loop循环语句:循环次数不固定n 第2页/共145页第二页,共146页。4.4 循环(xnhun)结构4.4.1 For循环循环(x
2、nhun)语句语句 4.4.2 While循环循环(xnhun)语语句句 4.4.3 DoLoop循环循环(xnhun)语句语句 4.4.4 循环循环(xnhun)嵌套嵌套 第3页/共145页第三页,共146页。认识(rn shi)循环结构1问题(wnt):在窗体上显示10行*(每行10个*)直接用顺序结构实现:Form1.Print String(10,*)Form1.Print String(10,*)Form1.Print String(10,*)Form1.Print String(10,*)Form1.Print String(10,*)Form1.Print String(10,*
3、)Form1.Print String(10,*)Form1.Print String(10,*)Form1.Print String(10,*)Form1.Print String(10,*)用循环结构(jigu)实现:Dim n as Integerfor n=1 to 10 Form1.Print String(10,*)next n第4页/共145页第四页,共146页。前例(qinl)循环结构分析:用循环结构实现(shxin): Dim n as Integer n是循环控制变量 for n=1 to 10 n的初值1,终值10,每循环1次增加1 Form1.Print String(
4、10,*) 循环体语句 next n 循环结束第5页/共145页第五页,共146页。 For循环语句(yj) 格式For For 循环(xnhun)(xnhun)变量初值 ToTo 终值 Step Step 步长 循环(xnhun)(xnhun)体语句块Next Next 循环(xnhun)(xnhun)变量例: :Dim n as IntegerDim n as Integerfor n=1 for n=1 toto 10 step 1 10 step 1 Print String(10, Print String(10,* *)next nnext n T 循环变量终值 语句块 循环变量=
5、循环变量+步长 F 循环变量=初值 Next 的下一语句 第6页/共145页第六页,共146页。 For循环(xnhun)语句使用注意事项 For For 循环(xnhun)(xnhun)变量初值 ToTo 终值 Step Step 步长 循环(xnhun)(xnhun)体语句块Next Next 循环(xnhun)(xnhun)变量 注意:1. 循环(xnhun)变量必须为数值型。 2. Step 步长缺省为1.例:Dim n as Integerfor n=1 to 10 Print String(10,*)next n第7页/共145页第七页,共146页。For循环(xnhun)语句的理
6、解 Dim n as Integer n是循环控制变量for n=1 to 10 step 1 n的初值1,终值10 Print String(10,*) 循环体语句(yj)next n 循环体结束u理解:u对于变量n=1,2,3.到不超过10,分别执行:u Print String(10,*)u循环体结束,产生下一个n( n=n+步长)u注意:u(1)循环全部(qunb)执行完后, 循环变量的值为超过终值的值(如此处循环结束时n=11)u(2) 如果循环变量的初值一开始就超过终值, 则一次也不执行循环体第8页/共145页第八页,共146页。说明:循环(xnhun)变量的作用有2个: 之一:控
7、制循环次数(csh),如前例 之二:不仅用于控制循环次数(csh),而且在循环体中使用,即参与运算,这种情况更多见。第9页/共145页第九页,共146页。循环变量的作用之一:控制(kngzh)循环次数for n=11 to 20 step 1 Print String(10,*)next nfor n=1 to 20 step 2 Print String(10,*)next nfor n=10 to 1 step -1 Print string(10, *)next n对n=10,9,8.到1, 分别执行:.循环(xnhun)结束后n的值?循环次数(csh)的计计算:循环次数(csh) 1(
8、步长初值终值Int循环次数=int(20-1)/2+1)=10循环次数=int(20-11)/1+1)=10循环次数=int(1-10)/(-1)+1)=10第10页/共145页第十页,共146页。循环变量的作用(zuyng)之一:控制循环次数循环语句的3种情况:1.步长0 : 初值终值:最多见,循环变量从初值逐渐增加最后变化(binhu)为终值2.步长终值循环变量从初值逐渐减少变化(binhu)为终值3. 如步长为0-死循环(永久循环): 按crel+break终止死循环 第11页/共145页第十一页,共146页。例:如下(rxi)程序会输出什么?for n=1 to 10 step 1 P
9、rint n; String(10,*)next n循环变量的作用(zuyng)之二:在循环体中使用例:For n = 1 To 10 Step 1 Print n; String(n, *)Next n仅用于控制(kngzh)循环次数不仅用于控制循环次数,还在循环体中使用第12页/共145页第十二页,共146页。For循环(xnhun)举例 问题(wnt): 求:s=1+2+3+4+5+100 分析:用循环实现 1.求和结果存放在变量s中,s的初值应: s=0 2.循环控制变量用i表示,i从1,2,3,100,变化到100 3.求和的过程就是让变量i从1开始, 2,3.到100,要循环(反复
10、)执行: s=s+i第13页/共145页第十三页,共146页。问题:循环结束(jish)后,i的值是多少?For循环(xnhun)举例 问题(wnt): 求:s=1+2+3+4+5+100 Dim i%, s% i是循环控制变量,s结果变量 s=0 初始值0,作为累加器 (清零) for i=1 to 100 step 1 s=s+i next i Form.Print 1到100累加和=; s101第14页/共145页第十四页,共146页。For循环(xnhun)举例 问题: 求:s=1+2+3+4+5+100 Dim i%, s% i是循环控制变量,s结果( ji gu)变量 s=0 初始
11、值0,作为累加器 (清零) for i=1 to 100 step 1 s=s+i next i Form.Print 1到100累加和=; s改成(i chn):for i=100 to 1 step -1 s=s+inext i第15页/共145页第十五页,共146页。For循环(xnhun)课堂练习1问题分析:对于(duy)变量 i=1,3,5,.到不超过100, 分别执行: s=s+i next in问题:计算(j sun)1100的奇数和 n求:s=1+3+5+99第16页/共145页第十六页,共146页。Dim i%, s% i是循环(xnhun)控制变量,s结果变量s=0 初始值
12、,作为累加器for i=1 to 100 step 2 s=s+inext iPrint 1到100奇数和=; s结束(jish)后i的值?n问题(wnt):计算1100的奇数和 n求:s=1+3+5+99For循环课堂练习1答案101第17页/共145页第十七页,共146页。For循环(xnhun)课堂练习2n问题:计算1100之间的奇数(j sh)的倒数的和n 求: s=1/1+1/3+1/5+.+1/99 问题分析(fnx):对于变量 i=1,3,5,.到不超过100, 分别执行: s=s+1/i next I 特别注意:s是带小数的!第18页/共145页第十八页,共146页。Dim i
13、%, s! i是循环(xnhun)控制变量,s结果变量,单精度型s=0 初始值,作为累加器for i=1 to 100 step 2 s=s+1/inext iPrint 1到100奇数和=; sFor循环(xnhun)课堂练习2答案n问题:计算1100之间的奇数(j sh)的倒数的和n 求: s=1+1/3+1/5+.+1/99第19页/共145页第十九页,共146页。For循环(xnhun)课堂练习3n问题(wnt): 求: n s=1-1/3+1/5-1/7+.+1/99n 问题分析:n 正负号交叉问题:定义一个用于处理符号的控制变量变量sign,初始值为+1,再随着循环的进行,改为-1
14、,再改为+1,再改为-1,改变的方法:sign=-signn 对于变量 i=1,3,5,.到不超过100, 分别(fnbi)执行:n s=s+sign/In sign=-signn next In 特别注意:s是带小数的!第20页/共145页第二十页,共146页。Dim i%, s! i是循环控制变量,s结果(ji gu)变量,有小数,单精度Dim sign% 存+1 或-1, 是控制变量sign=1s=0 初始值,作为累加器for i=1 to 100 step 2 s=s+sign/i sign=-signnext iPrint s=; sFor循环(xnhun)课堂练习3答案n问题(wn
15、t):求: n s=1-1/3+1/5-1/7+.+1/99第21页/共145页第二十一页,共146页。For循环(xnhun)课堂练习4n问题(wnt):编写一个程序 求15!n问题分析(fnx):n1.m=1*2*.*15n2.注意15!超过1012,应该用单精度或双精度型n3.参考:求:s=1+2+3+4+5+100nDim i%, s% i是循环控制变量,s结果变量ns=0 初始值,作为累加器nfor i=1 to 100 step 1n s=s+innext inForm1.Print 1到100累加和=; s第22页/共145页第二十二页,共146页。For循环(xnhun)课堂练
16、习4答案n问题:编写一个(y )程序 求15!Dim i%, m# 为什么用双精度(jn d)?m = 1 为什么=1?For i = 1 To 15 Step 1 m = m * iNext iForm1.Print 15!=; m第23页/共145页第二十三页,共146页。表 3.1 基本(jbn)数据类型数据类型数据类型关键字关键字类型符类型符前缀前缀占字节数占字节数范范 围围字节型字节型Byte无无byt10255逻辑型逻辑型Boolean无无bln2True与与False整型整型Integer%int2-3276832767长整型长整型Long&lng4-2147483648
17、2147483647单精度型单精度型Single!sng4-3.402823E383.402823E38双精度型双精度型Double#dbl8-1.79769313486232D3081.79769313486232D308货币型货币型Currencycur8-922337203685477.5808922337203685477.5907日期型日期型Date无无dtm801,01,010012,31,9999 0:00:0023:59:59字符型字符型String$str与串长有关与串长有关065535个字符个字符对象型对象型Objiect无无obj4任何对象引用任何对象引用变体型变体型Va
18、riant无无vnt据分配确定据分配确定第24页/共145页第二十四页,共146页。参考参考(cnko)程序:求程序:求15!Dim i%, m! m = 1 为什么为什么=1?For i = 1 To 15 Step 1 m = m * iNext iForm1.Print 15!=; mFor循环循环(xnhun)课堂练习课堂练习5n问题(wnt):参考求 15! 的程序,编写一个程序,要求能求任意数 n!第25页/共145页第二十五页,共146页。Dim i%, m#, n%n=inputbox(“输入输入(shr)n”)m = 1For i = 1 To n Step 1 m = m
19、* iNext iMsgBox n & != & mFor循环循环(xnhun)课堂练习课堂练习5答案答案n问题(wnt):参考求 15! 的程序,编写一个程序,要求能求任意数 n!第26页/共145页第二十六页,共146页。For循环循环(xnhun)课堂练习课堂练习6n问题:求n至m之间自然数的累加n参考求s=1+2+3+4+5+100的程序,做适当修改(xigi),使程序能对任意2个数n到m之间的自然数累加参考程序:求s=1+2+3+4+5+100Dim i%, s% i是循环控制变量,s结果(ji gu)变量s=0 初始值0,作为累加器 (清零)for i=1 to 1
20、00 step 1 s=s+inext iPrint 1到100累加和=; s第27页/共145页第二十七页,共146页。For循环循环(xnhun)课堂练习课堂练习6答案答案n问题:求n至m之间自然数的累加n参考(cnko)求s=1+2+3+4+5+100的程序,做适当修改,使程序能对任意2个数n到m之间的自然数累加Dim i%, sum%,n%, m%n=inputbox(“输入输入(shr)n”)m=inputbox(“输入输入(shr)m”)sum = 0For i = n To m Step 1 sum = sum + iNext iMsgBox n & 至至 & m
21、 &累加累加= & sum 第28页/共145页第二十八页,共146页。注意存放(cnfng)累加与连乘的变量初值是不同的!累加初值为0, 连乘初值为1Dim i%, sum%,n%n=inputbox(“输入输入(shr)n”)sum = 0For i = 1 To n Step 1 sum = sum + iNext iMsgBox sum Dim i%, m#, n%n=inputbox(“输入输入(shr)n”)m = 1For i = 1 To n Step 1 m = m * iNext iMsgBox n&!= & m第29页/共145页第二十九页
22、,共146页。 这样(zhyng)有什么问题?Dim i%, sum%,n%n=inputbox(“输入输入(shr)n”)For i = 1 To n Step 1 sum = 0 sum = sum + iNext iMsgBox sum Dim i%, m#, n%n=inputbox(“输入输入(shr)n”)For i = 1 To n Step 1 m = 1 m = m * iNext iMsgBox n&!= & m错误1第30页/共145页第三十页,共146页。 Dim i%, sum%,n%n=inputbox(“输入输入(shr)n”)sum = 0For
23、 i = 1 To n Step 1 sum = sum + i MsgBox sum Next iDim i%, m#, n%n=inputbox(“输入输入(shr)n”)m = 1For i = 1 To n Step 1 m = m * i MsgBox n&!= & mNext i这样(zhyng)有什么问题?错误2第31页/共145页第三十一页,共146页。 Dim i%, sum%sum = 0For i = 1 To 100 Step 1 sum = sum + i i=1 Next iMsgBox sum 这样(zhyng)有什么问题?错误(cuw)3for循
24、环(xnhun)变量的值会自动修改不要在for循环(xnhun)体中给循环(xnhun)变量赋值, 第32页/共145页第三十二页,共146页。n编写程序,从键盘上任意(rny)输入10个数, 输出这10个数的累加值Dim i%, sum%, a%sum = 0For i = 1 To 10 Step 1 a=inputbox(请输入请输入(shr)第第 & i & 个数个数:) sum = sum + aNext iMsgBox 合计合计= & sum 怎样(znyng)输出平均值?For循环课堂练习循环课堂练习7第33页/共145页第三十三页,共146页。n编写程序
25、,从键盘上任意输入(shr)10个数, 输出这10个数的累加值,平均值For循环循环(xnhun)课堂练习课堂练习8Dim i%, sum%, a%, aver!sum = 0For i = 1 To 10 Step 1 a = InputBox(请输入第 & i & 个数:) sum = sum + aNext iaver = sum / 10MsgBox 合计(hj)= & sum & ;平均= & aver第34页/共145页第三十四页,共146页。 以上例子都是在一个(y )例子的基础之上扩充功能或者小改功能得到的,都有类似之处 以下讲解FOR循
26、环的其它例子第35页/共145页第三十五页,共146页。For循环(xnhun)举例1 例: 编写程序,在窗体上显示(xinsh)ASCII码表中ASCII码的值为32至126的字符(即可见字符),显示(xinsh)如图示,每行显示(xinsh)5个。第36页/共145页第三十六页,共146页。For循环(xnhun)举例1n分析1:已经知道一个字符的ASCII码值,求这个字符是什么字符,需要用函数: chr(N) n chr(N) 得到ASCII码为N的字符 n例如(lr):n chr(32)= chr(48)=0n chr(65)=A chr(97)=an chr(13)=回车第37页/共
27、145页第三十七页,共146页。n分析2:n要在窗体上输出ASCII码值为32的字符,如图,可以用以下(yxi)语句:nDim i%ni = 32nForm1.Print Chr(i); =; in要在窗体上输出ASCII码值为33的字符,可以用以下(yxi)语句:nDim i%ni = 33nForm1.Print Chr(i); =; i第38页/共145页第三十八页,共146页。问题:如何(rh)输出ASCII码的值为32至126的字符?第39页/共145页第三十九页,共146页。For循环(xnhun)举例1n分析3:要在窗体上输出ASCII码值为32到ASCII码值为126的字符,可
28、以用一个固定次数(csh)的循环nDim i%nFor i=32 to 126 step 1n Form1.print chr(i);=;inNext i问题(wnt):只显示在一列上,达不到要求!第40页/共145页第四十页,共146页。For循环(xnhun)举例n分析4:在一行显示多个(du )输出项nDim i%nFor i=32 to 126 step 1n Form1.print chr(i);“=”;i,nNext i问题:都显示在一行(yxng)上,达不到要求!怎么才能每行显示5个?第41页/共145页第四十一页,共146页。For循环(xnhun)举例n分析5:增加一个变量a
29、%,用于记录(jl)输出的个数,a的初值为0,每输出1个项,a增加1,当a=5时,输出一个换行,换行后将a重新设置为0 n如何换行? Private Sub Form_Click()Dim i%, a%a = 0For i = 32 To 126 Step 1 Form1.Print Chr(i); =; i, a = a + 1 If a = 5 Then Form1.Print a = 0 End IfNext iEnd SubForm1.print第42页/共145页第四十二页,共146页。For循环(xnhun)举例1:结果Private Sub Form_Click()Dim i%,
30、 a%a = 0For i = 32 To 126 Step 1 Form1.Print Chr(i); =; i, a = a + 1 If a = 5 Then Form1.Print a = 0 End IfNext iEnd Sub第43页/共145页第四十三页,共146页。For循环(xnhun)举例1分析6:输出也可以要求指定(zhdng)输出项之间的间隔,例如要求用6个空格分隔2个输出项 Form1.Print Spc(6);Private Sub Form_Click()Dim i%, a% a=0 清零(qn ln)For i = 32 To 126 step 1 Form1
31、.Print Chr(i); =; i; Spc(6); a = a + 1 显示个数加1 If a = 5 Then 够5个了 Form1.Print 换行 a = 0 清零(qn ln) End IfNext iEnd Sub第44页/共145页第四十四页,共146页。 输出(shch)也可以要求指定输出(shch)项之间的间隔,例如要求用3个空格分隔2个输出(shch)项 Form1.Print Spc(6);第45页/共145页第四十五页,共146页。For循环(xnhun)举例2 例 :参考(cnko)前例, 输出100至300之间可以被3整除或被5整除的数 , 两数间空4个空格,每
32、8个数换行 第46页/共145页第四十六页,共146页。For循环(xnhun)举例2n分析:n1.判断一个数i能被3整除(zhngch)或被5整除(zhngch)的条件表达式:n i mod 3=0 OR i mod 5=0n2.输出100至300之间可以被3整除(zhngch)或被5整除(zhngch)的数 ,两数间空4个空格nDim i%, nFor i = 100 To 300 step 1n if i mod 3=0 OR i mod 5=0 then n Form1.Print i; Spc(4); n end ifnNext i问题(wnt):每8个数换行 ?第47页/共145页
33、第四十七页,共146页。Dim i%, a%a=0For i = 100 To 300 step 1 if i mod 3=0 OR i mod 5=0 then Form1.Print i; Spc(4); a = a + 1 If a = 8 Then Form1.Print a = 0 End If end ifNext i 例 :参考前例, 输出(shch)100至300之间可以被3整除或被5整除的数 , 两数间空4个空格,每8个数换行 第48页/共145页第四十八页,共146页。n例 :参考(cnko)前例, 输出100至300之间可以被3整除或被5整除的数 , 两数间空4个空格,每
34、8个数换行 ,结果:第49页/共145页第四十九页,共146页。功能扩充:如果要求最后输出(shch)符合条件的数据个数,怎么办?n处理:增加(zngji)一个用于统计符合条件的数据个数的变量n%,初值为0,每输出一个符合条件的数据,n增加(zngji)1,循环结束后输出n的值第50页/共145页第五十页,共146页。例 输出(shch)100至300之间可以被3整除的数 , 每8个数换行, 最后输出(shch)个数Dim i%, a%, n% n是用于统计(tngj)个数的变量, 称为计数器a=0: n=0 清零For i = 100 To 300 step 1 if i mod 3=0 O
35、R i mod 5=0 then Form1.Print i; Spc(4); n=n+1 计数 加1 a = a + 1 If a = 8 Then Form1.Print a = 0 End If end if Next iForm1.Print 被3或5整除的个数=; n第51页/共145页第五十一页,共146页。思考:如果要求显示这些数的合计(hj)和平均?第52页/共145页第五十二页,共146页。For循环举例(j l)3 水仙花数问题第53页/共145页第五十三页,共146页。For循环举例(j l)3 水仙花数问题 153 =13 + 53 + 33 水仙花数是指每个位上的数字
36、(shz)的 3 次幂之和等于它本身。问题: 输出所有3位数中的水仙花数第54页/共145页第五十四页,共146页。For循环举例(j l)3 水仙花数问题分析(fnx):1.输出所有3位数中的水仙花数即找出100999之间的水仙花数For i=100 to 999 step 1 if end ifNext i第55页/共145页第五十五页,共146页。分析:2.如何(rh)判断一个数 i是水仙花数?假如i的百位数是a,十位数是b,个位数是c,则:For i=100 to 999 step 1 if i=a3+b3+c3 then form1.print I, end ifNext i问题:如
37、何(rh)能求出一个3位数i的百位数a,十位数b,个位数c?第56页/共145页第五十六页,共146页。分析:3.问题:如何(rh)能求出一个3位数i的百位数a,十位数b,个位数c?假设 i=123,则:百位数a: a = Int(i / 100)十位数b: b = Int(i - 100 * a) / 10)个位数c: c = i Mod 10 第57页/共145页第五十七页,共146页。For循环举例(j l)3:输出所有3位数中的水仙花数Dim i%, a%, b%, c% 百位数,十位数,个位数 For i = 100 To 999 Step 1 a = Int(i / 100) b
38、= Int(i - 100 * a) / 10) c = i Mod 10 If a 3 + b 3 + c 3 = i Then Form1.Print i, End If Next i第58页/共145页第五十八页,共146页。For循环(xnhun)举例4 例 输入两个(lin )整数, 输出最大公约数.第59页/共145页第五十九页,共146页。For循环(xnhun)举例4:求最大公约数. 分析1: 直观的来看: 两个整数a,b (例如:3, 7),最大公约数应该是1 两个整数a,b (例如:24, 4),最大公约数应该是4 两个整数a,b (例如:12, 6),最大公约数应该是6
39、即:两个整数a,b 的最大公约数应该是在二者中那个(n ge)小的数与1之间。如果用min存放a和b中那个(n ge)小的数:a,b的最大公约数范围(fnwi)是从min 到1For i = min To 1 Step -1 If Then MsgBox 最大公约数= & i Exit For 跳出For循环(终止循环) End IfNext i第60页/共145页第六十页,共146页。For循环(xnhun)举例4:求两数的最大公约数. 分析2:如何判断(pndun)数i是a,b的最大公约数? 如果数i是a,b的最大公约数,则应该有: a Mod i = 0 And b Mod i
40、= 0 第61页/共145页第六十一页,共146页。For循环(xnhun)举例4 分析: 2.算法 (1)输入a,b (2) 把a,b中小者存放到min中 (3)循环:从i=min 到 1,每次减1,一个个i判断(pndun)能否同时整除a,b,如果能,此时i的值就是a,b的最大公约数,否则,继续判断(pndun)下一个I,第62页/共145页第六十二页,共146页。For循环举例(j l)4:程序 例 输入两个整数, 输出(shch)最大公约数. Dim a%, b%, min%, i% a = Val(InputBox(输入a) b = Val(InputBox(输入b) If a b
41、Then min = a Else min = b 小的数存入x For i = min To 1 Step -1 If a Mod i = 0 And b Mod i = 0 Then MsgBox 最大公约数= & i Exit For 跳出For循环(终止循环) End If Next i第63页/共145页第六十三页,共146页。For循环(xnhun)举例5 例: 求两数的最小公倍数?第64页/共145页第六十四页,共146页。For循环(xnhun)举例5:求两数的最小公倍数 分析1: 两个整数a,b (例如:12,4),最小公倍数是12,是二者中大者 两个整数a,b (例
42、如:3,7),最小公倍数是21,是二者的乘积(chngj) 两个整数a,b (例如:12,8),最小公倍数是24 所以:如果将其中大的数存入max,则a,b的最小公倍数范围是从?到?a,b的最小公倍数范围(fnwi)是从max到a*bfor i=max to a*b step 1 ?next i第65页/共145页第六十五页,共146页。For循环(xnhun)举例5:求两数的最小公倍数 分析2:如何判断(pndun)数i是a,b的最小公倍数? 如果数i是a,b的最小公倍数,则应该有: I mod a=0 and I mod b=0a,b的最小公倍数范围(fnwi)是从max到a*b第66页/
43、共145页第六十六页,共146页。For循环举例(j l):仿照例子 参考以下求最小公倍数的程序写出求最大公约数的程序. dim a%,b%,x%,i% a=inputbox(输入a) b=inputbox(输入b) if a b Then max = a Else max = b For i = max To a * b Step 1 If i Mod a = 0 And i Mod b = 0 Then MsgBox a & 和 & b & 的最小公倍数= & i Exit For 跳出For循环(终止循环) End If Next i第68页/共145页第
44、六十八页,共146页。For循环(xnhun)举例6 判断(pndun)一个数是否是素数.第69页/共145页第六十九页,共146页。For循环举例(j l)6: 判断一个数是否是素数. 分析1:根据数学知识:判断一个自然数a是否是素数? 对于(duy)a,用 2-a-1之间的所有自然数一一去除a, 看是否存在一个数i,能够整除a,如果能,说明不是素数;如果不能,说明是素数Dim a%, i% a =val( InputBox(输入(shr)a)Dim a%, i%a = InputBox(输入(shr)a)For i = 2 To a - 1 Step 1 If a Mod i = 0 Th
45、en Exit For End IfNext i第70页/共145页第七十页,共146页。For循环举例6: 判断一个(y )数是否是素数. 分析2: 如果在 2-a-1 之间有一个数i,能够整除a,就表明a不是素数,就不需要继续判断了;如果一直都没有一个数i能够整除a,直到循环结束,则a是素数, 所以可以依据循环结束时循环变量i的值得到是否是素数的结论。循环正常(zhngchng)结束时,循环变量的值是多少?Dim a%, i% a =val( InputBox(输入(shr)a)Dim a%, i%a = InputBox(输入(shr)a)For i = 2 To a - 1 Step
46、1 If a Mod i = 0 Then Exit For End IfNext i大于a-1第71页/共145页第七十一页,共146页。For循环举例6: 判断一个(y )数是否是素数程序.Dim a%, i%a = InputBox(输入(shr)a)For i = 2 To a - 1 Step 1 If a Mod i = 0 Then Exit For End IfNext iIf i a-1 Then MsgBox a & 是素数Else MsgBox a & 不是素数End If思考(sko):如果写成:If i =a then行否?答案:不行!原因:如果a=1
47、,循环体一次也不执行,但i=2却执行了,出错!第72页/共145页第七十二页,共146页。For循环举例6: 判断一个数是否是素数.另一种(y zhn)常用程序设计方法:引入一个标志变量 如果在 2-a-1 之间有一个数i,能够整除a,就表明a不是素数,就不需要继续判断了;如果一直都没有一个数i能够整除a,直到循环结束,则a是素数。 增加一个标志变量,如sushu,赋初始值为1,如果在循环中找到一个I,能整除a,则为sushu重新赋值为0,提前结束循环;如果一直没有一个能整除a的i出现(chxin),则循环正常结束, sushu的值仍然为1。最后,根据sushu的值给出是否素数的结论 注意:这
48、里采用了程序设计中经常用到的一种方法:采用标志变量,当标志变量为某个值时,代表着一种结果,反之,代表另一种结果。第73页/共145页第七十三页,共146页。For循环举例(j l)6 判断是否是素数.Dim a%, i%, sushu% a = InputBox(输入a)sushu = 1 sushu=1表示(biosh)是素数For i = 2 To a - 1 Step 1 If a Mod i = 0 Then sushu = 0 Exit For End IfNext iIf sushu = 1 Then MsgBox a & 是素数(s sh)Else MsgBox a &a
49、mp; 不是素数(s sh)End If注意:这里采用了程序设计中经常用到的一种方法:采用标志变量,当标志变量为某个值时,代表着一种结果,反之,代表另一种结果。第74页/共145页第七十四页,共146页。For循环(xnhun)举例7 例: 从键盘接收10个数,找到并输出(shch)其中最大的一个。基本思路: 1.先输入一个数到a中 2. ,假设a为10个数中最大的数,将a保存到准备(zhnbi)存放最大值的变量max中再循环输入其余9个数, 每次输入后与max比较,如比max大,则将新输入的值放入max中4.最后输出max的值第75页/共145页第七十五页,共146页。For循环(xnhun
50、)举例7 例: 从键盘接收10个数,找到并输出其中(qzhng)最大的一个。声明变量(binling)a!, max!, i%(输入,最大值,循环变量(binling)输入第一个数到aa赋值给max (已知最大值)对于i从2到10,分别执行 输入数据到a 如果amax 则a赋值给max 循环体结束输出max 第76页/共145页第七十六页,共146页。For循环(xnhun)举例7 例: 从键盘接收10个数,找到并输出(shch)其中最大的一个。Dim a%, max%, i%a = Val(InputBox(输入(shr)a:)max = aFor i = 2 To 10a = Val(In
51、putBox(输入(shr)第 & i & 个数:) If a max Then max = aNext iMsgBox 最大的数是 & max思考:要求增加功能:不但找出最大数,而且要输出平均值?提示:该程序测试时将数改为5个,测试成功后再将循环的终值改为10第77页/共145页第七十七页,共146页。For循环(xnhun)举例7 例 从键盘接收10个数,找到并输出其中最大的一个(y ),并计算这10个数的平均值输出。Dim a%, max%, i%, sum%, aver%a = Val(InputBox(输入(shr)a:)max = a:sum = aFor
52、i = 2 To 10 a = Val(InputBox(输入(shr)第 & i & 个数:) sum = sum + a If a max Then max = aNext iaver = sum / 10MsgBox (最大的数是 & max & ;平均值为: & aver)第78页/共145页第七十八页,共146页。第4 4章 VB VB程序设计(chn x sh j)(chn x sh j)基础4.4 循环结构循环结构(jigu)4.4.1 For循环语句循环语句 4.4.2 While循环语句循环语句 4.4.3 DoLoop循环语句循环语句
53、 4.4.4 循环嵌套循环嵌套 第79页/共145页第七十九页,共146页。Dim n%, s! n是循环(xnhun)变量,s结果变量,单精度型s=0 初始值,作为累加器For n=1 to 100 step 2 s=s+1/nNext nPrint s回忆:例回忆:例 计算计算s=1/1+1/3+1/5+. +1/99如果如果(rgu)用用for循环实现:循环实现: For循环特点:循环变量有初值,终值,步长确定, 循环次数是确定的循环变量自动(zdng)赋初值,自动(zdng)增量变化第80页/共145页第八十页,共146页。例例 前述问题改为:计算前述问题改为:计算(j sun) s=
54、1/1+1/3+1/5+. 一直累加到数据项一直累加到数据项10-4为止为止 n分析:一直累加到数据项=10-4就一直累加n需要累加多少项,预先并不知道第81页/共145页第八十一页,共146页。例例 前述问题改为前述问题改为(i wi):计算:计算 s=1/1+1/3+1/5+. 一直累加到数据项一直累加到数据项10-4为止为止 Dim n%, s! n是循环变量(binling),s结果变量(binling),单精度型s = 0 初始值,作为累加器n = 1 循环变量(binling)初值For n = 1 To 20000 s = s + n If 1 / n 10 -4 Then Ex
55、it For End IfNext n Form1.Print n=; nForm1.Print s=; s预先估计一个相当大的数,在循环中判断,符合条件了,提前(tqin)退出循环。第82页/共145页第八十二页,共146页。例例 前述问题改为前述问题改为(i wi):计算:计算 s=1/1+1/3+1/5+. 一直累加到数据项一直累加到数据项10-4为止为止 For循环解决不太方便(fngbin),这种问题用while循环最好!Dim n%, s! n是循环变量(binling),s结果变量(binling),单精度型s = 0 初始值,作为累加器n = 1 循环变量(binling)初值
56、For n = 1 To 10000 s = s + n If 1 / n 10 -4 Then Exit For End IfNext n Form1.Print n=; nForm1.Print s=; s第83页/共145页第八十三页,共146页。4.4.2 While循环(xnhun) 一般格式(g shi): While 循环体 Wend 说明: While语句先对条件进行测试,当条件为True执行循环体 While循环与For循环的区别: For循环的循环次数是确定的 While按条件循环, 循环次数可能不确定第84页/共145页第八十四页,共146页。While循环举例(j l)
57、( 次数不确定) 分析:一直(yzh)累加到数据项=10-4就一直(yzh)累加 需要累加多少项,预先并不知道。如果用n表示数据项的分母: n=1 当 1/n =10-4 s=s+1/n n=n+2 循环体结束 输出s例例 计算计算s=1/1+1/3+1/5+. 直到直到(zhdo)数据项数据项=10-4就一直累加就一直累加第85页/共145页第八十五页,共146页。While循环举例( 次数(csh)不确定)Dim n%, s! n是循环变量,s结果(ji gu)变量,单精度型s = 0 初始值,作为累加器n = 1 循环变量初值While 1 / n = 10 (-4) s = s + 1
58、 / n n = n + 2 循环变量增量WendForm1.Print n=; nForm1.Print s=; s例例 计算计算s=1/1+1/3+1/5+. 直到直到(zhdo)数据项数据项=10-4就一直累加就一直累加必须用语句给循环变量赋初值和完成增量循环体应能使条件改变,否则变死循环第86页/共145页第八十六页,共146页。 以下(yxi)就之前介绍的用for循环解决的问题改为用while循环解决,比较一下解决同样问题二者的不同表达方法第87页/共145页第八十七页,共146页。For循环(xnhun)与While循环(xnhun)比较:例:求1+2+3+10While循环(xn
59、hun)Dim n%, m%m = 0While n = 10 m = m + n n = n + 1WendForm1.Print mFor循环(xnhun)Dim n%, m%m = 0For n = 1 To 10 Step 1 m = m + nNext nForm1.Print m第88页/共145页第八十八页,共146页。For循环(xnhun)与While循环(xnhun)比较:例:求10!While循环(xnhun)Dim n%, m!n = 1m = 1While n = 10(-4) s=s+1/n n=n+2 循环变量(binling)增量WendPrint s例例 计算
60、计算s=1/1+1/3+1/5+. 直到直到(zhdo)数据项数据项=10-4就一直累加就一直累加n课堂练习:仿照前例编写程序:求几的阶乘刚好大于或等于100000?第90页/共145页第九十页,共146页。While循环(xnhun)举例( 次数不确定)n分析:这里是求循环变量分析:这里是求循环变量n的值为多少时阶乘的值正好大于或等于的值为多少时阶乘的值正好大于或等于100000,换言之,换言之,当阶乘的值小于当阶乘的值小于100000时,累乘就要进行,反之,结束时,累乘就要进行,反之,结束(jish)累乘,输出累乘,输出n的值的值n课堂练习:仿照前例编写程序:n求几的阶乘(ji chn)刚好大于或等于100000?第91页/共145页第九十一页,共146页。While循环举例( 次数(csh)不确定)Dim n%, m! n是循环(xnhun)变量,m阶乘值,单精度型n=1 循环(xnhun)变量初值m=1 初始值,作为连乘器While m 100000 n=n+1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 心理医师社交恐惧症治疗方案
- 仲裁协议书在什么地方
- 检验科凝血功能检测质控措施
- 中医养生肾脏科普
- 城域网的封装协议书
- 皮肤科湿疹患者护肤方案分享
- 2026中国邮政储蓄银行广西区分行春季校园招聘备考题库及参考答案详解(综合题)
- 2026陕西西北工业大学网络空间安全学院信息系统与智能安全团队招聘1人备考题库附答案详解(突破训练)
- 2026年烟台文化旅游职业学院公开招聘高层次、高技能人才备考题库附答案详解(模拟题)
- 2026山东济南市第一人民医院招聘卫生高级人才和博士(控制总量)18人备考题库及参考答案详解(b卷)
- 南充市发展和改革委员会2026年公开遴选公务员(6人)考试参考试题及答案解析
- 癫痫预测模型的泛化能力提升策略研究
- 母婴三病传播知识培训课件
- 2026届陕西省高三二模高考数学模拟试卷试题(含答案详解)
- 地推销售话术与技巧
- 知情同意与拒绝治疗
- 甲钴胺的临床应用
- 杭州中考社会试卷及答案2025
- 渠道管理成员激励
- 水上抛石应急预案
- 中国2型糖尿病防治指南(2024年版)解读
评论
0/150
提交评论