循环结构程序设计_第1页
循环结构程序设计_第2页
循环结构程序设计_第3页
循环结构程序设计_第4页
循环结构程序设计_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第3章循环结构程序设计第3章循环结构程序设计第1节For循环程序实例【问题描绘】计算一副扑克牌的点数,此中牌A为1点,牌J、Q、K分别为11、12、13点,大、小王不算点。【问题剖析】依据题意,要计算一副扑克牌的点数,能够先求出一栽花色牌的点数和,再乘以4即可。进一步剖析,求一栽花色牌的点数和,即是求113的连续自然数之和。我们用S表示所求数的和,用T表示加数,这样能够让T从1变化到13,每次让T不停加入到S中,就能够求出S的值,最后乘以4即可。【算法设计】自然语言置初值,即S=0,T=1;使S=S+T,所求出的和仍放入S中;使T增添1,即T=T+1;假如T小于等于13,转第二步,不然转第五步

2、;输出计算结果。程序流程图和结构化流程(N-S)图S:=0,T:=1TNSS+T,T=T+1输出S的值【程序设计】程序清单programex3_1;25Pascal编程入门vars,t:integer;begins:=0;S置初值为0fort:=1to13doFor循环语句s:=s+t;writeln(total:,s*4);end.运转示例total:364【知识拓展】1在程序办理过程中,常常需要对某一条或一组语句重复履行多次,以最后达成某项任务,这就是循环。关于重复次数已知,而不依靠循环中语句的结果,常用计数循环(for/to/do语句)。2for循环语句格式:格式一:for控制变量:=初

3、值to终值do循环体语句;格式二:for控制变量:=初值downto终值do循环体语句;此中for、to、downto、do为保存字,do后边的语句称为循环体。此中循环控制变量能够是整型、字符或布尔型,但不可以为实型。一般地,能够是次序种类数据。初值、终值表达式往常要与控制变量的种类相同。在for语句中假如使用的是to,称为递加型计数循环语句,假如使用的是downto,称为递减型计数循环语句。3For语句的履行过程:先将初值表达式的值计算出来并赋给循环控制变量。判断循环控制变量的值能否已“超出”终值(关于递加型循环来说,“超出”是指“大于”;对递减型循环来说,“超出”是指“小于”)。如已超出,

4、则跳到步骤。假如未超出终值,则履行do后边的语句(称为循环体)。循环变量递加(或递减)。返回履行步骤。循环结束,履行for循环下边的一个语句4使用For语句的的注意事项:循环控制变量一定为次序种类。比如,能够是整型、字符型、布尔型,不可以为实型,如:fori=3.5to8.5dowrite(i)是错误的。循环控制变量的值递加或递减的规律是:假如递加型循环,则按Succ函数规律变26第3章循环结构程序设计化;假如递减型循环,则按Pred函数规律变化。比如:fork:=atozdowrite(k)将按次序打印出26个小写英文字母“abcdz”。循环体能够是一条基本语句,也能够是一条复合语句。比如:

5、forj:=1tondobeginreadln(x);wreteln(x+1)end;循环语句的范围直到end才结束。循环控制变量不得在循环体内再被赋值。比如:forx;=1to10dobeginx:=2*z+1;end;是错误的。循环控制变量的初值和终值一经确立,循环次数就确立不变了。循环的次数可用以下公式计算:0若初值终值递加型循环的循环次数=Ord(终值)-Ord(初值)+1若初值终值0若初值终值递减型循环的循环次数=Ord(初值)-(终值)+1若初值终值【同步练习】1宰相的麦子:相传古印度宰相达依尔,是国际象棋的发明者。有一次,国王因为他的贡献要奖赏他,问他想要什么。达依尔说:“只需在

6、国际象棋棋盘上(共64格)摆上这么些麦子就行了:第一格一粒,第二格两粒,后边一格的麦子老是前一格麦子数的两倍,摆满整个棋盘,我就感恩不尽了。”国王一想,这还不简单。于是令人扛来一袋麦子,可很快用完了,又扛来一袋,很快用完了国王很奇异,请你帮国王计算一下,要多少麦子。(1立方米的麦子约为1.42108粒)问题剖析:关于编程类问题的描绘,要特别注意正确、全面地理解题意,要学会从描绘性语言中抽象出详细的数据,并成立数学模型。在此题中依据“国际象棋棋盘上共有64格,第一格一27Pascal编程入门粒,第二格两粒,后边一格的麦子老是前一格麦子数的两倍”的题意,我们能够成立数学模型:第一格为20,第二格为

