ImageVerifierCode 换一换
格式:DOCX , 页数:28 ,大小:31.64KB ,
资源ID:10967502      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10967502.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第三章循环程序.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第三章循环程序.docx

1、第三章循环程序第三章循环程序在编程中经常遇到需要多次规律相同的重复处理,这就是循环问题。Turbo Pascal采用不同的循环方式来实现,常用的环循有三种: for、repeat、while. 第一节for 循环for循环是一种自动计数型循环。例3.1 试打印出120的自然数。解: 用a代表120各数,同时也用a兼作计数,以控制循环次数; 让a从1开始; 输出a; a自动计数(加1),如果未超越所规定的循环范围则重复步骤,否则结束循环。Pascal程序:Program Exam12;Var a: byte;Begin for a:=1 to 20 do Writeln (a); ReadlnE

2、nd. 程序中 for a:=1 to 20 do Writeln (a); 是for循环语句。for 循环语句有两种格式:(1) for循环变量:=初值 To 终值 do 语句; (2) for循环变量:=初值downto 终值 do 语句;第(1)种格式的初值小于等于终值,循环变量值按自动加1递增变化;第(2)种格式的初值大于或等于终值,循环变量值按自动减1递减变化。for 循环是 (以递增1或以递减1) 计数型循环。比如: 若将例3.1程序改为倒计数(递减)循环,则输出201的自然数数:Program Exam31;Var a: byte;Begin for a:=20 downto 1

3、 doWriteln(a) ; ReadlnEnd.例3.2打印出30至60的偶数。解:方法一: = 1 * GB3 设a表示30至60的所有的数,可用for循环列出; = 2 * GB3 用式子a mod 2=0筛选出其中的偶数并输出。Pascal程序:Program ex32;Var a : integer;Begin For a := 30 to 60 do If (a mod 2=0) then writeln(a); Readln;End.在这个程序中,for循环后的循环语句是一个条件分支语句。 方法二:我们知道,在式子a=2*n中,若n取自然数1、2、3、,时,则a依次得到偶数2、

4、4、6、。因此要想得到30至60的偶数,就可以让上面式子中的n取15至30的自然数就可以了。所以本题还可以按以下步骤处理: = 1 * GB3 设n表示15至30的所有自然数,可用for循环列出; = 2 * GB3 用式子a := 2*n求出其中的偶数; = 3 * GB3 将结果输出至屏幕。Pascal程序:Program ex32;Begin For n := 15 to 30 do Begin a := 2*n; Writeln(a);End; Readln;End. 例3.3自然数求和:编一个程序,求从1至100的自然数的和。解: 令S0; 令a表示1至100的自然数,用循环列出;

5、将这些自然数用公式S:=S+a 逐一累加到S中去; = 4 * GB3 循环结束后,S即为1至100的自然数的和,输出即可。Pascal程序:Program ex33;var s,a : integer;Begin S := 0; For a := 1 to 100 do S := S+a; Writeln(S=,S); Readln;End. 例3.4一个两位数x,将它的个位数字与十位数字对调后得到一个新数y,此时y恰好比x大36,请编程求出所有这样的两位数。解: 用for循环列举出所有的两位数,x为循环变量; 用公式a:= x div 10分离出x的十位数字; 用公式b:= x mod 1

6、0分离出x的个位数字; 用公式y:= b*10+a合成新数y; = 5 * GB3 用式子y-x=36筛选出符合条件的数x并输出。Pascal程序:Program ex34;Begin For x := 10 to 99 do Begin a := x div 10; b := x mod 10; y := b*10+a; if y-x=36 then writeln(x);End;Readln;End. 例3.5 把整数3025从中剪开分为30和25两个数,此时再将这两数之和平方,(30+25)2=3025计算结果又等于原数。求所有符合这样条件的四位数。解:设符合条件的四位数为N,它应当是一

