while循环和repeat-until循环

上传人:hs****ma 文档编号:568614797 上传时间:2024-07-25 格式:PPT 页数:20 大小:241.50KB
返回 下载 相关 举报
while循环和repeat-until循环_第1页
第1页 / 共20页
while循环和repeat-until循环_第2页
第2页 / 共20页
while循环和repeat-until循环_第3页
第3页 / 共20页
while循环和repeat-until循环_第4页
第4页 / 共20页
while循环和repeat-until循环_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《while循环和repeat-until循环》由会员分享,可在线阅读,更多相关《while循环和repeat-until循环(20页珍藏版)》请在金锄头文库上搜索。

1、while循环和循环和repeat-until循环循环主讲人:山成虎1.while循环循环2.repeat-until循环循环3.多重循环结构多重循环结构对于对于for循环有时也称为循环有时也称为计数循环计数循环,当循环次数未知,只能根,当循环次数未知,只能根据某一条件来决定是否进行循环时,用据某一条件来决定是否进行循环时,用while语句或语句或repeat语句实语句实现循环要更方便。现循环要更方便。1.while循环循环1.1while语句的形式为:语句的形式为:whiledo;其意义为:当布尔表达式的值为其意义为:当布尔表达式的值为truetrue时,执行时,执行dodo后面的语句。后面

2、的语句。1.2while语句的执行过程为:语句的执行过程为:判断布尔表达式的值判断布尔表达式的值,如果其值为真如果其值为真,执行步骤执行步骤2,否则执行步骤否则执行步骤4;执行循环体语句执行循环体语句(do后面的语句后面的语句);返回步骤返回步骤1;结束循环结束循环,执行执行while的下一个语句。的下一个语句。说明:这里说明:这里while和和do为保留字,为保留字,while语句的特点是语句的特点是先判断,后执先判断,后执行行。当布尔表达式成立时,重复执行。当布尔表达式成立时,重复执行do后面的语句后面的语句(循环体循环体)。例例1:求求s=1+2+99+100.programxy;var