7、21,第三格为22,第64格为263,设64格中应放麦子数为S,则可用下边的公式表示:S=20+21+22+23+2631立方米的麦子约为1.42108粒,那么S粒麦子的体积T为:T=S/(1.42108)立方米。这样我们将问题转变为一般数学模型,再依据数学模型写出算法设计,再写出详细程序就水道渠成。程序清单programp3_1_2(input,output);varn,s,t:integerbegins:=0;forn:=0to63dos:=s+2n;t:=s/(1.42*108)writeln(s=,s,)writeln(t=,t);end.运转示例S=1.84467441E+19T=1

8、.29906648E+112阅读下边的程序,说明该程序的作用。程序清单programp3_1_3(input,output);vara,b,c:integer此处integer表示整型数据begingwriteln(请随意输入一个数:);readln(b);forc:=1to5dobeginread(a);ifabthenb:=a;28第3章循环结构程序设计end;writeln(最后的值是:,b:5);end.运转示例请随意输入一个数:64713811最后的值是:13第2节当循环程序实例【问题描绘】农场主的估算报告放暑期学校组织夏令营到达一个农场,农场主热忱的招待了他们。在观光时,同学们发此

9、刻农场的左上角圈出了一块地方,这儿阳光充分,通风也不错,但却什么也没有,感觉很奇异。农场主告诉大家因为农场四周由很多小朋友因没钱交学费而缀学,所以决定引进品种不错的雌雄一对小白兔,在这饲养。小白兔需经过一个月才能长大,长大后每个月都生雌雄一对小白兔。想等小白兔生殖到1000对的时候,在散发给四周贫穷的人,希望能帮助他们从头进入讲堂。现正在写一份估算报告,此中估计所需时间却却没算出来。同学们此刻就让我们来帮助这位好意的农场主算出时间。【问题剖析】这问题从表面来看好象没有什么规律,不如设计一张表格来计算一下。月份123456兔子数(对)12481632因为第一个月小白兔没长大,所以兔子数是1对。到

10、了第二个月小白兔长大了,生了一对小白兔,兔子数是2对。第三个月小白兔也长大了,大白兔是2对,它们都生了一对小白兔,兔子数是4对。依此类推,发现除了第一个月,其余都是:前一个月的兔子数2=本月兔子数。我们发现这又是一个循环,直到兔子数为1000对的时候结束。但是用for语句明显不可以,因为我们不知道循环的次数。下边我们用当型循环(while/do语句)来编写程序。农场主的估算能够描绘以下:月份:=1;兔子数:=1;预约义第一个月的兔子数是1对while兔子数1000do当兔子数小于1000对时进入循环begin29Pascal编程入门月份:=月份+1;兔子数:=兔子数*2;end;【程序设计】程

11、序清单programp4-1(input,output);varmonth,rabbit:integer;beginmonth:=1;rabbit:=1;whilerabbit0DOBEGINWriteln(k);k:=k-1END;此中(1)WHIlE和DO是PASCAL保存重点字,是WHILE循环语句的构成部分。保存重点字DO后边的“语法”只好是一条语句,称为“循环体”;假如循环体中需要包括多个语句则应当如上例所示,采纳一条复合语句。2WHILE循环的履行功能当履行到WHILE语句时求出布尔表达式的值30第3章循环结构程序设计(2)若布尔表达式的值为真,则履行循环体内的语句;若为“假”,履

12、行步骤4重复步骤1和2循环结束,履行循环后边的语句。3本例While循环的结构化流程图以下:While布尔表达式循环体语句【同步练习】1周末小明碰到一个风趣的题目:找出四位整数abcd中知足下述关系的数:(ab+cd)(ab+cd)=abcd请你帮小明编写一个程序,找出知足条件的所有的数。问题剖析:这道题属于搜寻问题,因为是四位整数,不难看出范围是从10009999,所求的数终究在哪里,没法确立,只有在这个范围内从小到大一个一个进行搜寻,对每一个数看它的高两位数与低两位数和的平方能否与该数相等。ab和cd两个数能够在abcd中将高两位与低两位分别开来。我们能够这样考虑,将abcd整除100,可

