| 网站首页 | 学校介绍 | 德育工作 | 家长学校 | 教学教研 | 信息技术 | 书香飘逸 | 资源下载 | 靓图欣赏 | 雁过留声 | 语文 | 
最新公告:     已所不欲,勿施于人,已之所欲,施之于人!  [adminit  2007年4月19日]            生命如流水,只有在他的急流与奔向前去的时候,才美丽,才有意义。 ——张闻天  [旗峰中学  2006年7月8日]            不要让忧愁压在你的心头,也不要让犹豫缠住你的脚步,满天的阴霾终会被风吹散,而晴朗的天空就是你无比辉煌的前程。只有在遭受痛苦经历时,仍然能笑,仍然能乐观的生活的人,才称得起是真正坚强的人。生活是一面镜子,你对它笑,他就对你笑;你对它哭,他也对你哭。  [旗峰中学  2006年7月8日]            勤学如春起之苗,不见其增,日有所长;辍学如磨刀之石,不见其损,日有所亏。  [旗峰中学  2005年11月3日]            志不强者智不达,言不信者行不果。  [旗峰中学  2005年11月3日]        
您现在的位置: 旗峰中学校园网 >> 信息技术 >> 信息奥赛 >> Pascal >> 文章正文
专题栏目
更多内容
最新推荐 更多内容
相关文章
初赛综合练习题
计算机基础知识试题详解
基础知识练习题(二)
基础知识练习题(一)
初赛模拟试题(七)
初赛模拟试题(六)
初赛模拟试题(五)
初赛模拟试题(四)
完善程序训练(三)
完善程序训练(二)
更多内容
第十四讲 循环语句           ★★★
第十四讲 循环语句
作者:佚名 文章来源:本站原创 点击数: 更新时间:2005-11-23 21:48:01

第一部分  单重循环

一、for 语句(也称“计数循环”)

  for 语句用来描述已知重复次数的循环结构。for 语句有两种形式:

    (1) for 控制变量:=初值 to 终止值 do 循环体;

    (2) for 控制变量:=初值 downto 终止值 do 循环体;

     其中:循环体可以是简单语句,也可以是复合语句;

  第一种形式的for 语句是递增循环。首先将初值赋给控制变量,接着判断控制变量的值是否小于或等于终止值,若是,则执行循环体,在执行了循环体之后,自动将控制变量的值改为它的后续值,并重新判断控制变量的值是否小于或等于终止值。当控制变量的值大于终止值时,退出for循环,执行for语句之后的语句。第一种形式的for 语句是递减循环。首先将初值赋给控制变量,接着判断控制变量的值是否大于或等于终值,若是,则执行循环体,在执行了循环体之后,自动将控制变量的值改为它的前趋值,并重新判断是否大于或等于终止值。当控制变量的值小于终止值时,退出for循环,执行for语句之后的语句。for 语句中的初值、终值、控制变量的数据都必须是顺序类型。当初值和终止值确定后,重复的次数就确定不变了,并且控制变量在重复语句内不能施加任何赋值操作。

例:计算1+2+3+……+99+100

 program jia;
  var n,sum:integer;
 begin
  sum:=0;
  for i:=1 to 100 do
   sum:=sum+i;
  writeln(sum);
 end.

二、while语句(叫也“当型循环”)

  while语句用于“当满足某一条件时进行循环”的情况。while语句的语法格式:

     while 布尔表达式 do 循环体;

  循环结束条件在进入循环体之前测试,若最初的测试值为false,则根本不进入循环体,也就是说while循环是是属于当型循环。为了能使while重复能终止,循环体中一定要有影响布尔表达式的操作,否则该循环就是一个死循环。

例:计算从0到某个数之间所有奇数的和。

 program jishu;
  var odds,limit,sum:integer;
 begin
  readln(limit);
  sum:=0;
  odds:=1;
  while odds<=limit do
   begin
    sum:=sum+odds;
    odds:=odds+2
   end;
  writeln(sum:1)
 end.

三、repeat语句(也称为“直到型循环”)

  repeat 语句用于“重复执行循环体,一直到指定的条件为真时终止循环”。

     语法格式为:repeat

            语句1;

            ……

            语句n;

          until 布尔表达式;

  repeat重复基本上有和while重复一样的描述循环计算的能力,但有一些不同:在repeat语句的结构中,布尔表达式求值在计算操作之后,而while语句中,布尔表达式求值在计算操作之前,也就是说repeat至少执行一次循环体。while语句的成分语句只能是一个语句。因此,当重复动作包含多个语句时,要用begin和end ,使它变成一个复合语句。而repeat语句的保留字repeat和until已经起语句括号作用,可以包含多个语句而无须begin和end。repeat语句中,当布尔表达式为true时结束循环,而while语句中,是当表达式为false时才结束循环。当描述由计算操作后的情况确定重复是否继续进行的计算时,通常用repeat语句描述。

