【文档说明】-VB课件第4章循环结构-PPT.ppt,共(59)页,310.012 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-3255.html
以下为本文档部分文字说明:
采用循环程序可以解决一些按一定规则重复执行的问题。例如,统计一个班几十名学生,甚至全校几千名学生的学期成绩,如求平均分、不及格人数等。本章主要内容循环语句For...Next/Do...Loop/While...Wend循
环出口语句(Exit)多重循环程序举例4.3循环结构设计循环是指在指定的条件下多次重复执行一组语句。被重复执行的一组语句称为循环体。VB提供的循环语句有:For...NextDo...LoopWhile/UntilDoWhile/Until...LoopW
hile...Wend最常用的是For...Next和Do...Loop语句按指定次数执行循环体4.3.1For...Next循环循环变量超过终值?FT循环变量增加步长循环体循环变量获得初值格式:For循环变量=初值To终
值[Step步长值]循环体Next循环变量功能:当循环变量的值在初值到终值范围内时,执行一次循环体的语句代码,并使初值增加一个步长。当循环变量的值不在初值到终值范围内时,就退出循环,执行Next后面的语句。说明:循环变量是一个数值变量,初值、终值和步长值都是数值表达式,步长值可以是正数(称
为递增循环),也可以是负数(称为递减循环);若步长值为1,则Step1可以省略。说明:循环次数的一般计算公式:Int((终值-初值)/步长)+1事先已知循环次数,则可使用For-Next循环结构语句—
—计数循环PrivateSubForm_Load()ShowDimsumAsInteger计算1至100的和,存放在sum中’显示结果Print"sum=";sumEndSubsum=sum+1sum=sum+2……sum=sum+100sum=sum+ii=1~100
采用Print直接在窗体上输出结果PrivateSubForm_Load()ShowDimsumAsIntegerDimiAsIntegerFori=1To100sum=sum+iNextiPrint"sum=";sumEndSubY
esNosum=sum+ii=1i<=100i=i+1执行过程:Fori=1To100sum=sum+iNexti示例2:求T=8!=1×2×3×…×8采用Print直接在窗体上输出结果,程序代码:PrivateSubFo
rm_Load()Showt=1Forc=1To8t=t*cNextcPrint"T=";tEndSub程序运行结果是:T=40320语句t=t*c也称累乘器。先将t置1(不能置0)。在循环程序中,常用累加器和累乘器来完成各
种计算任务。如果要求N!呢???思考:x=5Fori=1To20Step5x=x+i\5Nexti思考:s=5Fori=2.6To4.9Step0.6s=s+1Nexti思考:PrivateSubForm_
Click()x=5:k=5Fork=1To10Step-2x=x+kNextkPrintk;xEndSub思考:PrivateSubForm_Click()DimsumAsDouble,xAsDoublesum=0n=0Fori=1T
o5x=n/in=n+1sum=sum+xNextiEndSub下面采用“穷举法”来解此题。其做法是:从所有可能解中,逐个进行试验,若满足条件,就得到一个解,否则不是。直到条件满足或判别出无解为止。令母鸡为x只,小鸡为y只,根据题意可知y=100–x开
始先让x初值为1,以后逐次加1,求x为何值时,条件3x+y/3=100成立。如果当x达到33时还不能使条件成立,则可以断定此题无解。示例3:100元买100只鸡,母鸡3元1只,小鸡1元3只,问各应买多少只?采用Print直接在窗体上输出结果,程序代码:Priva
teSubForm_Load()DimxAsInteger,yAsIntegerShowForx=1To33y=100-xIf3*x+y/3=100ThenPrint"母鸡只数为:";x,Print"小鸡只数为:";yEndIfNextx
EndSub运行结果:母鸡只数为:25小鸡只数为:75For...Next循环主要是用在知道循环次数的情况下,若事先不知道循环次数,可以使用Do...Loop循环。Do...Loop两种格式:前测型循环结构和后测型
循环结构。两者区别在于判断条件的先后次序不同。4.3.2Do...Loop循环语句循环体F条件T先判断循环条件,再执行循环体语句。1.前测型Do...Loop循环格式:Do[{While|Until}条件
]循环体LoopDoWhile...Loop语句的功能:当条件成立(为真)时,执行循环体;当条件不成立(为假时),终止循环。DoUntil...Loop语句的功能:当条件不成立(为假)时,执行循环体,直到条件成立(为真)时,终止循环。1.前测型Do...Loop循环PrivateSubFor
m_Load()DimsumAsInteger,iAsIntegerShowi=1DoWhilei<=100sum=sum+ii=i+1LoopPrint"s=";sumEndSub’进入循环之前赋初值’改变循环变量的值示例4:采用DoWhile...Loop语句改写示例
1Fori=1To100Step1sum=sum+iNexti先执行循环体语句,再判断循环条件。循环体条件YN2.后测型Do...Loop循环格式:Do循环体Loop[{While|Until}条件]功能:先执行循环体,然后判断条件,根据条件决定是否继续执行循环。注意:本语句执
行循环的最少次数为1,而前测型Do...Loop语句的最少次数为0(即一次都不执行循环)。2.后测型Do...Loop循环思考:运行下列程序,单击窗体,则执行结果是()PrivateSubForm_Click()s=0Dos=(s+1)*(s+2)Nu
mber=Number+1LoopUntils>=30PrintNumber;sEndSubA)01B)3030C)430D)3182运行下列程序,单击窗体,则执行结果是()PrivateSubForm_Click()b=1a=2DoWhileb<10b=2*a+bLoopPrintbEnd
SubA)13B)17C)21D)33运行下列程序,单击窗体,则执行结果是()PrivateSubForm_Click()E=1:F=1Forj=1To3E=E+F:F=F+ENextjprintE;FEndSubA)
66B)58C)1321D)3455分析:本题可用“累加”的方法来完成,设累加的和为变量s,累加项为i^2,则累加的语句可写为:s=s+i^2采用DoWhile…Loop语句:PrivateSubForm_Click()Dimi
AsInteger,sAsLongi=1s=0Dowhilei<=10s=s+i^2i=i+1LoopPrint―s=‖;sEndSub示例5:用Do…loop语句求s=12+22+…+102―辗转相除法”算法:求出m/n余数p,若p=0,n即为最大公约数
;若p非0,则把原来的分母n作为新的分子m,把余数p作为新的分母n继续求解。设计步骤如下:(1)创建应用程序的用户界面和设置对象属性示例6:输入两个正整数,求它们的最大公约数编写的“计算”按钮Click事件过程代码如下:PrivateSubCommand1_Click()DimmAsInteg
er,nAsInteger,pAsIntegerm=Val(Text1.Text):n=Val(Text2.Text)Ifm<=0Orn<=0ThenMsgBox"数据错误!"EndEndIfDop=mModnm=nn=pLoopWhilep<>0Text3.Text=mEndSub若输入的m
和n的值为85和68,则运行结果如上图用于提前退出循环格式:Exit{For|Do}功能:直接从For循环或Do循环中退出。当程序运行时遇到Exit语句时,就不再执行循环体中的任何语句而直接退出,转到循环语句(Next、Loop)的下面继续执行。4.3.3循环出
口语句示例5的循环语句可改为:Dop=mModnIfp=0ThenExitDoEndIfm=nn=pLoopWhilep<>0Text3.Text=mn格式:While条件循环体Wend功能:当条件成立(为真)时,执行循环体;当条件不成立(为假)时,终止循环。本语句与上述
DoWhile...Loop循环语句相似4.3.4While...Wend循环语句用下面的公式求π的近似值(直到最后一项的绝对值小于10-6为止):分析先计算等式右边的和累加求和:pi=pi+t当
|t|<10-6时,停止累加用Do…loop循环实现...71513114π示例7:求π的近似值采用Print直接在窗体上输出结果,程序代码如下:PrivateSubForm_Click()DimsAsIntegerDimpiAsSingle,nAsI
nteger,tAsSinglepi=0:n=1:t=1s=1's表示加或减运算DoWhileAbs(t)>=0.000001pi=pi+tn=n+2s=-s‗交替改变加、减号t=s/nLoopPrint"π=";pi*4EndSub程序运行结果是:π=3.141575示例7:求π的近似
值思考:PrivateSubForm_Click()ForI=7to90step5printInextIEndSub上述程序共执行执行循环体的次数是()A)14B)15C)16D)17运行下列程序,单击窗体,则执行结
果是()PrivateSubForm_Click()Forj=1To15a=a+jMod3NextjPrintaEndSubA)1B)15C)90D)120运行下列程序,单击窗体,则执行结果是()PrivateSubForm_Click()Forj=1To3P
rintTab(3*j);(2*j-1)*(2*j-1)NextjPrintEndSubA)1B)1610C)1925D)1691025运行下列程序,单击窗体,则执行结果是PrivateSubForm_Click()s=0i=1
DoWhilei<=100If(i\5)*5=iThens=s+1i=i+1EndIfLoopPrintsEndSub运行下列程序,单击窗体,则执行结果是PrivateSubForm_Click()s=0i=1Do
Whilei<=100If(i\5)*5=iThens=s+1i=i+1elsei=i+1EndifLoopPrintsEndSub在窗体上放置一个命令按钮,然后编写如下事件过程:PrivateSubCommand1
_Click()x=5Fori=1to20Step2x=x+i\5nextiPrintxEndSub程序运行后,单击命令按钮,输出结果为()A)21B)22C)23D)24运行下列程序,单击窗体,则执行结果是()PrivateSubForm_C
lick()Forj=1To10a=a+j\3+jMod3NextjPrintaEndSubA)20B)25C)30D)35习题:依次输入5、4、3、2、1、-1PrivateSubCommand_Click()X=0DoUntilx=-1a=InputBox(“请输入A的值”)a=Val(a
)b=InputBox(“请输入B的值”)b=Val(b)x=InputBox(“请输入X的值”)x=Val(x)a=a+b+xprintaLoopEndSub输出两个结果,分别是12和2习题:依次输入5、4、3、2、1、-1PrivateSubCommand_Click()X=0
DoUntilx=-1a=InputBox(“请输入A的值”)a=Val(a)b=InputBox(“请输入B的值”)b=Val(b)x=InputBox(“请输入X的值”)x=Val(x)a=a+b+xLoopprintaEndSub输出结果只有一个,是2给定VB程序的功能是计算并输
出100以内的所有能被3整除且个位数是6的所有整数,请将程序补充完整。PrivateSubForm_Click()Dimi,jAsIntegerFori=0To______j=i*10+6If___________ThenPrintjEndIf
NextiEndSub9jMod3=0设计一个“加法器”程序,把每次输入的数累加,直到输入非数值数据为止。PrivateSubForm_Click()DimSumAsDouble,xAsString,yAsDoubleSum=0DoWhileTrue'条件为真,循环无终止进
行下去x=InputBox("请输入要加入的数","输入数据")IfIsNumeric(x)=FalseThenExitDoEndIfy=Val(x)Sum=Sum+yText1.Text=SumLoopMsgBox"累加运算结束”EndSub示例8:设计一个“加法器”程序当一个循环里面包含有另一
个完整的循环时,称为循环的嵌套。循环的嵌套对For循环和Do…Loop循环均适用。多重循环程序示例程序运行结果PrivateSubForm_Load()15Show16Fori=1To3‗外循环17Forj=5To7‘内
循环25Printi,j26Nextj27Nexti35EndSub36374.3.5循环的嵌套-多重循环结构嵌套循环应注意的问题DoForDoLoopNextLoop二重循环三重循环For和Do循环可以混合嵌套,但是各循环间不得交叉。下例是非法的循环嵌套。ForI…Fo
rJ……NextINextJ就和我们一层层的包裹东西是一样的!错!!!这些都对了!思考:运行下列程序,单击窗体,则运行结果是___。PrivateSubForm_Click()Forx=1To2a=0Fory=1Tox+1
a=a+1NextyPrinta;NextxEndSub结果是23运行下列程序,单击窗体,则运行结果是___。PrivateSubForm_Click()N=0ForI=1To3ForJ=5To1Step-1N=N+1N
extJ,IPrintN;J;I结果是1504本例可采用两重循环来实现。外循环控制输出7行,内循环控制每行输出要求的字符数。在进入内循环之前,使用Tab()来对起始输出位置定位,退出内循环后,使用Print来控制换行。示例9:编一程序,输出下列
所示的图形采用Print直接在窗体上输出结果,程序代码如下:PrivateSubForm_Load()ShowFori=1To7PrintTab(8-i);Forj=1To2*i-1PrintCStr(i);NextjPrintNextiEndSub注意:内循环变量和外循环变量不
能同名For…Next前测型s=0s=0:k=1Fork=1to10DoWhilek<=10s=s+ks=s+kNextkk=k+1PrintsLoopPrintss=0:k=1dos=s+kk=k+1LoopWhilek<=10Prints4.3.6三种循环语句比较后测
型4.3.7循环结构应用程序举例累加、累乘求多项式求两个自然数的最大公约数求素数Fibonacci数列求最大值或最小值问题打印“乘法九九表”……程序代码:PrivateSubForm_Click()Dimf1aslong,
f2aslongDimiaslongf1=1:f2=1Fori=1To6Printf1,f2,ifiMod2=0thenPrintf1=f1+f2f2=f2+f1NextiEndSub运行结果:112358132163455891
44示例10求Fibonacci数列的前12个数(每行4个数)分析:f1=1(n=1)f2=1(n=2)fn=f(n-1)+f(n-2)(n>=3)PrivateSubForm_Click()DimxAsInt
eger,aAsInteger,cAsIntegerDimcountAsIntegercount=0Forx=100To999a=x\100:b=x\10Mod10:c=xMod10Ifa<>bAnda<>cAndb<>cThencount=count+1Printx;Ifco
untMod10=0ThenPrintEndIfEndIfNextxEndSub示例11统计无重复的三位数,如102、103示例12求最大值或最小值问题求班级学生某一门课成绩的最高分这就是一个求最大值的问题。先假设第一个成绩就是班级最高分,然后从第二个成绩开始依次与假设的最高分比较,若有高
于它的,则更新最高分,否则继续下一个成绩的比较,直至最后一个成绩PrivateSubForm_Click()DimscoreAsSingle,maxassinglescore=Val(InputBox("请输入第"&1&"个学生的成绩:"))Max=scoreF
ori=2To20'假设班级人数为20人score=Val(InputBox("请输入第"&i&"个学生的成绩:"))Ifscore>MaxThenMax=scoreNextiPrintPrint"最高分为";
MaxEndSubPrivateSubForm_Click()DimiAsInteger,jAsIntegerFori=100To200Forj=2Toi-1IfiModj=0ThenExitForEndIfNextjIfj=iThenPrinti;EndIfNextiEndS
ub示例13输出100-200之间的所有素数示例14:打印“九九乘法表”两重循环;采用Print直接在窗体上输出结果PrivateSubForm_Load()ShowFontSize=12PrintTab(55);"九九乘法表
"PrintTab(55);"----------"PrintFori=1To9Forj=1To9Ifi*j>=10ThenPrinti;"*";j;"=";i*j;Space(1);ElsePrinti;"*";j;"=";
i*j;Space(2);EndIfNextjPrintNextiEndSub示例14:打印“九九乘法表”?示例14:打印“九九乘法表”