您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 387-2.4 程序的循环结构
2.4程序的循环结构掌握For循环语句的基本格式理解For循环语句的执行过程掌握循环变量在执行过程中的变化情况能用For循环结构编写简单的程序实例1、编程求1+2+3+…+10的和按照顺序结构编写程序如下:PrivateSubCommand1_Click()dimsasintegers=0s=s+1s=s+2……s=s+10printsendsub用这种方法能不能编程求出1+2+3……+100的和,1+2+3……+1000的和?实际这10条赋值语句在重复着同一个操作,都是将s加一个数和赋给s,如果用变量x表示每一个加数,那么这10条语句就可以用一条表示:s=s+x,然后让x的取值分别为1到10这10个自然数,重复执行这条语句,就可以实现该程序的编写。这就要用到循环结构。2.4.1用For~Next语句建立循环结构用循环语句编写:PrivateSubCommand1_Click()Dimsasinteger,xasintegerS=0ForX=1to10step1S=S+XnextXprintSEndsub循环变量初值终值步长循环体1、For-next循环语句的格式:用于建立已知循环次数的循环结构For循环变量=初值To终值Step步长循环体Next循环变量2、For循环语句的功能:①执行For语句:先将初值赋给循环变量,并记住终值和步长(两数间隔)。然后进行判断,是否超出终值?如“超出”终值时,执行Next下一语句,否则执行循环体。②执行循环体③执行Next语句:循环变量加步长,返回重新判断2.4.2For循环语句的执行过程开始0→S1→XX=10S+X→SX+1→X输出S结束YN练一练针对for循环语句的语句格式,设置如下练习,指出下面程序中的错误:1、求1+2+3+4+5的和s=0fori=1to5step1s=s+inextjprints2、在VB窗体界面上输出1~10这10个自然数forI=1to10printij-i循环变量的名称要相同。For语句与Next语句必须成对出现,而且仅只步长为1时,才可以省略step13、求5+4+3+2+1的和s=0forI=5to1s=s+InextIprints4、求7+5+3+1的和:S=0ForI=7to1Step2S=S+INextIPrintS当初值小于终值时,步长为正数;当初值大于终值时,步长为负数;补充:1、循环变量必须为数值型,初值、终值:都是数值型,可以是数值表达式。2、循环体:在For语句和Next语句之间的语句序列。可以是一条语句,也可以是多条语句。Step-1-2问题2求S=1+2+……+100和值分析a、用循环产生1~100的自然数b、每产生一个自然数将其累加到求和变量中即:S=S+Nc、重复执行S=S+N即:循环体d、打印和的值的语句应在程序的末尾即:PrintS=1+2+……+1000=;S程序:PrivateSubCommand1_Click()DimNasinteger,SasintegerS=0ForN=1To100S=S+NNextNPrintS=1+2+……+100=;SEndSub问题3:一小球从200米高度自由下落,每次落地后反弹为原来高度的一半,然后再落下……,求该小球第十次落地时共经过了多少米的路程?分析:设S表示小球经过的路程变量S=S+2HH表示小球反跳的高度变量H=H/2I表示小球落地的次数变量I=2To10PrivateSubCommand1_Click()DimHasinteger,Sasinteger,IasintegerS=200H=S/2ForI=2To10S=S+2*HH=H/2NextIPrint到第十次落地共经过的路程是:;S;米endsub问题3:一小球从200米高度自由下落,每次落地后反弹为原来高度的一半,然后再落下……,求该小球第十次落地时共经过了多少米的路程?分析:设S表示小球经过的路程变量S=S+HH表示小球反跳的高度变量H=H/2I表示小球落地的次数变量I=2To10PrivateSubCommand1_Click()DimHasinteger,Sasinteger,IasintegerS=200H=S/2ForI=2To10S=S+2*HH=H/2NextIPrint到第十次落地共经过的路程是:;S;米endsubPrivateSubCommand1_Click()DimSasinteger,IasintegerS=200ForI=2To10S=S+200*2*(0.5^(I-1))NextIPrint到第十次落地共经过的路程是:;S;米endsub问题4:一小球从200米高度自由下落,每次落地后反弹为原来高度的一半,然后再落下……,求该小球多少次落地时经过的路程大于600米呢?PrivateSubCommand1_Click()DimSasinteger,IasintegerS=200I=2dowhileS600S=S+200*2*(0.5^(I-1))I=I+1LoopPrint“到“;I;”次时落地经过的路程是超过600米endsubPrivateSubCommand1_Click()DimSasinteger,IasintegerS=200I=2doS=S+200*2*(0.5^(I-1))I=I+1LoopuntilS600Print“到“;I;”次时落地经过的路程是超过600米endsub2.4.4用Do语句建立循环结构1、Do语句的功能:用于建立循环次数未知的循环结构2、Do语句的格式:格式一(当循环)DoWhile条件循环体Loop功能:执行Do语句先判断条件,当条件满足,则执行循环体,然后执行Loop语句就回到DoWhile再判断,直到条件不满足,跳出循环,执行Loop下一语句。S=0N=0DoWhileN=10S=S+1N=N+1LoopDo语句的第二种格式(直到循环)1、直到形循环格式Do循环体Loopwhile条件2、格式二功能:执行Do语句,就进入循环,直接执行循环体,在判断条件,当条件满足,回到上面执行循环体,直到条件不满足,跳出循环,执行Loop下一语句。S=0N=0DoN=N+1S=S+NLoopwhileN100三种循环求解S=1+2+……+100和值PrivateSubCommand1_Click()DimNAsinteger,SAsintegerS=0ForN=1To100S=S+NNextNPrint“S=;SEndSubPrivateSubCommand1_Click()DimsAsInteger,nAsIntegers=0n=0DoWhilen=100s=s+nn=n+1LoopPrintsEndSubPrivateSubCommand1_Click()Dimsasinteger,nasintegerS=0N=0DoS=S+NN=N+1Loopuntil(n100)printSEndsubP12实践(1)“猴子摘桃”PrivateSubCommand1_Click()DimdayAsInteger,SAsIntegerS=1Forday=9To1Step-1S=(S+1)*2NextdayPrints=;SEndSub猴子吃桃:每次吃掉一半多一个,直到第10天只剩一个,第一天共摘了多少个桃子?问题8要将100元的钞票换成等值的10元、5元、2元、1元的小钞票。要求每次换成40张小钞票,每种至少一张,有多少种换法?分析:10元一张最多能换9张,5元一张最多能换17张,2元一张最多能换37张,一元只要用40减去10、5、2元的数目就可以了!DimiAsInteger,jAsInteger,kAsInteger,mAsInteger,sumAsIntegersum=0Fori=1To9Forj=1To17Fork=1To37m=40-i-j-kIf(m=1)And(i*10+j*5+k*2+m=100)Thensum=sum+1Printi=;i,j=;j,k=;k,m=;mEndIfNextkNextjNextiPrintsum=;sumEndSub2.4.5循环语句嵌套的定义双重循环语句:在循环体内含有另一个循环语句的结构如:For循环变量1=初值To终值Step步长For循环变量2=初值To终值Step步长循环体Next循环变量2Next循环变量1多重循环:如循环体内再包含循环结构,我们将这种循环结构称作多重循环。多重循环的原则是:外层循环与内层循环必须层层相套,循环体之间不能交叉。每个循环必须有一个唯一的循环控制变量。问题5求解1–2+3-4+……+99-100PrivateSubCommand1_Click()DimiAsinteger,SAsintegerS=0Fori=1To100s=s+(-1)^(i+1)*iNextiPrint“S=;SEndSubPrivateSubCommand1_Click()DimiAsinteger,SAsintegerS=0Fori=1To100IfiMod2=0Thens=s–iElses=s+iEndIfNextiPrint“S=;SEndSub问题61-1/2+1/3–1/4+……+1/99–1/100PrivateSubCommand1_Click()DimiAsinteger,SAsintegerS=0Fori=1To100s=s+(-1)^(i+1)*(1/i)NextiPrint“S=;SEndSub问题7求1~1000之间的素数素数是指只能被1和他本身整除的数要判断一个数i是否为素数,只要看i是否能被2到i-1范围内的数整除,若能被整除,则不是素数。PrivateSubCommand1_Click()DimiAsInteger,jAsIntegerDimprimeAsBooleanFori=2To1000prime=Truej=2DoWhile(ji)AndprimeIf(iModj=0)Thenprime=Falsej=j+1LoopIfprimeThenPrinti=;iNextiEndSub
本文标题:387-2.4 程序的循环结构
链接地址:https://www.777doc.com/doc-3474964 .html