13、获得高两位ab。如:abcd=1234,1234div100=12。有了ab,也便可用下边的式子把低两位cd分别出来:abcdab100=abcdab00=cd如:123412100=12341200=34同学们认真想一想,在求解的过程中,条件都是相同的,不过abcd这个数不同。实质上是在频频做同一个步骤。下边我们用当型循环来解这道题。31Pascal编程入门程序清单Programxuhuan(input,output);Vari,m,n,k:integer;BeginI:=1000;给I赋值,即abcd假定一个数;WhileI=9999do判断I(即abcd)的值能否高出范围,;假如超出则不

14、履行循环Begin体中的语句,结束循环;M:=Idiv100;分别出ab和cd两个数,假如切合条件,就写出来;N:=I-m*100;K:=(m+n)*(m+n);Ifk=IthenWriteln(切合条件的四位整数是:,I);I:=I+1I的值加1;End;End.运转示例切合条件的四位整数是:2025切合条件的四位整数是:3025切合条件的四位整数是:98012从n个数中精选出最大的数。问题剖析:此题能够借助于古代比武的“打擂台”来比喻:先有随意一人站在擂台上,而后第二个人上来与它比武,胜者留在台上,这样频频进行下去,直到第n个人比完为止(要注意:一共比n-1次),这样最后留在台上的人必定是

15、最强者。设计算法:从n个数中任选一数放在变量X中,并设一计数器m=0(这里变量X就是比武的擂台,m=0表示还没有进行比较);32第3章循环结构程序设计将下一个数与X中的数进行比较;使m的值加1(计一次数);若m的值小于(n-1),则从头进行第步,不然履行下一步;输出此时X的值,即为n个数中的最大者;结束。程序清单PROGRAM323(input,output);VARn,x,m,y:integer;BEGINwrite(输入共需参加比较的总数:);readln(n);write(先将n个数的第一个数输入给变量x);readln(x);m:=0;whilem=ythenx:=y;m:=m+1;E

16、ND;write(n,个数中最大的是:,x);END.运转示例输入共需参加比较的总数:3先将n个数的第一个数输入给变量x:1输入一个其余参加比较的数2输入一个其余参加比较的数103个数中最大的是:10第3节直到循环程序实例33Pascal编程入门【问题描绘】小明和小强是好朋友,他俩都喜欢数学,一个周末的下午他们进行了一场竞赛,题目是这样的:随意给出两个正整数M和N,求出M和N的最大条约数,看谁算的又快又准。请你用计算机编写一程序帮助他俩又快又准的计算出M和N的最大条约数。【问题剖析】设用M作为被除数,N作为除数,R作为余数。这样我们就能够用展转相除法求出M和N的最大条约数,展转相除法的详细算法

17、以下:第1步:输入M和N的值;第2步:求出M除以N所得的余数R;第3步:将N的值赋给M,R的值赋给N;第4步:若R=0,则M为所求得的最大条约数,转第5步,不然转第1步;第5步:输出最大条约数M的值。依据上述算法,我们能够用结构化流程(N-S)图表示该算法:输入M和N的值RM除以N的余数MN,NRR=0输出M的数值【程序设计】程序清单Programp3_3_1(input,output);varm,n,r:real;beginwrite(输入两个正整数:);readln(m,n);ifnmthenbeginr:=n;n:=m;m:=r;end;repeat34第3章循环结构程序设计r:=mmo

18、dn;m:=n;n:=r;untilr=0;writeln(m,和,n,最大条约数是:,m)end.运转示例输入两个正整数:11277112和77最大条约数是:7输入两个正整数:123412和34最大条约数是:2【知识拓展】1在程序设计中,假如需要在履行了某操作过程以后,再依据某一指定条件判断是否重复履行,应采纳直到循环语句,即repeat-until语句实现循环。此语句的含义是:“重复履行循环体,直到指定条件为真时为止”。2Repeat-until语句格式:repeatuntil它的N-S图以下列图所示。循环体语句until布尔表达式此中repeat和until为保存字。3它的履行过程:履行

19、循环体;计算布尔表达式的值,若为false则返回,不然,退出循环体履行下一语句。4它的特色是:先履行(循环体),后判断(布尔表达式)。repeat-until是一个整体,它是一个语句(结构型语句),在这个句中能够包括若干个语句,不要误以为repeat是一个语句,until是一个语句;5Repeat语句与while语句都能够实现循环结构,且能够互相转变,但有四点不同:Repeat语句While语句先履行语句,后判断条件。先判断后履行语句。指定语句能够是多条语句,无需用指定语句只好是一条语句或一条复合语begin和end。句。35Pascal编程入门当条件不可即刻重复履行。当条件成即刻重复履行。不

