首页 PASCAL教学 PASCAL教程 PASCAL练习题 基础知识 常用算法 阶段测试 初赛试题 复赛题库 FP错误代码 留言板
 
第一章 简单程序
第一节 程序结构和基本语句
第二节 顺序结构程序与基本数据类型
第二章 分支程序
第一节 条件语句与复合语句
第二节 情况语句与算术标准函数
第三章 循环程序
第一节 程序结构和基本语句
第二节 Repeat 循环
第三节 While 循环
第四章 函数与过程
第一节 函数
第二节 自定义过程
第五章 自定义数据类型
第一节 数组与子界类型
第二节 二维数组与枚举类型
第三节 集合类型
第四节 记录类型和文件类型
第五节 指针类型与动态数据结构
第六章 程序设计与基本算法
第一节 递推与递归算法
第二节 回溯算法
第七章 数据结构及其应用
第一节 线性表
第二节 队列
第三节 栈
第四节 数组
第八章 搜索
第一节 深度优先搜索
第二节 广度优先搜索
第九章 其他常用知识和算法
第一节 图论及其基本算法
第二节 动态规划
   

第二节 repeat 循环

Repeat循环是直到型循环。

试将上一节的例3.1(打印出120的平方数表)程序改为 repeat 循环:

    Program Exam31_1

       Var a: byte

       Begin

           a:=1   writeln ( ' a ' : 8 ,   ' a*a ' : 8 )

           repeat

             writeln ( a :8a*a : 8)

             inc(a)                               {改变a的值 }

           Until a20

           Readln

       Emd.

 

程序中的Repeat循环格式为:

            repeat

                循环体语句;

            until 条件表达式;     {直到条件为真}

      Repeat循环首先执行由RepeatUntil括起来的循环体语句,然后检查Until后面的条件表达式:如果表达式结果为假,则继续执行循环体,接着继续检查Until后面的条件表达式,如此反复执行直到这个表达式结果为真时结束循环。Repeat循环体语句必须有能改变Until后面条件表达式值的语句,并最终使这个条件表达式的值为真,使循环自动结束。

程序中inc (a) 指令相当于a  : =a+1,常用的同类指令格式如下:

    (1) inc(x)          等同 x:=x+1

    (2) inc(x, n)      等同 x:=x+n

    (3) dec(x)         等同 x:=x1

    (4) dec(xn)   等同 x:=xn

 

[3.10]求两个自然数MN的最大公约数。

解:若自然数a既是M和约数,又是N的约数,则称aMN的公约数,其中最大的称为最大公约数。为了求得最大公约数,可以从最大可能的数(如MN)向下寻找,找到的第一个公约数即是最大公约数。

Pascal程序:

Program ex310;

Begin

  a := N+1;

  Repeat

    a := a-1;

  Until (M mod a=0) and (N mod a=0);

  writeln(a);

  Readln;

End.

 

 

[3.11]校体操队到操场集合,排成每行2,最后多出1;排成每行3,也多出1;分别按每行排4,5,6,都多出1;当排成每行7人时,正好不多。求校体操队至少是多少人?

:①设校体操队为X,根据题意X应是7的倍数,因此X的初值为7,以后用inc(x,7)改变X值;

   ②为了控制循环, 用逻辑变量yes为真(True) 使循环结束;

   ③如果诸条件中有一个不满足,  yes 的值就会为假(false),就继续循环。

Pascal程序:

program  Exam311;

var  x: word;  yes : boolean;

begin

   x:=0;

   repeat

     yes  :=true;  inc(x,7);

     if x mod 2 < > 1 then yes:=false;

     if x mod 3 < > 1 then yes:=false;

     if x mod 4 < > 1 then yes:=false;

     if x mod 5 < > 1 then yes:=false;

     if x mod 6 < > 1 then yes:=false;

   until yes;                                      {直到yes的值为真 }

   writeln('All =', x) ;  readln

end.

 

程序中对每个X值,都先给Yes 赋真值,只有在循环体各句对X进行判断时,都得到“通过”(此处不赋假值)才能保持真值。

 

[3.12]从键盘输入一个整数XX不超过10000),若X的各位数字之和为7的倍数,则打印“Yes”,否则中打印“No”。

解:本题考察的是数字分离的方法,由于X的位数不定,所以以往的解法不能奏效,这是介绍一种取余求商法。

1)用X mod 10分离出X的个位数字;

2)用X div 10将刚分离的个数数字删除,并将结果送回给X

3)重复(1)(2)直到X0

Pascal程序:

Program ex12;

var x,a,s   : integer;

begin

  s := 0;

  repeat

    a := x mod 10;

    x := x div 10;

    s := s+a;

  until x=0;

  if s mod 7=0 then writeln(‘Yes’)

                else writeln(‘No’);

  Readln;

end;

 

[3.13]19921992的乘积的末两位数是多少?

