收藏 分享(赏)

第七课WHILE循环与REPEAT.doc

上传人:HR专家 文档编号:5921781 上传时间:2019-03-21 格式:DOC 页数:6 大小:33.50KB
下载 相关 举报
第七课WHILE循环与REPEAT.doc_第1页
第1页 / 共6页
第七课WHILE循环与REPEAT.doc_第2页
第2页 / 共6页
第七课WHILE循环与REPEAT.doc_第3页
第3页 / 共6页
第七课WHILE循环与REPEAT.doc_第4页
第4页 / 共6页
第七课WHILE循环与REPEAT.doc_第5页
第5页 / 共6页
点击查看更多>>
资源描述

1、第七课 WHILE 循环与 REPEAT一、WHILE 循环对于 for 循环有时也称为计数循环,当循环次数未知,只能根据某一条件来决定是否进行循环时,用 while 语句或 repeat 语句实现循环要更方便。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 表示项数begin s:=0.0;n:=0;while s0 dobegina:=b;

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

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

5、eadln(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 循环来代替。一般 for 循环用于有确定次数

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

7、4_5;var t,s:real;i,j,n:integer;beginS:=0;for n:=1 to 10 dobegint:=1;for j:=1 to n dot:=t*j;S:=S+t;end;writeln(s=,s:0:0);end.以上的程序是一个二重的 for 循环嵌套。这是比较好想的方法,但实际上对于求 n!,我们可以根据求出的(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 dobegint:=t*n;S:

8、=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*I+ 10* J+(90-I-J)*5=500,显然一个方程求两个未知数是不能直接求解。必须组合出所有可能的 i,j

9、值,看是否满足条件。这里 I 的值可以是 0 到 33,J 的值可以 0 到 50。源程序如下:programr ex4_6;var i,j,k:integer;beginfor i:=1 to 5 dofor 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、求 100200 之间的所有素数。分析:我们可对 100200 之间的每一整数进行判断,判断它是否为素数,是则输出。而对于任意整数 i,根据素数定义,我们从 2 开始,到 ,找 i 的第一个约数。若找到第一个约数,则

10、 i 必然不是素数。否则 i 为素数。源程序如下:vari : integer;x : integer;beginfor i:=100 to 200 dobeginx:=2;while (x0)dobeginx:=x+1;end;if xtrunc(sqrt(i) then write(i:8);end;end.练 习1、输入一个正整数 n,将 n 分解成质因数幂的乘积形式。例如:36=22*322、输出如下图形。3、编写一程序,验证角谷猜想。所谓的角谷猜想是:“对于任意大于 1 的自然数n,若 n 为奇数,则将 n 变为 3*n+1,否则将 n 变为 n 的一半。经过若干次这样的变换,一定会使 n 变为 1。“4有一堆 100 多个的零件,若三个三个数,剩二个;若五个五个数,剩三个;若七个七个数,剩五个。请你编一个程序计算出这堆零件至少是多少个?

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 经营企划

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报