3、i,sum:interger;begini:=1;sum:=0;whilei=100dobeginsum:=sum+i;i:=i+1;end;writeln(sum);end.i=100 sum:=sum+ii:=i+1;真(非真(非0)假(假(0)1.3举例举例下一条语句下一条语句(循环语句结束)(循环语句结束)例例2:求恰好使求恰好使s=1+1/2+1/3+1/n的值大于的值大于10时时n的值。的值。分析:分析:恰好使恰好使s的值大于的值大于10意思是当表达式意思是当表达式s的前的前n-1项的和小于或等于项的和小于或等于10,而加上了第而加上了第n项后项后s的值大于的值大于10。从数学角度

4、,我们很难计算这个。从数学角度,我们很难计算这个n的值。故从第的值。故从第一项开始,当一项开始,当s的值小于或等于的值小于或等于10时,就继续将下一项值累加起来。当时,就继续将下一项值累加起来。当s的值超的值超过过10时,最后一项的项数即为要求的时,最后一项的项数即为要求的n。programxy;vars:real;n:integer;n表示项数表示项数begins:=0.0;n:=0;whilesn)。求求m/n的余数的余数r.若若r=0,则则n为最大公约数为最大公约数.若若r0,执行第执行第步步.将将n的值放在的值放在m中中,将将r的值放在的值放在n中中.返回重新执行第返回重新执行第步。步

5、。abr642420programxy;varm,n,a,b,r:integer;beginreadln(m,n);a:=m;b:=n;r:=amodb;whiler0dobegina:=b;b:=r;r:=amodb;end;writeln(b:8);end.求两个正整数求两个正整数m和和n的最小公的最小公倍数,倍数,可以用可以用m*ndiv(m和和n的的最大公约数最大公约数).例如:例如:6和和4的最小公倍数,可以用的最小公倍数,可以用6*4div2=12.例例4:利用格里高公式求利用格里高公式求。/4=1-1/3+1/5-1/7+,直到最后一项的值,直到最后一项的值小于小于10-6为止。

6、为止。【分析分析】解本题的关键就是求右边数值序列的和,序列有明显的特解本题的关键就是求右边数值序列的和,序列有明显的特点:分母是从点:分母是从1开始的奇数,加、减号轮流出现,因此,我们可以开始的奇数,加、减号轮流出现,因此,我们可以用用n=n+2表示序列数值的变化,用表示序列数值的变化,用f=-f来设置它们知项的符号位。来设置它们知项的符号位。programxy;varn,f:integer;t,pai:real;beginpai:=0;t:=1;n:=1;f:=1;whileabs(t)=1e-6dobeginpai:=pai+t;n:=n+2;f:=-f;t:=f/n;end;pai:=p

7、ai*4;writeln(pai:10:8);end.运行程序会发现没有结果,为什么?因运行程序会发现没有结果,为什么?因为布尔表达式为布尔表达式abs(t)=1e-6,即,即1/n=1e-6,而程序的说明部分,而程序的说明部分n是整型数,它的是整型数,它的范围是范围是-3276832767,条件永远成立,条件永远成立,所以形成所以形成死循环死循环,从而没有运行结果。,从而没有运行结果。while循环不需要用顺序型数据来控制循循环不需要用顺序型数据来控制循环的次数,改程序的说明部分中的环的次数,改程序的说明部分中的n为实为实型数或说明为长整型即可,请同学们自型数或说明为长整型即可,请同学们自己

8、修正,以后要己修正,以后要对变量的取值范围引起对变量的取值范围引起重视重视。2.repeat-until循环循环用用while语句可以实现语句可以实现当型循环当型循环,用,用repeat-until语句可以实现语句可以实现直直到型循环到型循环。repeat-until语句的含义是:语句的含义是:重复执行循环,直到指定重复执行循环,直到指定的条件为真时为止的条件为真时为止。2.1repeat-until语句一般格式语句一般格式repeat;:;until;其中其中repeat、until是是Pascal保留字,保留字,repeat与与until之间的所有语句称之间的所有语句称为循环体。为循环体。

9、2.2说明说明(1)repeat语句的特点是:语句的特点是:先执行循环,后判断结束条件,因而至先执行循环,后判断结束条件,因而至少要执行一次循环体。少要执行一次循环体。(2)repeat-until是一个整体,它是一个(构造型)语句,不要误是一个整体,它是一个(构造型)语句,不要误认为认为repeat是一个语句,是一个语句,until是另一个语句。是另一个语句。(3)repeat语句在布尔表达式的值为真时不再执行循环体,且循环语句在布尔表达式的值为真时不再执行循环体,且循环体可以是若干个语句,体可以是若干个语句,不需用不需用begin和和end把它们包起来,把它们包起来,repeat和和unt

10、il已经起了已经起了begin和和end的作用。的作用。while循环和循环和repeat循环是可以相循环是可以相互转化的。互转化的。(4)在)在repeat和和until之间的语句构成循环。在它们之间可以有任意之间的语句构成循环。在它们之间可以有任意多个语句,这一点和多个语句,这一点和for,while循环不同,循环不同,for,while循环体在语法循环体在语法上只允许一条语句上只允许一条语句。要想循环多条语句必须用复合语句。要想循环多条语句必须用复合语句。2.3repeat-until语句的执行过程语句的执行过程(1)遇到遇到repeat语句后,即进入循环体,顺序执行循环体内的语句。语句