7、个完全平方数,用(a*a)表示。 为了确保N=(a*a)在四位数(10009999)范围内,可确定a在3299循环; 计算N=a*a;将四位数N拆分为两个数n1和n2; 若满足条件(n1+n2)*(n1+n2)N 就输出 N 。Pascal程序:Program Exam35;Var N,a, x,n1,n2: Integer;Begin for a:=32 to 99 do begin N:=a*a; n1:= N div 100; 拆取四位数的前两位数 n2:= N-n1*100; 拆取四位数的后两位数 X:=n1+n2; if x*x=N then writeln (N); end; Re

8、adlnEnd. 例3.6用“*”号打印出如下的长方形图案。* * * *解: 上面给出的图例共有4行,我们可以用一个循环控制行的变化; 在每行中又有9列,我们可以在前面控制行的循环中再套一个循环来控制列的变化。Pascal程序:Program ex36;Begin For a := 1 to 4 do 外循环控制行的变化 Begin For b := 1 to 9 do 内循环控制列的变化 write(*); Writeln; 输出一行的“*”后换行End;Readln;End.程序中的循环对于a的每个值都包含着一个b=(19)次的内循环。外循环for a 将内循环for b包含在里面,称为

9、for循环的嵌套。嵌套形式如: for a:=n1 to n2 do for b:=m1 to m2 do 循环体语句; 例3.7 打印出九九乘法表:解:设a为被乘数,范围为19;b为乘数,范围为1a;乘式为a*b=(a,b的乘积),则 a=1: b=1a 1*1=1 a=2: b=1a 2*1=2 2*2=4 a=3: b=1a 3*1=3 3*2=6 3*3=9 a=4: b=1a 4*1=4 4*2=8 4*3=13 4*4=16 : : a=9 b=1a 9*1=9 9*2=18 9*9=81从上面分解的横行中看到共有9行,这里的“行”数变化与a的变化从19相同,可用a控制“行”的循环

10、;每“行”里面相乘的次数与b的范围相关,由b控制每“行”里面的“内部”循环;内循环被包含在最里层,执行完每“行”的内部循环,就到下一“行”去执行新“行”里面的循环,每“行”都拥有形式相同的( b=1a )内循环。即每到一“行”都要执行该“行”的内循环。这里所指的“行”可以理解成抽象的行,不一定是实际上具体对应的行,可以是一个处理“块”。Pascal程序:Program Exam37;Var a,b: byte;Begin for a:=1 to 9 do 外循环 begin for b:=1 to a do 内循环 write(a,* ,b,= ,a*b, :3); writeln end;

11、ReadlnEnd. 根据这种格式还可以实现多层循环嵌套,例如: for a:=n1 to n2 do for b:=m1 to m2 do for c:=k1 to k2 do 循环体语句; 例3.8从七张扑克牌中任取三张,有几种组合方法?请编程输出所有组合形式。解:设每次取出三张分别为a,b,c。用三重循环分别从17的范围里取值;为了排除取到重号,用(a-b)*(b-c)*(a-c) 0进行判断。Pascal程序:program Exam38;const n=7;var a,b,c,t: integer;Begin t:=0; for a:=1 to n do for b:=1 to n

12、do for c:=1 to n do if (a-b) * (b-c) * (a-c) 0 then Begin inc (t); writeln (a:3, b:3, c:3) End; writeln ( total:, t :5); readln End. 例3.9 数学上把除了1和它本身,没有别的数能够整除它的自然数叫做素数(或质数)。现在由键盘输入一个自然数N,编程判断N是否是素数,是则输出“Yes”,否则输出“No”。解:根据定义,对于给定的自然数N,只需判断除1和它本身外,还有没有第三个自然数即可。 令K从1循环至N; 根据N mod K是否为0可统计K的约数的个数; 若N的约

