四章第3 循环结构的程序设计
For循环
在实际应用中,会经常遇到许多有规律性的重复运算,这就需要掌握本章所介绍的循环结构程序设计。在Pascal语言中,循环结构程序通常由三种的循环语句来实现。它们分别为FOR循环、当循环和直到循环。通常将一组重复执行的语句称为循环体,而控制重复执行或终止执行由重复终止条件决定。因此,重复语句是由循环体及重复终止条件两部分组成。
 
  一、计数循环(for/to/do)语句的一般格式
  for <控制变量>:=<表达式1> to <表达式2> do <语句>;
  for <控制变量>:=<表达式1> downto <表达式2> do <语句>;
  其中fortodowntodoPascal保留字。表达式1 与表达式2的值也称为初值和终值。
  二、For语句执行过程
  先将初值赋给左边的变量(称为循环控制变量);
  判断循环控制变量的值是否已"超过"终值,如已超过,则跳到步骤⑥;
  如果末超过终值,则执行do后面的那个语句(称为循环体);
  循环变量递增(对to)或递减(对downt o)1;
  返回步骤②;
  循环结束,执行 for 循环下面的一个语句。
  三、说明
①循环控制变量必须是顺序类型,初值和终值可以是常量、变量、表达式,且与控制变量类型一致。例如,可以是整型、布尔型、字符型等,但不能为实型。
  ②循环控制变量的值递增或递减的规律是:选用to则为递增;选用downto则递减。
  ③所谓循环控制变量的值"超过"终值,对递增型循环,"超过"指大于,对递减型循环,"超过"指小于。
  ④循环体可以是一个基本语句,也可以是一个复合语句。
  ⑤循环控制变量的初值和终值一经确定,循环次数就确定了。但是在循环体内对循环变量的值进行修改,常常会使得循环提前结束或进入死环。建议不要在循环体中随意修改控制
变量的值。
  ⑥初值终值在开始重复之前计算,在重复执行过程中,其值不受影响;若初值“超过”终值,不执行循环,循环的次数为0
⑦循环次数等于│终值-初值│+1或│ord(初值)ord(终值)│+1
  四、应用举例
1计算123+…+100的值。
    分析:我们用累加方法,初值为1,终值为100,循环100while语句简单例子次每次将循环控制变量i的值迭加加入一个变量S中,循环结束后此变量中就为所求值。程序如下:
program  p4_22;
var i,s:integer;
    begin
s:=0;
     for i:=1 to 100 do
     s=s+i;
writeln(s);
    end.
思考:s=246100
      S=1+1/2+1/3+1/4++1/100
      S=12+22+32++1002
2输入一个自然数x,求这个自然数的所有约数之和S
  分析:解决这一问题关键是出所有约数,即x能被y整除,则有x mod y=0,然后从1x进行循环判定
  程序如下:
  program p4_23;
var
    x,y,s : integer
    begin
     write('Enter x=');readln(x);
      s:=0;
     for y:=1 to x do
      if x mod y=0 then s:=s+y;
     writeln( x=,x, s=,s);
      end.
例3  编程出四位整数abcd中满足下述关系的数:(ab+cd)(ab+cd)=abcd
Program p4_24;
  Var
      i,m,n,k:integer;
  begin
      for i:=1000 to 9999 do
        begin
            m:=i div 100;
            n:=i mod 100;
            k:=(m+n)*(m+n);
            if  k=i then writeln(i)
        end;
  end.
以上方法叫“枚举法”,又称“穷举法”,它是计算机解题的一种常用方法。
WHILE循环
 一、WHILE循环
  对于for循环有时也称为计数循环,当循环次数未知,只能根据某一条件来决定是否进行循环时,用while 语句或repeat语句实现循环要更方便。

  while语句的形式为:
  while <布尔表达式> do <语句>
  其意义为:当布尔表达式的值为true时,执行do后面的语句。
 二、 while语句的执行过程为:
  判断布尔表达式的值,如果其值为真,执行步骤2,否则执行步骤4;
  执行循环体语句(do后面的语句);
  返回步骤1;
  结束循环,执行while的下一个语句。
  说明:这里whiledo为保留字,while语句的特点是先判断,后执行。 当布尔表达式成立时,重复执行do后面的语句(循环体)
 三、举例
 例1 、求恰好使s=1+1/2+1/3++1/n的值大于10n的值。
  分析:"恰好使s的值大于10"意思是当表达式s的前n-1项的和小于或等于10,而加上了第n项后s的值大于10。从数学角度,我们很难计算这个n的值。故从第一项开始,当s的值小于或等于10时,就继续将下一项值累加起来。当s的值超过10时,最后一项的项数即为要求的n
  程序如下:
  var
    s : real;
    n : integer;n表示项数}
  begin 
   s:=0.0;n:=0;
   while s<=10 do{当s的值还未超过10时}
    begin
     n:=n+1;{项数加1
     s:=s+1/n;{将下一项值累加到s
    end;
   writlen('n=',n);{输出结果}
  end.
2、求两个正整数mn的最大公约数。
  分析:求两个正整数的最大公约数采用的辗转相除法求解。以下是辗转的算法:
  分别用m,n,r表示被除数、除数、余数。
  ①求m/n的余数r.
  ②若r=0,n为最大公约数.r0,执行第③步.
  ③将n的值放在m,r的值放在n.
  ④返回重新执行第①步。
  程序如下:
  program ex4_4;
  var m,n,a,b,r:integer;
  begin
    write('Input m,n:');
    readln(m,n);
    a:=m;b:=n;r:=a mod b;
    while r<>0 do
    begin
     a:=b;b:=r;
     r:=a mod b;
    end;
    writeln('The greatest common divide is:',b:8);
  end.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。