20、论条件能否成立,总要履行一次指当条件一开始就不可即刻,则不履行循环定语句序列。中的指定语句。【同步练习】1利用格里高公式求。=1-1+1-1+,直到最后一项的值小于10-6为止。4357问题剖析:解此题的重点就是求右侧数值序列的和,序列有明显的特色:分母是从1开始的奇数,加、减号轮番出现,所以,我们能够用n=n+2表示序列数值的变化,用f=-f来设置它们各项的符号位。画出程序的N-S图。程序清单programex2_34;varf:integer;n,t,pai:real;beginpai:=0;t:=1;n:=1.0;f:=1;repeatpai:=pai+1;n:=n+2.0;f:=-f;

21、t:=f/nuntilabs(t)1e-6;pai:=pai*4;writln(pai=,pai:10:8);readlnend.pai:=0;t:=1;n:=1;f:=1pai:=pai+tn:=n+2.0f:=-ft:=f/nuntilabs(t)maxTHENmax:=aELSEIFa=9avg:=s/i;writeln(最大值是:,max,最小值是:,min);writeln(10个数和是:,s,10个数均匀值是:,avg:5:1);END.运转示例最大值是:10最小值是:110个数和是:5510个数均匀值是:5.5第4节多重循环程序实例【问题描绘】一个炊事员上街采买,用500元钱买了

22、90只鸡,此中母鸡一只15元,公鸡一只10元,小鸡一只5元,正好把钱买完。问母鸡、公鸡、小鸡各买多少只?【问题剖析】设母鸡I只,公鸡J只,小鸡为k只,我们可列方程组:I+J+K=9015I+10J+5K=500明显这是一个不定方程组,一般状况下有多解。由方程可得I和J、K的取值范围:0I90,0J90,0K90我们用穷举法在范围内搜寻求解。【程序设计】程序清单programex3_4_1;vari,j,k:integer;beginfori:=0to90doforj:=0to90dofork:=0to90doif(i+j+k=90)AND(15*i+10*j+5*k=500)thenwrite

23、ln(i:5,j:5,k:5);end;38第3章循环结构程序设计运转示例0108018812682348342845085【知识拓展】1以上的程序是一个三重的for循环嵌套。循环体由PASCAL语句构成,自然也能够包含FOR语句,这就构成了循环的嵌套,形成多重循环。2为了减少无用的循环次数,我们进一步研究题目,剖析后,能够将循环次数减小,这里I的值能够是0到33(因为假如500元钱所有用来买母鸡,最多能够买500/15只),相同J的值能够从0到50。知道I和J的值,又可求出K的值为90-I-J,这样又可减少循环嵌套的层数。以上的程序能够优化为:programrex4_6;vari,j,k:i

24、nteger;beginfori:=0to33doforj:=0to50dobegink:=90-i-j;if15*i+10*j+5*k=500thenwriteln(i:5,j:5,k:5);end;end.优化后的程序运转速度会大大提升。在此后设计程序时,同学们不单要注意怎样解题,还要尽量使程序优化,提升运转速度。【同步练习】1试编写能够打印输出以下列图形的程序:#39Pascal编程入门问题剖析:这道题属于打印平面图形问题。程序的设计以下:由两个并列循环外加一个嵌套循环构成的。各环的作用为:1。外层循环控制打印的行数,此倒三角形共需8行,故外层循环的设置为递减型循环。嵌套在外环内的第一个

25、并列循环为空格输出,依据图形变化控制输出不同数目的空格。3外环内第二个并列循环为控制三角形每行中“#”号的个数。程序清单programex2_36;vari,j,k:integer;bginfori:=8downto1dobeginforj:=1to8idowrite();fork:=2*i-1downto1dowriteln;end;readlnend.2求s=1!+2!+3!+10!的值。问题剖析:这个问题是求10自然数的阶乘之和,能够用for循环来实现,经过10次的循环可求出1!,2!,10!,并同时累加起来,可求得S的值。而求T=N!,又能够用一个for循环来实现,40第3章循环结构程序设计构成了二重循环。程序清单programex4_5;vart,s:real;i,j,n:integer;beginS:=0;forn:=1to10dobegint:=1;forj:=1tondot:=t*j;S:=S+t;end;writeln(s=,s:0:0);end.3333求100999中的水仙花数。(若三位数ABC,ABC=A+B+C,则称ABC为水仙花数。比如153,13+53+33=1+125+27=153,则153是水仙花数。)问题剖析:依据

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论