【用途】
用于你不知道确切的循环次数的时候。
【while】
一般形式
while (boolean表达式) do
(循环体)
fp运行到这里时
会先检查Boolean表达式的值[注:这里就是while和repeat的区别!]
当为true的时候 再执行你的循环体
[反之 当一开始Boolean表达式就为false的时候 他直接跳过 根本不执行循环体]
执行完一次之后 返回检查Boolean表达式的值
如果依旧为true 则继续执行循环体
否则循环结束 执行接下来的语句
【实例】
在我所接触到的题目中
while语句一般用于读入数据的处理上
比如题目要你读入一个字符串
并约定以'?'(或者其他符符号)作为结束的标志
那么此时 while语句就可以π上用场了
[code]
var ch : char;
s : string;
begin
s := '';
read(ch);
while ch<>'?' do
begin
s := s + ch;
read(ch);
end;
... ...
这就是这个程序的读入的处理了
应该说 在很多以字符读入的题目中
while语句是很有用的
(而且越到后来 你就会发现 很多题目算法其实很简单
反而在数据的读入处理上很纠结 这个时候你就一定一定要想到while了..)
[注:如果有的时候 你发 现你的code运行之后一直是黑屏(死循环)
那么你一定要确保你的while语句是对的
比如刚才的例子中 我的ch的值 是不断地改变的
也就是说 循环体中通常包括改变Boolean表达式值的语句
而往往初学者就忘记了这一点 所以导致Boolean表达式始终为true
而导致程序陷入死循环
还是拿刚才的例子来说吧
如果我没有写read(ch)这一句话 而你读入的字符串第一个字符也不是'?'
那么ch<>'?'就一直为真 so 电脑这个苕家伙就一直运行下去了..
= =;; 像我到后来写N长的题目的时候 最痛苦的莫过于差错了..
更痛苦的是 查了半天觉得主程序没错 而最后发现是while读入的问题的时候
真的是想撞墙啊...所以 童鞋你一定要注意!!!]
【repeat】
一般形式
repeat
(循环体)
until (Boolean表达式)
fp运行到这里
会先执行循环体 then检查Boolean表达式的值
当为true的时候 停止执行循环体
所以呢 repeat语句都至少执行一次循环体的
【实例】
我们就还是拿刚才while里面的例子来说吧
那么我们用repeat就应该这样写
//
var ch : char;
s : string;
begin
repeat
read(ch);
s := s + ch;
until ch='?';
... ...
其实最终的目的和效果都是一样的
喔 刚才漏了一点额
不仅是读入啊
到后来要你循环求解
比如万恶但是相当经典的“生日蛋糕问题”或者基础的转N进制问题
这些题目都是需要用到while和repeat
(转进制问题中 你用了while之后 就会感叹
哇塞 while真方便)
当然还有很多很多 这里就不列举了
[注:值得注意的依旧是注意表达式值的改变
repeat while中最常见的都是无限循环]
【比较while和repeat】
区别呢在上面也提到了 就再总结一下吧
1. repeat至少执行一次循环体
while最少一次都不执行
2. repeat是Boolean值为真时停止循环
while则是为真的时候继续循环
到实际的应用中
你就根据两者的差别来适当地选择啦
(刚开始的时候我觉得这俩是无所谓写哪个个
毕竟效果都一样 只不过写法不一样而已
但是到后来 根据题目的不同
你还是会发现其中的某一个比另一个较优
这个就得在你写题的过程中慢慢理会啦
不过如果你没有理会的话= =;;
那就哪个顺手写哪个吧..)
呃..
以上就是我总结的啦...
不知道你看不看得懂呃...
While语句
1.WHILE循环的执行形式 WHILE 布尔表达式 DO 语句
例如:
k:=10;
WHILE k>0 DO
BEGIN
Writeln (k);
k:=k-1
END;
其中
(1)WHIlE 和DO是PASCAL保留关键字,是WHILE循环语句的组成部分。
(2)保留关键字DO后面的“语法”只能是一条语句,称为“循环体”;如果循环 体中需要包含多个语句则应该如上例所示,采用一条复合语句。
2.WHILE循环的执行功能 当执行到WHILE语句时
(1)求出布尔表达式的值
(2)若布尔表达式的值为真,则执行循环体内的语句;若为“假”,执行步骤4
(3)重复步骤1和2
(4)循环结束,执行循环后面的语句。
Repeat-Until语句
1.REPEAT-UNTIL类型的循环的执行形式
REPEAT
语句1
语句2
……
语句n
UNTIL 布尔表达式
例如:以下循环求n=1+2+3+……+100
n:=0;t:=i;
REPEAT
n:=n+t; t:=t+1;
UNTIL t>100;
其中
(1)REPEAT和UNTIL是PASCAL保留关键字。
(2)在REPEAT和UNTIL之间的语句构成循环。在它们之间可以有任意多个语句,这一点和FOR,WHILE循环不同,FOR,WHILE循环体在语法上只允许一条语句。
2.REPEAT-UNTIL循环的执行功能
(1)遇到REPEAT语句后,即进入循环体,顺序执行循环体内的语句。
(2)遇到UNTIL语句后,求布尔表达式的值。若值为假,则返回步骤1;若为“真”,执行步骤3
(3)循环结束,执行UNTIL后面的下一条语句。
while 语句
执行一个语句,直到指定的条件为 false。
while (expression)
statements
参数
expression
必选项。Boolean 表达式,在循环的每次迭代前被检查。 如果 expression 是 true,则执行循环。如果 expression 是 false,则结束循环。
statements
可选项。expression 是 true 时要执行的一个或多个语句。
说明
while 语句在循环第一次被执行前检查 expression。如果 expression 此次是 false,则该循环一次都不被执行。
示例
下面示例说明了 while 语句的用法:
function BreakTest(breakpoint){
var i = 0;
while (i < 100)
{
if (i == breakpoint)
break;
i++;
}
return(i);
}
repeat 语句用于“重复执行循环体,一直到指定的条件为真时为止”。语法格式为:
repeat
语句1;
……
语句n;
until 布尔表达式;
repeat重复基本上有和while重复一样的描述循环计算的能力,但有一些不同:在repeat语句的结构中,布尔表达式求值在计算操作之后,而 while语句中,布尔表达式求值在计算操作之前,也就是说repeat至少执行一次循环体。while语句的成分语句只能是一个语句。因此,当重复动作包含多个语句时,要用begin和end ,使它变成一个复合语句。而repeat语句的保留字repeat和until已经起语句括号作用,可以包含多个语句而无须begin和end。 repeat语句中,当布尔表达式为true时结束循环,而while语句中,是当表达式为false时才结束循环。当描述由计算操作后的情况确定重复是否继续进行的计算时,通常用repeat语句描述。
repeat与while都是循环语句,下面配上例子进行讲解:
while例:
while not eof do
begin
readln(n);
writeln(n);
end;
while语句的基本结构式
while+布尔表达式+do+语句;
或
while+布尔表达式+do+begin
语句一
语句二
......
end;
如果在while与do之间的布尔表达式值为真时,那么就执行do后面的内容,然后返回到while与do之间的布尔表达式继续判断,如果真就一直类此循环。
repeat例:
repeat
readln(n);
writeln(n);
until eof;
这个跟while类似,不过是until后的布尔式为假时才继续循环,而且repeat与until之间可以夹带任意多条语句
一、关于for
循环次数是已知的,用for循环省事。
如:把"hello"连写10遍。
for i:=1 to 10 do write('hello ');
二、关于while
如果事先不能确定循环的次数,循环开始需要依靠其它条件得到满足才能启动就得用while
如:当我键入'y'时,就开始不停写"hello",
program testwhile;
var a:char;
bengin
read(a);
while a='y' do write('hello');
end.
输入的字符不是y,程序直接结束。如果是y,那就......, 哈哈
三、关于repeat
如果循环的次数不能事先确定,但循环一定要进行(至少也要进行一遍),直到满足了某种条件,才能停止,就得用repeat
如等我键入'n',就可以停止写"hello"了。
program testrepeat;
var a:char;
bengin
repeat
readln(a);
write('hello');
until a='n';
end.
运行时需要键入一个字符,如果这个字符不是n,就会再次要你键入,直接你厌烦了,输入n,才能消停,哈哈。