四、goto语句

  goto语句是无条件转向语句,它可以控制直接从程序的一条语句转向另一条语句。

   goto语句的语法形式为:   goto 标号;

  其中标号必须是不超过4位整数的正整数或标识符组成,但标号必须在说明语句中先予以说明。goto语句会使程序出现一种称为“乱面条”的结构,因此你最好还是不要去用。

练习:

1.编程计算从1到20每个数的平方值。

program xumin17;
var m:integer;
  pf:longint;
begin
 for m:=1 to 20 do
  begin
   pf:=m*m;
   writeln(m,'*',m,'=',pf);
  end;
 readln;
end.

2、编程计算 S1=1+2+3+……+99+100, S2=1+2+3+……n

program xumin18;
var
m,n:integer;
s:longint;
begin
write('n=');
readln(n);
for m:=1 to n do
 s:=s+m;
writeln('s=',s);
readln;
end.


3、计算(阶乘)n!,其中 n 由键盘输入。(n!=1*2*3*……*n)

program xumin19;
var
 m,n:integer;
 jc:longint;
begin
 write('n=');
 readln(n);
 jc:=1;      (注意阶乘变量必须初始化为1,为什么?)
 for m:=1 to n do
   jc:=jc*m;
 writeln(n,'!=',jc);
readln;
end.

4、按正序和反序输出26个英文字母。


PROGRAM xumin20;
VAR
 m:integer;
 zf:char;
BEGIN
 FOR m:=65 to 90 do
  begin
   zf:=chr(m);
   write(zf);
  end;
 WRITELN;
 FOR m:=90 downto 65 do
  begin
   zf:=chr(m);
   write(zf);
 end;
 readln;
END.

5、输出1到1000之间的能够被3整除的数。

program xumin21;
var
 m:integer;
begin
 for m:=1 to 100 do
  if m mod 3=0 then write(m, ' ');
 readln;
end.

6、统计1到1000之间能够同时被3和7整除的数的个数,并计算他们的和。

program xumin22;
var m,gs,he:integer;
begin
 for m:=100 to 300 do
  if (m mod 3=0) and (m mod 7=0)
    then begin
       he:=he+m;
       gs:=gs+1;
    end;
 writeln('gs=',gs,' ','he=',he);
 readln;
end.

7、编程求100到300之间有多少个其各位数字之和为5的倍数,并逐个输出。(例如,172,1+7+2=10)

program xumin23;
var a,b,c,gs,m:integer;
begin
 for m:=100 to 300 do
  begin
   a:=m div 100;
   b:=(m -a*100) div 10;     (掌握如何把某整数各数字拆开)
   c:=m mod 100;
   if (a+b+c) mod 5 =0
     then begin
        gs:=gs+1;
        write(m,' ');
     end;
  end;
 writeln('gs=',gs);
 readln;
end.

8、若三位数abc,满足a*a*a+b*b*b+c*c*c=abc,则称abc为水仙花数 例如:153,因为13+53+33=1+125+27=153。求100-999中的水仙花数。

program xumin24;
var gs,a,b,c,i:integer;
begin
 for i:=100 to 999 do
  begin
  a:=i div 100;
  b:=(i-a*100) div 10;
  c:=i mod 10;
  if a*A*a+b*b*b+c*c*c=i
  then begin
     writeln(a,'*',a,'*',a,'+',b,'*',b,'*',b,'+',c,'*',c,'*',c,'=',i);
     gs:=gs+1;
    end;
 end;
 writeln('gs=',gs);
 readln;
end.