解:积的个位与十位数只与被乘数与乘数的个位与十位数字有关,所以本题相当于求199292相乘,而且本次的乘积主下一次相乘的被乘数,因此也只需取末两位参与运算就可以了。

Pascal程序:

Program ex313;

var a,t : integer;

Begin

  a := 1;

  t := 0;

  repeat

    t := t+1;

    a := (a*92) mod 100;

  until t=1992;

  writeln(a);

  Readln;

End.

 

[3.14]尼科彻斯定理:将任何一个正整数的立方写成一组相邻奇数之和。

     : 33=7+9+11=27            43=13+15+17+19=64

:从举例中发现:

  (1) n3正好等于n个奇数之和;

  (2) n个奇数中的最小奇数是从1开始的奇数序列中的第m个奇数,与 n 的关系为:  m=n (n 1) / 2+1

  (3) 奇数序列中第m个奇数的值为x,且 x= 2m1,比如: n=3时,m=3(3-1)/2+1=4,即3个奇数中最小的奇数是奇数序列中的第4个,它的值为x=(2m-1)=7 所以:33=7+9+11

  (4) 从最小的奇数值x开始,逐个递增2,连续n,t1开始计数,直到t=n为止。

Pascal程序:

Program Exam35

Var nmxts  :  integer

Begin

  write(input n:)  readln(n)         {输入N }

  m:=(n*(n-1) div 2)+1                   {找到第m个奇数 }

  x:=2*m-1 t:=1     {算出第m个奇数的值x,是所求的第一个}

  write(n*’,n,’*’,n,’=’,x){输出第一个}

  s:=x;                             {S计算和 }

  if  n1  then

  Repeat

    inc(x,2)                     { 计算下一个奇数 }

    write (+ ’,x)             {加上下一个奇数 }

    inc (t ) inc (sx)           { 计个数并累加和 }

  Until t=n                      {直到n }

  Writeln (= ’,s )

  Readln

End.

 

[3.15]猜价格:中央电视台的“幸运52”栏目深受观众喜爱,其中的“猜商品价格”的节目更是脍炙人口,现在请你编一个程序模拟这一游戏:由计算机随机产生2005000之间的一个整数,作为某件商品的价格,然后由你去猜是多少,若你猜的数大了,则计算机输出提示“Gao”,若你猜的数小了,则计算机输出提示“Di”,然后你根据提示继续猜,直到你猜对了,计算机会提示“Ok”,并统计你猜的总次数。

解:本题的游戏规则大家都清楚,要完成程序,必须把处理步骤理清:

  (1)用随机函数Random产生2005000之间的一个整数X

        2)你猜一个数A

        3)若AX,则输出“Gao”;

4)若AX,则输出“Di”;

(5)AX则输出“Ok”;

(6)重复(2)(3)(4)(5)直到A=X

       Pascal程序:

       Program ex315;

    Var t,X,a         : integer;

      Begin

Randomize;

X := Random(4800)+200;

t := 0;

Repeat

  t := t+1;

write(‘[‘,t,’] Qing cai yi ge zheng shu : ‘);

readln(a);

if a>x then writeln(‘Gao’);

if a<x then writeln(‘Di’);

if a=x then writeln(‘Ok’);

Until A=X;

Readln;

End.

 

习题3.2

1.求两个自然数MN的最小公倍数。(如果求三个或更多个数的最小公倍数呢?应如何解决)

2.小会议室里有几条相同的长凳,有若干人参加开会。如果每条凳子坐6,结果有一条凳子只坐有3;如果每条凳子坐5,就有4人不得不站着。求会议室里有多少人开会,有多少条长凳?

3.某动物饲养中心用1700元专款购买小狗(每只31)和小猫(每只21)两种小动物。要求专款专用,正好用完, 应当如何购买?请输出所有方案。

4.某整数X加上100就成为一个完全平方数,如果让X加上168 就成为另一个完全平方数。求X?

5.某次同学聚会,老同学见面个个喜气洋洋,互相握手问好。参加此次聚会者每人都与老同学握了一次手,共握903,试求参加聚会的人数?

6.用自然数300262205167分别除以某整数A,所得到的余数均相同。求出整数A以及相除的余数?

7.1600年前我国的一部经典数学著作中有题:“今有物,不知其数,三三数之,剩二;五五数之,剩三;七七数之,剩二,问物几何。”求最小解。

8.编程求出所有不超过1000的数中,含有数字3的自然数,并统计总数。

9.阿姆斯特朗数:如果一个正整数等于其各个数字的立方和,则该数称为阿姆斯特朗数(也称自恋数),如407430373,试编程求出1000以内的所有阿姆斯特朗数。  


© 版权所有 桐乡市高级中学计算机组 王建献 2005-
制作与维护:
桐高计算机组 王建献 邮箱:omnislash2000@163.com
建议使用:800*600分辨率,IE5.0以上版本浏览器