当(WHILE)语句

当语句的语法格式是:

一最简单格式(当循环体语句只有一句时):while 布尔表达式 do  循环体语句;

二:当循环体语句两句以上时,要用begin end; 其作用相当于括号
while 布尔表达式 do begin
 语句序列;(循环体)
end;

其作用是,当布尔表达式的值为 TRUE时,才会运行语句序列(循环体),否则循环将不会被执行,即从循环头部就退出,而转向执行 END后的语句。

一句话:先判断条件是否满足,然后是否要执行.有可能一次也不执行循环体(当开始时条件就不满足)

例:计算 18!

var I:integer;
   x:longint;
begin
   I:=0;
   X:=1;
   While I<18 do begin
      I:=I+1;
      X:=x*I;
   End;
   Writeln(x);
End.

请大家把此程序与上一节的 [例 5、 2]进行比较,看两种循环在运用时有何不同。

WHILE语句是在循环开始时就判断布尔表达式的值时否为 TRUE,如果为 TRUE,就进入循环,运行循环体,如果为 FALSE,就不运行循环体,而直接转向执行 END后的语句 WRITELN( X);。

REPEAT与 WHILE循环的示意框图如下所示:

从上述框图中可以看出,要使用循环语句时,必须要确定循环体及条件(布尔表达式)两个重要因素,亦即首要考虑的是:我要重复执行哪些语句,我要重复到什么时候为止!

[例 5、 4],从键盘上输入两个整数 M, N,求它们的最大公约数。

分析:我们只需从 M, N中更小的一个数开始,每次让其减 1,直到这个数能同时被 M和 N数整除为止。在下述程序中,我们在程序头部调用了 CRT单元,是为了使用 CLRSCR语句来清屏,即把输出屏幕上的字符清除干净。

Uses crt;                              {调用CRT单元}
Var m,n,x:integer;
Begin
Clrscr;                             {清屏}
Write(‘Please input 2 numbers:’)
Readln(m,n);
If m>n then x:=n else x:=m;
While (n mod x<>0) or (m mod x<>0) do begin
x:=x-1;
End;
Writeln(x);
End.
上述程序如果改用 REPEAT语句来做的话,程序为:
uses crt;
var m,n,x:integer;
begin
write(‘Please input 2 numbers:’)
Readln(m,n);
If m>n then x:=n+1 else x:=m+1;
Repeat
X:=x-1;
Until (m mod x=0) and (n mod x=0);
Writeln(x);
End.
请大家考虑上述两个程序为何会有这样有不同之处。
posted on 2008-11-02 19:48  sandboy  阅读(307)  评论(0)    收藏  举报