当(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.
请大家考虑上述两个程序为何会有这样有不同之处。
浙公网安备 33010602011771号