13、数的个数超过2个,则判定N不是素数。Pascal程序:Program Exam39;Var n,m,k,t: integer;Begin write(N=); ReadLn(N);t:=0; for k:=1 to N do 外循环 if N mod k=0 then t := t+1; 如果N是奇数 if t2 then writeln(No) else writeln(Yes); Readln;End.程序中的变量yse为布尔(或逻辑)类型(Boolean)。布尔值只有两个: True(真) False(假) 布尔值与条件判断结果为真(条件成立)或为假(条件不成立)的作用相同,常用于条件语

14、句和循环语句中。上面程序中用 if yes and (t mod 7=0) then writeln;实现每行打印七个素数换行,程序中布尔变量yes为真,在逻辑上表示是素数;关系式(t mod 7=0) 的值为真时,表示该行输出素数巳是个;用and将这两个“条件”连起来是作一种布尔(逻辑)运算。Pascal 共有四种逻辑运算符: and (与) 两条件都为True时,其结果值为True;否则为False; or (或) 两条件中只要有一个为True ;其结果值为True;否则为False; xor (异或) 两条件的逻辑值不相同时,其结果值为True;否则为False; not (非) 条件为

15、True时,其结果值为False;否则为True;(取反) 习题3.1:1.打印出1至20的平方数表。2.打印出100至200之间的奇数。3. 鸡兔同笼(用for循环程序完成)4.一辆快车和一辆慢车开往同一地点,快车票价为18元,慢车票价为13. 5元,共售出400张,共计5940元,求快车票和慢车票各多少张?.5.求出能被5整除的所有四位数的和。6.在下面式子中的二个内填入一个合适的同样的数字,使等式成立。3*6528=3*82567.有一个三位数,它的各位数字之和的11倍恰好等于它自身,请编程求出这个三位数。8.在自然数中,如果一个三位数等于自身各位数字之立方和,则这个三位数就称为是水仙花

16、数。如:153=13+53+33,所以153是一个水仙花数。求所有的水仙花数。9.编程序打印出下列图案:平行四边形 等腰三解形菱形* * * * * * * * * * * * * *10.编程打印出如下图案: 1 222 33333 4444444 55555555511.有三种明信片:第一种每套一张,售价2元;第二种每套一张,售价4元; 第三种每套9张,售价2元。现用100元钱要买100张明信片,要求每种明信片至少要买一套,问三种明信片应各买几套?请输出全部购买方案。12.某人想把一元钱换成伍分、贰分、壹分这样的零钱, 在这三种零钱中每种零钱都至少各有一个的情况下,共有多少种兑换方案。并打

17、出这些方案。13.14. 输出100 以内的全部素数,要求每行显示5 个。15.A、B两个自然数的和、差、积、商四个数加起来等于243,求A、B两数。16.百钱买百鸡:今有钱100元,要买100只鸡,公鸡3元一只,母鸡1元一只,小鸡1元3只,若公鸡、母鸡和小鸡都至少要买1只,请编程求出恰好用完100元钱的所有的买鸡方案。第二节repeat 循环Repeat循环是直到型循环。试将上一节的例3.1(打印出120的平方数表)程序改为 repeat 循环: Program Exam31_1; Var a: byte; Begin a:=1; writeln ( a : 8 , a*a : 8 ) ;

18、repeat writeln ( a :8,a*a : 8); inc(a); 改变a的值 Until a20; Readln Emd. 程序中的Repeat循环格式为: repeat 循环体语句; until 条件表达式; 直到条件为真 Repeat循环首先执行由Repeat和Until括起来的循环体语句,然后检查Until后面的条件表达式:如果表达式结果为假,则继续执行循环体,接着继续检查Until后面的条件表达式,如此反复执行直到这个表达式结果为真时结束循环。Repeat循环体语句必须有能改变Until后面条件表达式值的语句,并最终使这个条件表达式的值为真,使循环自动结束。程序中inc

