您现在的位置:小学生自学网>> 信息>> pascal语言>> 基础教程

PASCAL第十一讲:当(WHILE)语句

作者: 来源: 发布时间:2009年05月12日 点击数:
 

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

例:计算 18! [例 5、 3]

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.

请大家考虑上述两个程序为何会有这样有不同之处。



练习

  1、计算下列式子的值:
   (1)1+3+……+99
   (2)1+2+4+8+……+128+256

  2、输入一个整数,计算它各位上数字的和。(注意:是任意位的整数)

  3、输入一整数A,判断它是否质数。(提示:若从2到A的平方根的范围内,没有一个数能整除A,则A是质数。)

  4、求两个数的最小公倍数和最大公约数。(提示:公约数一定小于等于两数中的小数,且能整除两数中的大数。公倍数一定大于等于两数中的大数,且是大数的倍数,又能给两数中的小数整除。)

  5、编写一个译码程序,把一个英语句子译成数字代码。译码规则是以数字1代替字母A,数字2代替字母B,……,26代替字母Z,如遇空格则打印一个星号‘*’,英文句子以‘.‘结束。

  6、求水仙花数。所谓水仙花数,是指一个三位数abc,如果满足a^3+b^3+c^3=abc,则abc是水仙花数。 

   7、“百钱买百鸡”是我国古代的著名数学题。题目这样描述:3文钱可以买1只公鸡,2文钱可以买一只母鸡,1文钱可以买3只小鸡。用100文钱买100只鸡,那么各有公鸡、母鸡、小鸡多少只?与之相似,有"鸡兔同笼"问题。