第七课WHILE循环与REPEAT_第1页
第七课WHILE循环与REPEAT_第2页
第七课WHILE循环与REPEAT_第3页
第七课WHILE循环与REPEAT_第4页
第七课WHILE循环与REPEAT_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第七课 WHILE 循环与 REPEAT一、WHILE 循环对于 for 循环有时也称为计数循环,当循环次数未知,只能根据某一条件来决定是否进 行循环时,用 while语句或rep eat语句实现循环要更方便。while 语句的形式为:while do ;其意义为:当布尔表达式的值为true时,执行do后面的语句。while 语句的执行过程为: 判断布尔表达式的值 ,如果其值为真 ,执行步骤 2,否则执行步骤 4; 执行循环体语句 (do 后面的语句 ); 返回步骤 1; 结束循环 , 执行 while 的下一个语句。当布尔表达说明:这里 while 和 do 为保留字, while 语句的特

2、点是先判断,后执行。 式成立时,重复执行 do 后面的语句 (循环体 )。例1、求恰好使 s=1+1/2+1/3+1/n的值大于10时n的值。分析:恰好使s的值大于10意思是当表达式s的前n-1项的和小于或等于10,而加上 了第n项后s的值大于10。从数学角度,我们很难计算这个n的值。故从第一项开始,当s的值小于或等于10时,就继续将下一项值累加起来。当s的值超过10时,最后一项的项数即为要求的 n。程序如下:vars : real;n : integer; n 表示项数begins:=0.0;n:=0;while s=10 do 当s的值还未超过10时beginn:=n+1; 项数加 1s:

3、=s+1/n; 将下一项值累加到send;writlen(n=,n); 输出结果end.例 2、求两个正整数 m 和 n 的最大公约数。分析:求两个正整数的最大公约数采用的辗转相除法求解。以下是辗转的算法:分别用 m,n,r 表示被除数、除数、余数。 求 m/n 的余数 r. 若r=0,则n为最大公约数.若工0,执行第步. 将n的值放在m中,将r的值放在n中. 返回重新执行第步。程序如下 :program ex4_4;var m,n,a,b,r:integer;beginwrite(Input m,n:);readln(m,n);a:=m;b:=n;r:=a mod b;while r0 do

4、 begina:=b;b:=r;r:=a mod b;end;writeln(The greatest common divide is:,b:8);end.二、直到循环( REPEAT until 语句)用 while 语句可以实现 当型循环 ,用 repeat-until 语句可以实现 直到型循环 。 repeat-until 语句的含义是: 重复执行循环,直到指定的条件为真时为止 。直到循环语句的一般形式Repeat;until ;其中 Repeat、 until 是 Pascal 保留字, repeat 与 until 之间的所有语句称为循环体。说明: repeat 语句的特点是:先执

5、行循环,后判断结束条件,因而至少要执行一次循环体。repeat 是一个语句, repeat-until 是一个整体,它是一个(构造型)语句,不要误认为 until 是另一个语句。 rep eat语句在布尔表达式的值为真时不再执行循环体,且循环体可以是若干个语句,不需用 begin 和 end 把它们包起来, repeat 和 until 已经起了 begin 和 end 的作用。 while 循 环和rep eat循环是可以相互转化的。对于例 2 中求两个正整数的最大公约数,程序可用 repeat-until 循环实现如下:varm,n,a,b,r : integer;beginwrite(I

6、nput m,n=);readln(m,n);a:=m;b:=n;repeatr:=a mod b;a:=b;b:=r;until r=0;writeln(The greatest common divide is,a);end.以上我们已介绍了三种循环语句。 一般说来, 用 for 循环比较简明, 只要能用 for 循环, 就尽量作用 for 循环。只在无法使用 for 循环时才用 while 循环和 repeat-until 循环, 而且 while 循环和 repeat-until 循环是可以互相替代的。 for 循环在大多数场合也能用 whiel 和 repeat-until 循环来代

7、替。一般 for 循环用于有确定次数循环,而 while 和 repeat-until 循环用于未确定循 环次数的循环。当一个循环的循环体中又包含循环结构程序时,我们就称之为循环嵌套。三、循环结构程序设计例3求1!+2!+10!的值。分析:这个问题是求 1 0自然数的阶乘之和,可以用 for 循环来实现。程序结构如下:for n:=1 to 10 dobeginN!的值at 累加 N! 的值 tend显然,通过10次的循环可求出1!,2!,10!,并同时累加起来,可求得S的值。而求T=N!, 又可以用一个 for 循环来实现 :t=1;for j:=1 to n dot:=t*j;因此 ,整个

8、程序为 :program ex4_5;var t,s:real;i, j,n:integer;beginS:=0;for n:=1 to 10 do begint:=1;for j:=1 to n dot:=t*j;S:=S+t;end;writeln(s=,s:0:0);end.n!,我以上的程序是一个二重的 for 循环嵌套。这是比较好想的方法,但实际上对于求们可以根据求出的(n-1)!乘上n即可得到,而无需重新从1再累乘到n。程序可改为:program ex4_5;var t,s:real;i,j,n:integer;beginS:=0;t:=1;for n:=1 to 10 do be

9、gint:=t*n;S:=S+t;end;writeln(s=,s:0:0);end.显然第二个程序的效率要比第一个高得多。第一程序要进行1+2+10=55次循环,而第二程序进行10次循环。如题目中求的是1 !+ 2!+ 1000 !,则两个程序的效率区别更明显。例4 一个炊事员上街采购 ,用500元钱买了 90只鸡, 其中母鸡一只 15元,公鸡一只 10 元,小鸡一只 5 元,正好把钱买完。问母鸡、公鸡、小鸡各买多少只?分析:设母鸡I只,公鸡J只,则小鸡为90-I-J只,则15*1+ 10* J+(90-l-J)*5=500,显然一个 方程求两个未知数是不能直接求解。必须组合出所有可能的 i

10、,j 值,看是否满足条件。这里 I 的值可以是 0 到 33, J 的值可以 0 到 50。源程序如下:programr ex4_6;var i,j,k:integer;beginfor i:=1 to 5 do for j:=1 to 8 dobegink:=90-i-j;if 15*i+10*j+5*k=500 then writeln(i:5,j:5,k:5);end;end.例 5、求 100 200 之间的所有素数。分析:我们可对 100 200 之间的每一整数进行判断,判断它是否为素数,是则输出。而对于任意整数i,根据素数定义,我们从 2开始,到,找i的第一个约数。若找到第一个 约数,则 i 必然不是素数。否则 i 为素数。源程序如下:vari : integer;x : integer;beginfor i:=100 to 200 dobeginx:=2;while (x=trunc(sqrt(i)and(i mod x0)dobeginx:=x+1;end;if xtrunc(sqrt(i) then write(i:8);end;end.练习1、输入一个正整数 n将n分解成质因数幕的乘积形式。例如: 36=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论