【用途】
用于你不知道确切的循环次数的时候。
【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则是为真的时候继续循环
到实际的应用中
你就根据两者的差别来适当地选择啦
(刚开始的时候我觉得这俩是无所谓写哪个个
毕竟效果都一样 只不过写法不一样而已
但是到后来 根据题目的不同
你还是会发现其中的某一个比另一个较优
这个就得在你写题的过程中慢慢理会啦
不过如果你没有理会的话= =;;
那就哪个顺手写哪个吧..)
呃..
以上就是我总结的啦...
不知道你看不看得懂呃...
参考资料:> <辛辛苦苦花半小时自己总结的啊啊啊啊...╮(╯﹏╰)╭