版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第五章第五章 重复结构重复结构河师大附中信息技术 重复控制结构为计算机程序描述重复计算所提供的控制手段。一个重复控制结构需指明以下三件事情: 1被重复执行的语句; 2是否重复的条件; 3具体的重复方式。 在PASCAL语言,用for,while和repeat三种语句描述重复控制结构。第一节第一节 FOR语句语句 for语句用来描述已知重复次数的重复结构。FOR语句有二种格式: 1.for 控制变量:=初值 to 终值 do 语句; 2.for 控制变量:=初值 downto 终值 do 语句; 为了正确使用for语句,需遵守以下几点约定: 1for语句的控制变量、初值、终值的数据类型应一致,且
2、限于整型、 布尔型和字符型等对函数ord 有意义的数据类型,即序数类型; 2初值与终值一经确定,重复次数就确定不变了。 3控制变量在重复语句内不能施加任何赋值操作; 4for语句正常结束后,控制变量值无意义。 例例5-1 打印输出大写英文字符A到Z,以及对应的ASCII的序号。 Program example5_1; var i : char; begin for i := A to Z do write(i:4,ord(i):4); readln; end. 例例5-2 由键盘输入N(N max then max:=a; if amin then min:=a; end; s:=(s-min
3、-max)/8; writeln(s:5:3); readln; end. 循环的嵌套:在一个循环体内,还包含有另一个循环的形式,称之为循环的嵌套或多重循环。按照循环嵌套的重数,分别叫做二重循环、三重循环、四重循环等等。 例例5-6 打印输出九九乘法表,按以下的格式输出。 * 1 2 3 4 5 6 7 8 9 1 1 2 3 4 5 6 7 8 9 2 2 4 6 8 10 12 14 16 18 3 3 6 9 12 15 18 21 24 27 4 4 8 12 16 20 24 28 32 36 5 5 10 15 20 25 30 35 40 45 6 6 12 18 24 30 3
4、6 42 48 54 7 7 14 21 28 35 42 47 56 63 8 8 16 24 32 40 48 56 64 72 9 9 18 27 36 45 54 63 72 81 Program example5_6; var i,j : integer; begin write(*); for i := 1 to 9 do write(i:5); writeln; for i := 1 to 9 do begin write(i); for j := 1 to 9 do write(i*j:5); writeln; end; end. 在上述程序的执行部分中,一至三行为打印输出 *
5、 和1至9数字。以下是一个二重循环,其中i 做的是外循环,表示打印输出的行数;j 做的是内循环,表示一行内打印输出数的个数。 例例5-7 百钱买百鸡:用一百钱买一百只鸡,公鸡五钱一只,母鸡三钱一只,小鸡一钱买三只,每种鸡至少买一只,编程打印输出共有多少种不同的买法? Program example5_7; var i,j,k : integer; begin for i := 1 to 19 do for j := 1 to (100-i*5) div 3 do begin k := (100-5*I-3*j)*3; if i+j+k = 100 then writeln(i:10,j:10,
6、k:10); end; end. 在上面的程序中,我们采用的是“枚举法”。它是计算机解题的一种常用的方法。它的基本思路是:一一枚举各种可能的情况,并判断那一种可能是符合要求的解。在程序中变量i代表公鸡的只数,它从1变化到19,因为公鸡最多只能买19只;变量j代表母鸡的只数,它从1变化到(100-i*5) div 3;变量k代表小鸡的只数,如果公鸡的只数i和母鸡的只数j确定以后,小鸡的只数k可以直接求出来。如果符合百钱买百鸡,就打印输出。 例例5-8 打印“*”字三角形:从键盘输入一个自然数N(1N9),根据N的值,打印输出对应的“*”字三角形,例如: N = 4 输出: * * * * * *
7、 * * * * * * * * * * Program example5_8; var i,j,n : integer; begin write(N = ); readln(n); for i := 1 to n do begin write(:40-i*2); for j := 1 to i do write(*:2); for j := i-1 downto 1 do write(*:2); writeln; end; end.第二节第二节 while语句语句 while语句用于“当满足某一条件时进行循环”的情况。 语句格式: while 布尔表达式 do 语句; 使用while语句要注
8、意: 1循环结束条件在进入循环体之前测试,若最初的测试值为false, 则根本不进入循环体; 2为了能使while重复能终止,循环体中一定要有影响布尔表达式的操作, 否则该循环就是死循环。 例例5-9 有一张纸,其厚度为0.1毫米,将它对折多少次,其厚度将超过珠穆朗玛峰的高度。 Program example5_9; var i : byte; r : real; begin i := 0; r := 0.0001; while r 0 do begin s := s+n mod 10; n := n div 10; end; writeln(S = ,s);end. 例例5-11 输入一个正
9、整数,将这个正整数的各位数倒过来,并打印输出。 Program example5_11; var i,n,s : longint; begin write(Input N : ); readln(n); s := 0; while n 0 do begin s := s*10 + n mod 10; n := n div 10; end; writeln(S = ,s); end. 例例5-12 输入两个正整数,求这两个正整数的最大公约数。 算法:采用辗转相除法求m和n的最大公约数。即:设m = n+r (0r 0 do begin c := a mod b; a := b; b := c;
10、end; writeln(The greatest common divisor is ,a); end.例例5-13 输入两个正整数,求这两个正整数的最小公倍数。 Program example5_13; var a,b,c,d : longint;begin write(A = ); readln(a); write(B = ); readln(b); d := a*b; while b 0 do begin c := a mod b; a := b; b := c; end; writeln(The lease common multiple is ,d div a);end. Whil
11、e 语句也可相嵌套,形成多重循环。 例例5-14 输入一个大于1的自然数N,将N分解成质因数的乘积。例如:N = 120120 = 2*2*2*3*5 Program example5_14; var i,n : longint; f : boolean; begin write(N = ); readln(n); write(n, = ); f := false; i := 2 ; while n = i do begin while n mod i = 0 do begin if f then write(*) else f := true; write(i); n := n div i;
12、 end; i := i+1; end; end.例例5-15 打印输出一百到一亿之间的,既是完全平方数又是回文数的所有的正整数(完全平方数是一个正整数的平方数,回文数即为左右对称的正整数)。例如121,它是11的平方,也是左右对称的自然数。 Program example5_15; var i,j,m : longint; begin i := 10; while i 0 do begin m := m*10+j mod 10; j := j div 10; end; if m = i*i then writeln(i,*,i,=,i*i); i := i+1; end; end. 例例5-
13、16 求2到1000之间的素数。一行打印十个素数。 Program example5_16; var i,k,n : integer; prime : boolean; begin for i := 2 to 1000 do begin prime := true; n := trunc(sqrt(i); k := 2; while (k = n) and prime do begin if i mod k = 0 then prime := false; k := k+1; end; if prime then write(i:8); end; end. 程序中 1trunc(x)是截尾函数
14、,将实数x的小数部分截去,只取其整数部分, 返回值为整型。 2sqrt(i)是平方根函数,返回i的平方根值,返回值为实型 第三节第三节 repeat语句语句 repeat语句用于“重复执行循环体,直到指定的条件为真时为止”。 语句格式: repeat 语句1; 语句2; 语句n; until 布尔表达式; repeat重复基本上有与while重复一样的描述循环计算的能力,但有三点不同: 1在repeat重复结构中,布尔表达式求值在计算操作之后,而在while重复结构中,布尔表达式求值在计算操作之前。 2while语句的成分语句只能是一个语句。因此,当重复动作包含几个语句时,需用begin 和e
15、nd,使它们变成一个复合语句。而repeat 语句的保留字 repeat 和until已起语句括号作用,可以包含多个语句而无需begin和end。 3repeat重复结构中,仅当布尔表达式值为true时结束重复,而while 重复结构中,是当布尔表达式值为false时才结束重复。 一般地说;“repeat 语句 until 布尔表达式;”能用while重复结构表示: “while NOT (布尔表达式) DO 语句;” 在上述等价表示中,同样的计算操作出现两次。因此,当描述由计算操作后的情况确定重复是否继续进行的计算时,通常用repeat结构描述。 例例5-17 有一大堆核桃,两个两个拿,余下
16、一个;三个三个拿,余下两个;四个四个拿,余下三个;以此类推,直至九个九个拿,余下八个。问这一大堆核桃最少是几个? Program example5_17; var i :word; begin i := 10; repeat i := i+1; until (i mod 2 = 1) and (i mod 3 = 2) and (i mod 4 = 3) and (i mod 5 = 4) and (i mod 6 = 5) and (i mod 7 = 6) and (i mod 8 = 7) and (i mod 9 = 8); writeln(i); end. 例例5-18 有四个自然数
17、,它们的和为45,而第一个数加上2,等于第二个数减去2,同时等于第三个数乘以2,也等于第四个数除以2,以次打印输出这四个数。 Program example5_18; var i : byte; begin i := 0; repeat i := i+2; until (i-2)+(i+2)+(i div 2)+(i*2) = 45; writeln(i-2:5,i+2:5,i div 2:5,i*2:5); end. 例例5-19 求由键盘输入的正整数N的所有约数的和。 Program example5_19; var n,i,s: integer; begin write(Input N
18、: ); readln(n); s := 0; i := 0; repeat i := i+1; if n mod i = 0 then s := s+i; until i = n; writeln(S = ,s); end. 例例5-20 利用格里高利公式:/4 = 1-1/3+1/5-1/7+1/9-1/11 可以求出的值。要求精确到数点后的第六位。 Program example5_20; var n,s : longint; t,pi : real; begin pi := 0; t := 1; n := 1; s := 1; repeat pi := pi+t; n := n+2;
19、s := -s; t := s/n until abs(t) 0.000001; pi := pi*4; writeln(Pi = , pi:0:6) end. 运行结果: pi = 3.141596 例例5-21 A、B两地相距200公里,在一次军事行动中,A、B两支军队作相向运动。A军每小时行军5公里,B军每小时行军8公里。有一个骑着摩托车的通讯兵,与A军同时出发,其行驶的速度为每小时45公里,为行进中的两军传递信息。他碰到B军后,算跑了一趟,然后折回驶向A军;碰到A军后,也算跑了一趟,再折回驶向B军。如此来来回回,直至A、B两军之间的距离小于0.1公里为止,问通讯兵共行驶多少趟? Pro
20、gram example5_21; var s,v,t :real; n : byte; begin n := 0; s := 200; v := 8; repeat t := s/(45+v); s := s-(8+5)*t; n := n+1; v := 13-v; until s 0.1; writeln(n, Times); end. 例例5-22 寻找怪数:有一种奇怪的自然数,它的比其小的所有因子之和等于它本身,例如:6 = 1+2+3,其中1、2、3都是6的因子,编程找出10000之内的所有怪数。 Program example5_22; var i,j,s : integer;
21、begin for i := 2 to 10000 do begin s := 1; for j := 2 to i div 2 do if i mod j = 0 then s := s+j; if s = i then writeln(i); end; end. 例例5-23 设有一个NM方格的棋盘(1N100,1M100)。求出该棋盘中包含有多少个正方形、多少个长方形(长方形不包括正方形)。例如:当N = 2,M = 3时: 正方形的个数有8个:即边长为1的正方形有6个;边长为2的正方形有2个。 长方形的个数有10个: 21的长方形有4个: 12的长方形有3个: 31的长方形有2 个:
22、32的长方形有1个: 输入输出示例: N = 2 M = 3 ZFX = 8 CFX = 10 Program example5_23; var i,j,m,n : word; zf,cf : longint; begin repeat write(N = ); readln(n); write(M = ); readln(m); until (n = 100) and (m = 100); zf := 0; cf := 0; for i := 1 to n do for j := 1 to m do if i = j then zf := zf+(m+1-j)*(n+1-i) else cf
23、 := cf+(m+1-j)*(n+1-i); writeln(zfx = ,zf); writeln(cfx = ,cf); end. 例例5-24 在如图所示的方格中,不重复地填入数字1、2、3、4、5、6。 要求右边的数字比左边的数字大,下边的数字比上边的数字大,编程 打印输出各种填写方法。 Program example5_24; var a,b,c,d : byte; begin for a := 2 to 3 do for b := a+1 to 5 do for d := a+1 to 5 do if b d then begin c := 14-a-b-d; if c d th
24、en begin writeln(1:2,a:2,b:2); writeln(c:2,d:2,6:2); writeln(_); end; end; end. 例例5-25 有一个自然数,它的各位数字的和,能被17整除。这个数的后继数(即这个数加1)的各位数字的和,也能被17整除。求具有这种特性的最小的那个自然数。 Program example5_25; var f : boolean; i,s,m,t : integer; begin f := false; i := 1; repeat i := i+1; s := 0; m := i; while m 0 do begin s := s
25、+ m mod 10; m := m div 10; end; if s mod 17 = 0 then begin s := 0; m := i+1; while m 0 do begin s := s+ m mod 10; m := m div 10; end; if s mod 17 = 0 then f := true; end; until f; writeln(i); end. 例例5-26 哥德巴赫猜想指出:任何一个大于6的偶数,都可以表示成两个素数的和。例如:8 = 3+5,44 = 13+31 等。试编程在6至100范围内验证哥德巴赫猜想。 Program example5_
26、26; var i,j,k,m,n : integer; f,b : boolean; begin i := 6; repeat j := 3; f := true; while (j = i div 2) and f do begin b := true; k := i-j; m := 2; n := trunc(sqrt(k); while b and (m 100; end. 例例5-27 在如图所示的圆圈中,不重复地填入数字1、2、3、4、5、6。要求每条边上三个数之和都相同,编程打印输出各种填法。Program example5_27;var s,n,a,b,c,d,e,f : in
27、teger;begin n := 0; for a := 1 to 6 do for b := 1 to 6 do if b a then for c := 1 to 6 do if (c a) and (c b) then for d := 1 to 6 do if (d a) and (d b) and (d c) then for e := 1 to 6 do if (e a) and (e b) and (e c) and (e d) then begin f := 21-a-b-c-d-e; s := a+b+c; if (c+d+e = s) and (a+f+e = s) the
28、n begin n := n+1; writeln(No.,n:2, : ,a:4); writeln(b:10,f:4); writeln(c:8,d:4,e:4); readln; end; end;end.例例5-28 下面的地图共有12个区域,用四种不同的颜色去着色,要求相邻区域的颜色不可相同,编程打印输出各种不同的着色方案。Program example5_28;var n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12 : byte;begin n := 0; for a1 := 1 to 4 do for a2 := 1 to 4 do if a1a
29、2 then for a3 := 1 to 4 do if (a3a1) and (a3a2) then for a4 := 1 to 4 do if (a4a1) and (a4a3) then for a5 := 1 to 4 do if (a5a4) and (a5a1) then for a6 := 1 to 4 do if (a6a1) and (a6a5) and (a6a2) then for a7 := 1 to 4 do if (a7a2) and (a7a6) then for a8 := 1 to 4 do if (a8a2) and (a8a3) and (a8a7) then for a9 := 1 to 4 do if (a9a3) and (a9a4) and (a9a8) t
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年延长石油油气储运考试题库含答案
- 北京警察学院《日语听力》2024 - 2025 学年第一学期期末试卷
- 通信原理总复习
- 2026年口腔医疗管理公司员工行为规范管理制度
- 轻骑集团ERP方案草案模板
- 甘肃省白银市2026届九年级上学期期末考试物理试卷(含答案)
- 2025 小学五年级道德与法治国家发展历程了解课件
- 2025年特色小镇文化旅游产业项目技术创新与旅游产业创新生态构建可行性研究报告
- 2025年农村电商物流配送一体化解决方案与技术创新前景研究
- 智能养老社区老年人社交娱乐平台在2025年技术创新可行性报告
- ICH《M10:生物分析方法验证及样品分析》
- 国家开放大学电大24210丨学前儿童科学教育活动指导(统设课)期末终考题库
- 【读后续写】2021年11月稽阳联考读后续写讲评:Saving the Daisies 名师课件-陈星可
- 教育培训班项目可行性研究报告
- 人参健康食品营销策划
- 万科物业服务指南房屋和设施维修管理
- 2024年人参项目营销策划方案
- 工会职工大会制度实施细则范本
- ups拆除施工方案
- GB/T 21196.4-2007纺织品马丁代尔法织物耐磨性的测定第4部分:外观变化的评定
- 四川省宜宾市第一中学高一化学上学期期末试题含解析
评论
0/150
提交评论