9、求2-1000中的守形数(若某数的平方,其低位与该数本身相同,则称该数为守形数。例如25,25*25=625,625的低位25与原数相同,则称25为守形数

program xumin25;
var
 i,a:integer;
begin
 for i:=2 to 9 do
  begin
   a:=(i*i) mod 10;
   if a=i then writeln(i,'*',i,'=',i*i);
  end;
  writeln;
 for i:=10 to 99 do
  begin
   a:=(i*i) mod 100;
   if a=i then writeln(i,'*',i,'=',i*i);
  end;
  writeln;
 for i:=100 to 999 do
  begin
   a:=(i*i) mod 1000;
   if a=i then writeln(i,'*',i,'=',i*i);
   end;
readln;
end.

10、判断某数是否质数(素数)。

分析:质数(素数)是只能被1和它本身整除,也即某数m是质数,则,2到
m-1中的任何数都不能整除m。

program xumin26;
var x,i,flag:integer;
begin
 readln(x);
 flag:=1;                    (标记初始化)
 for i:=2 to x-1 do
  if x mod i =0 then flag:=0;          (注意:这是一个标记)
 if (x>1) and (flag=1) then writeln('Yes') else writeln('No');
 readln;
end.

11、找3-1000中的亲密数对,注意不要重复显示。(如果A的因子和等于B,B的因子和等于A,且A<>B,则称A,B为亲密数对。例如284和220,220的因子有1,2,4,5,11,20,22,44,55,110,他们和为284,284的因子有1,2,4,71 112,他们和为220。

12、输入n,输出1到n中的所有完全数(完全数指所有的因数之和等于它本身的数,如6=1+2+3,6是完全数)

13、已知Faibonacai(费波那契)数列的前几项0、1、1、2、3、5、8 13 21 34……,编程输出求出前20项。

program fibonacai;
var f1,f2,f3,t:integer;
begin
 f1:=0;
 f2:=1;
 write(f1,' ',f2,' ');
 for t:=3 to 20 do
  begin
   f3:=f1+f2;
   write(f3,' ');
   f1:=f2;
   f2:=f3;
  end;
readln;
end.

14、数列A1,A2,A3,A4,……,A20 。已知 A1=0,A2=1,A3=1, A4=A1+2*A2+A3, A5=A2+2*A3+A4 …输出求出前20项

program shulie;
var a1,a2,a3,a4,t:integer;
begin
 a1:=0;
 a2:=1;
 a3:=1;
 write(a1,' ',a2,' ',a3,' ');
 for t:=3 to 20 do
  begin
   a4:=a1+2*a2+a3;
   write(a4,' ');
   a1:=a2;
   a2:=a3;
   a3:=a4;
  end;
readln;
end.

思考题:

1、求两个自然数m,n的最小公倍数和最大公约数,其中m,n通过键盘输入,最小公倍数和最大公公约数通过屏幕输出;

第二部分  多重循环(循环的嵌套)

1、什么是循环的嵌套?

   当重复语句的语句部分本身又是一个循环语句时,则称这样的循环为循环的嵌套!

2、应用举例:

1)

题1、若一个三位数abc,满足abc=a3+b3+c3,则称abc为水仙花数。试求出所有的水仙花数。要求采用多重循环语句完成。

题2、若一个四位数abcd,满足abcd=a4+b4+c4+d4,则称abcd为玫瑰花数。试求出所有的玫瑰花数。要求采用多重循环语句完成。

题3、若一个五位数abcde,满足abcde=a5+b5+c5+d5+e5,则称abcde为五角星数。试求出所有的五角星数。要求采用多重循环语句完成。

2)编程输出以下形状的字符组合:

题1 题2 题3
*****
*****
*****
*****
*****

**
***
****
*****
    *
   **
  ***
 ****
*****
program tuxing;
var i,j:integer;
begin
for i:=1 to 5do
 begin
  
  for j:=1 to 5 do
    write('*');
  writeln;
 end;
readln;
end.
program tuxing;
var i,j:integer;
begin
for i:=1 to 5do
 begin
  for j:=1 to i do
    write('*');
  writeln;
 end;
readln;
end.
program tuxing;
var i,j:integer;
begin
for i:=1 to 5do
 begin
  write('':6-i) ;
  for j:=1 to i do
    write('*');
  writeln;
 end;
readln;
end.

题4 题5
    *
   ***
  *****
 *******
*********
*********
 *******
  *****
   ***
    *
program tuxing;
var i,j:integer;
begin
for i:=1 to 5do
 begin
  write('':6-i) ;
  for j:=1 to 2*i-1 do
    write('*');
  writeln;
 end;
readln;
end.
program tuxing;
var i,j:integer;
begin
for i:=5 downto 1 do
 begin
  write('':6-i) ;
  for j:=1 to 2*i-1 do
    write('*');
  writeln;
 end;
readln;
end.

3)输出九九乘法表。

program jjb;
var
m,n:integer;
begin
 for m:=1 to 9 do
  begin
   for n:=1 to m do
   write(m,'x',n,'=',m*n:2,' ');   (注意:这里为什么用write)
   writeln;             (注意:这里为什么用writeln)
  end;
 readln;
end.

4)求质数表:输入一个自然数n,输出1到之间的所有质数。(当n比较大时,就应该采用快速法)

program xumin27;
var x,i,n,flag,y:integer;
begin
 readln(n);
 for x:=1 to n do
  begin
   flag:=1;
   y:=x div 2;{y:=trunc(x/2);Y:=trunc(sqrt(x))} (为什么可以这样优化?)
   for i:=2 to y do
     if x mod i =0 then flag:=0;
   if (x>1) and (flag=1) then write(x,' ');
  end;
 readln;
end.

文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 管理登录 |