19、(a) 指令相当于a : =a+1,常用的同类指令格式如下: (1) inc(x) 等同 x:=x+1; (2) inc(x, n) 等同 x:=x+n; (3) dec(x) 等同 x:=x1; (4) dec(x,n) 等同 x:=xn; 例3.10求两个自然数M和N的最大公约数。解:若自然数a既是M和约数,又是N的约数,则称a为M和N的公约数,其中最大的称为最大公约数。为了求得最大公约数,可以从最大可能的数(如M或N)向下寻找,找到的第一个公约数即是最大公约数。Pascal程序:Program ex310;Begin a := N+1; Repeat a := a-1; Until (M

20、 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 :

21、 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) ; readlnend. 程序中对每个X值,都先给Yes 赋真值,只有在循环体各句对X进行判断时,都得到“通过”(此处不赋

22、假值)才能保持真值。 例3.12从键盘输入一个整数X(X不超过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

23、 x=0; if s mod 7=0 then writeln(Yes) else writeln(No); Readln;end; 例3.13求1992个1992的乘积的末两位数是多少?解:积的个位与十位数只与被乘数与乘数的个位与十位数字有关,所以本题相当于求1992个92相乘,而且本次的乘积主下一次相乘的被乘数,因此也只需取末两位参与运算就可以了。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(

24、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 (n1) / 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个,

25、用t从1开始计数,直到t=n为止。Pascal程序:Program Exam35;Var n,m,x,t,s : 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 (s,x); 计个数并累加和 Until

26、t=n; 直到n个 Writeln (= ,s ) ; ReadlnEnd. 例3.15猜价格:中央电视台的“幸运52”栏目深受观众喜爱,其中的“猜商品价格”的节目更是脍炙人口,现在请你编一个程序模拟这一游戏:由计算机随机产生200至5000之间的一个整数,作为某件商品的价格,然后由你去猜是多少,若你猜的数大了,则计算机输出提示“Gao”,若你猜的数小了,则计算机输出提示“Di”,然后你根据提示继续猜,直到你猜对了,计算机会提示“Ok”,并统计你猜的总次数。解:本题的游戏规则大家都清楚,要完成程序,必须把处理步骤理清:(1)用随机函数Random产生200至5000之间的一个整数X; (2)你

27、猜一个数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; BeginRandomize;X := Random(4800)+200;t := 0;Repeat t := t+1;write(,t, Qing cai yi ge zheng shu : );readln(a);if ax then writeln(Gao);if ax then writeln(Di);if a=x then writeln(Ok

28、);Until A=X;Readln;End. 习题3.21.求两个自然数M和N的最小公倍数。(如果求三个或更多个数的最小公倍数呢?应如何解决)2.小会议室里有几条相同的长凳,有若干人参加开会。如果每条凳子坐6人,结果有一条凳子只坐有3人;如果每条凳子坐5人,就有4人不得不站着。求会议室里有多少人开会,有多少条长凳?3.某动物饲养中心用1700元专款购买小狗(每只31元)和小猫(每只21元)两种小动物。要求专款专用,正好用完, 应当如何购买?请输出所有方案。4.某整数X加上100就成为一个完全平方数,如果让X加上168 就成为另一个完全平方数。求X?5.某次同学聚会,老同学见面个个喜气洋洋,互

29、相握手问好。参加此次聚会者每人都与老同学握了一次手,共握903次,试求参加聚会的人数?6.用自然数300,262,205,167分别除以某整数A,所得到的余数均相同。求出整数以及相除的余数?7.1600年前我国的一部经典数学著作中有题:“今有物,不知其数,三三数之,剩二;五五数之,剩三;七七数之,剩二,问物几何。”求最小解。8.编程求出所有不超过1000的数中,含有数字3的自然数,并统计总数。9.阿姆斯特朗数:如果一个正整数等于其各个数字的立方和,则该数称为阿姆斯特朗数(也称自恋数),如407430373,试编程求出1000以内的所有阿姆斯特朗数。第三节While 循环While循环是当型循环。例3.8 前面第一章例1.2的鸡兔同笼,头30,脚90, 求鸡兔各几只?在此用下面方法编程求解。解: 设鸡为J只,兔为T只。已知头为H, 脚为F。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1