11、后,即进入循环体,顺序执行循环体内的语句。(2)遇到遇到until语句后,求布尔表达式的值。若值为假,则返回步语句后,求布尔表达式的值。若值为假,则返回步骤骤1;若为;若为“真真”,执行步骤,执行步骤3(3)循环结束,执行循环结束,执行until后面的下一条语句。后面的下一条语句。例例5:求求s=1+2+99+100.programxy;vari,sum:interger;begini:=1;sum:=0;repeatsum:=sum+i;i:=i+1;untili100;writeln(sum);end.i100 sum:=sum+ii:=i+1;假假(false)真(真(true)2.4举

12、例举例下一条语句下一条语句(循环语句结束)(循环语句结束)例例6求两个正整数求两个正整数m和和n的最大公约数。的最大公约数。程序采用程序采用repeat-until循环实现。循环实现。programxy;varm,n,r:integer;beginreadln(m,n);repeat/辗转相除法辗转相除法r:=mmodn;m:=n;n:=r;untilr=0;writeln(m);end.为什么用为什么用while语句结果是语句结果是n,repeatuntil语句结果是语句结果是m?例例7校体操队到操场集合校体操队到操场集合,排成每行排成每行2人人,最后多出最后多出1人人;排成每行排成每行3人

13、人,也多出也多出1人人;分分别按每行排别按每行排4,5,6人人,都多出都多出1人人;当排成每行当排成每行7人时人时,正好不多。求校体操队至少是多正好不多。求校体操队至少是多少人少人?【分析分析】设校体操队为设校体操队为X人人,根据题意根据题意X应是应是7的倍数的倍数,因此因此X的初值为的初值为7,以后用以后用inc(x,7)改变改变X值;值;为了控制循环为了控制循环,用逻辑变量用逻辑变量yes为真为真(True)使循环结束;使循环结束;如果诸条件中有一个不满足如果诸条件中有一个不满足,yes的值就会为假的值就会为假(false),就继续循环。,就继续循环。programxy;varx:inte

14、ger;yes:boolean;beginx:=0;repeatyes:=true;inc(x,7);ifxmod21thenyes:=false;ifxmod31thenyes:=false;ifxmod41thenyes:=false;ifxmod51thenyes:=false;ifxmod61thenyes:=false;untilyes;/直到直到yes的值为真的值为真writeln(All=,x);readlnend.程序中对每个程序中对每个X值,值,都先给都先给Yes赋真值,赋真值,只有在循环体中,只有在循环体中,各句对各句对X进行判断进行判断时,都得到时,都得到“通过通过”(此

15、处不赋假值)(此处不赋假值)才能保持真值。此才能保持真值。此处的处的yes相当于一个相当于一个标志变量。标志变量。 以上我们已介绍了三种循环语句。一般说来,用以上我们已介绍了三种循环语句。一般说来,用for循环比较循环比较简明,只要能用简明,只要能用for循环,就尽量作用循环,就尽量作用for循环。只在无法使用循环。只在无法使用for循循环时才用环时才用while循环和循环和repeat-until循环,循环,而且而且while循环和循环和repeat-until循环是可以互相转化的,具体用哪个,还要看个人喜好,但他循环是可以互相转化的,具体用哪个,还要看个人喜好,但他们也存在细微区别,们也存

16、在细微区别,while语句的循环体有可能一次都不会被执行,语句的循环体有可能一次都不会被执行,而而repeat语句中循环体至少执行一次语句中循环体至少执行一次。for循环在大多数场合也能用循环在大多数场合也能用while和和repeat-until循环来代替。循环来代替。一般一般for循环用于有确定次数循环,循环用于有确定次数循环,而而while和和repeat-until循环用于未确定循环次数的循环。循环用于未确定循环次数的循环。 当一个循环的循环体中又包含循环结构程序时,我们就称之为当一个循环的循环体中又包含循环结构程序时,我们就称之为循环嵌套。循环嵌套。内循环整个作为外循环的一条语句内循

17、环整个作为外循环的一条语句。3.多重循环结构多重循环结构3.1举例举例例例8求1!+2!+10!的值。【分析分析】这个问题是求这个问题是求10自然数的阶乘之和,可以用自然数的阶乘之和,可以用for循环来实现。程序结构循环来实现。程序结构如下:如下:forn:=1to10dobeginN!的值的值t累加累加N!的值的值send显然显然,通过通过10次的循环可求出次的循环可求出1!,2!,10!,并同时累加起来并同时累加起来,可求得可求得S的值。而求的值。而求T=N!,又可以用一个又可以用一个for循环来实现循环来实现:t=1;forj:=1tondot:=t*j;整个程序为整个程序为:Progr

18、amxy;vart,s:longint;i,j,n:integer;begins:=0;forn:=1to10dobegint=1;forj:=1tondo/求求n!t:=t*j;s:=s+t;/累加累加n!end;writeln(s=,s:0:0);end.以上的程序是一个二重的以上的程序是一个二重的for循环嵌套。这是比较好想的方法,但实际上对于求循环嵌套。这是比较好想的方法,但实际上对于求n!,我们可以,我们可以根据求出的根据求出的(n-1)!乘上乘上n即可得到即可得到,而无需重新从,而无需重新从1再累乘到再累乘到n。程序可改为:程序可改为:programex4_17;vart,s:lo

19、ngint;i,j,n:integer;begins:=0;t:=1;forn:=1to10dobegint:=t*n;/t为上一个数为上一个数n-1的阶乘值,再乘以的阶乘值,再乘以n即为即为n!s:=s+t;/累加累加n!end;writeln(s=,s:0:0);end.显然第二个程序的效率要比第一个显然第二个程序的效率要比第一个高得多。第一程序要进行高得多。第一程序要进行1+2+10=55次循环,而第二程序进行次循环,而第二程序进行10次次循环。如题目中求的是循环。如题目中求的是1!2!1000!,则两个程序的效率区!,则两个程序的效率区别更明显。别更明显。例例9一个炊事员上街采购一个炊

20、事员上街采购,用用500元钱买了元钱买了90只鸡只鸡,其中母鸡一只其中母鸡一只15元元,公鸡一只公鸡一只10元元,小鸡一只小鸡一只5元元,正好把钱买完。问母鸡、公鸡、小鸡各买多少只?正好把钱买完。问母鸡、公鸡、小鸡各买多少只?分析:设母鸡分析:设母鸡I只只,公鸡公鸡J只只,这里这里I的值可以是的值可以是0到到33,J的值可以的值可以0到到50,则小鸡为则小鸡为90-I-J只只,则则15*I+10*J+(90-I-J)*5=500,显然一个方程求两个未知数是不能直接求解。显然一个方程求两个未知数是不能直接求解。必须组合出所有可能的必须组合出所有可能的i,j值,看是否满足条件。值,看是否满足条件。

21、programrxy;vari,j,k:integer;beginfori:=0to33do/枚举母鸡的数量枚举母鸡的数量forj:=0to50do/枚举公鸡的数量枚举公鸡的数量begink:=90-i-j;if15*i+10*j+5*k=500thenwriteln(i:5,j:5,k:5);end;end.例例10求求100200之间的所有素数。之间的所有素数。分析:我们可对分析:我们可对100200之间的每一整数进行判断,判断它是否为素数,是则输之间的每一整数进行判断,判断它是否为素数,是则输出。而对于任意整数出。而对于任意整数i,根据素数定义,我们从,根据素数定义,我们从2开始,到开始

22、,到,找,找i的第一个约数。的第一个约数。若找到第一个约数,则若找到第一个约数,则i必然不是素数。否则必然不是素数。否则i为素数。为素数。programxy;vari:integer;x:integer;beginfori:=100to200dobeginx:=2;while(x=trunc(sqrt(i)and(imodx0)dobeginx:=x+1;end;ifxtrunc(sqrt(i)thenwrite(i:8);end;end.例例11试编写能够打印输出如下图形的程序:试编写能够打印输出如下图形的程序:#programxy;vari,j,k:integer;beginfori:=8

23、downto1do/总共要输出总共要输出8行内容行内容beginforj:=1to8-idowrite();/控制每行空格数目控制每行空格数目,这个循环可以写成:这个循环可以写成:fork:=2*i-1downto1dowrite(#);/控制每行中的个数控制每行中的个数writeln;end;end.此程序的设计是由两个并列循环加一个嵌套循环构成的。此程序的设计是由两个并列循环加一个嵌套循环构成的。各环的作用如下:各环的作用如下:(1)外层环控制打印的行数,此倒三角形共)外层环控制打印的行数,此倒三角形共8行,故外行,故外环的设置为递减型循环。环的设置为递减型循环。(2)嵌套在外环中的第一个并列循环为空格输出,根)嵌套在外环中的第一个并列循环为空格输出,根据图形变化控制输出不同数量的空格。据图形变化控制输出不同数量的空格。(3)外环内第二个并列循环为控制三角形每行中)外环内第二个并列循环为控制三角形每行中#号号的个数。的个数。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号