




已阅读5页,还剩39页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章循环结构,第一节循环语句(FOR语句)第二节当语句(WHILE语句)第三节直到循环(REPEAT语句)第四节多重循环结构,1,在实际应用中,会经常遇到许多有规律性的重复运算,这就需要掌握本章所介绍的循环结构程序设计。在Pascal语言中,循环结构程序通常由三种的循环语句来实现。它们分别为FOR循环、当循环和直到循环。通常将一组重复执行的语句称为循环体,而控制重复执行或终止执行由重复终止条件决定。重复语句是由循环体及重复终止条件两部分组成。,2,第一节循环语句(FOR语句),3,for语句的一般格式,for:=todo;/递增型循环for:=downtodo;/递减型循环其中for、to、downto和do是Pascal保留字。表达式1与表达式2的值称为初值和终值。循环的语句格式:FOR变量名:=初值TO终值DO语句;求1+2+3+N的和。如何编程呢?【例】S:=0;FORI:=1TO10DOS:=S+I;Writeln(S=,S);,4,For语句执行过程,先将初值赋给左边的变量(称为循环变量);判断循环变量的值是否“等于”终值,如已等于终值,则下次不再执行(本次是最后一次执行,循环变量的值也不更改),则跳到步骤;如果小于等于终值,则执行do后面的那个语句(称为循环体);循环变量递增(对to)或递减(对downto);返回步骤;循环结束,执行for循环下面的一个语句。,5,说明,循环变量必须是顺序类型。可以是整型、字符型、枚举型等,但不能为实型。循环变量的值递增或递减的规律是:选用to则为递增;选用downto则递减。循环体可以是一个基本语句,也可以是一个复合语句。循环变量的初值和终值一经确定,循环次数就确定了。但是在循环体内对循环变量的值进行修改,常常会使得循环提前结束或进入死环。所以禁止在循环体中随意修改控制变量的值。如:fori:=1to10dobegini:=2*i+1;/禁止类似的修改,FreePascal中会提示语法错误writeln(i);end;以上for循环是一个死循环,i永远等于2,不可能达到终止值10。for语句中的初值、终值都可以是顺序类型的常量、变量、表达式。,6,应用举例,例4.1输出1100之间的所有偶数。程序如下:Programex4_1;vari:integer;beginfori:=1to100doifimod2=0thenwrite(i:5);end.,7,例4.2编程计算1到100的累加和:s=1+2+3+100。【分析】设i为循环控制变量,累加和放在s中,利用循环变量i的值从1变化到100的规律,不需要另外引进从1变化到100的其它变量,程序的流程图如4-2所示。程序如下:Programex4_2;vars,i:integer;begins:=0;fori:=1to100dos:=s+i;writeln(s);end.运行结果:5050只要对程序稍加修改就可以计算出以下算式的值:s=1+1/2+1/3+1/100s=12+22+32+1002s=2+4+6+100等等。,8,例4.3将顺序打印出26个小写英文字母:abczzcba。程序如下:Programex4_3;vark:char;beginfork:=atozdowrite(k);fork:=zdowntoadowrite(k);writeln;end.,9,例4.4N的阶乘是指1到N的累乘,即N!=1*2*3*N,输入一个数,求这个数的阶乘?程序如下:Programex4_4;varn,i:integer;/i为循环变量s:longint;/s存放阶乘的结果,类型为长整型,防止结果太大beginreadln(n);s:=1;/这条语句少了,选手们思考一下,会出现什么现象?fori:=2tondo/从2到n累乘到s中s:=s*i;writeln(s);/输出n!的值end.虽然s定义成longint,但输入12以上的数时,还是会出现错误的结果,说明结果超出了longint能够储存的范围,这时需要定义更大的类型,如int64,或干脆定义成实型变量用科学计数法来近似表示这个数,如real、extended。,10,上例中用到了“递推”算法。所谓递推算法是指在一个数的序列值中,下一项的值在前一项的值的基础上推算出来的,即下一项对前一项有某种依赖关系。例如,为求5!,应先知道4!的值,然后再乘以5;为求6!必先求出5!。也就是说,从1!可以推出2!,从2!可以推出3!,从3!可以推出4!,以此类推。求n!的递推公式为:a1=1(n=1)an=n*an-1(n1)a1=1是“初始条件”或“边界条件”。只要找出递推关系,就可以由循环来处理,一项一项地推算出来以后各项。在程序中用同一个变量s来存储每一次推出来的值,由前一个s推出后一个s是递推。,11,例4.5已知一对兔子,每个月可以生一对小兔,而小兔经过一个月生长后也可每月生一对小兔。即兔子的对数是:第一个月1对,第二个月2对,第三个月3对,第四个月5对,假设兔子的生育期是12个月,并且不死,问一年后,这对兔子有多少对活着的后代?【分析】根据题目给出的条件,得到算法:设当前月兔子有x对,它的前一个月有lastx对,前二个月有prevx对,明显存在一个递推关系,即x=lastx+prevx。Programex4_5;Vari,lastx,prevx,x:integer;beginprevx:=1;lastx:=2;fori:=3to12dobeginx:=lastx+prevx;prevx:=lastx;lastx:=x;end;writeln(x);end.,运行结果:233,12,例4.6一个两位数x,将它的个位数字与十位数字对调后得到一个新数y,此时y恰好比x大36,请编程求出所有这样的两位数。【分析】用for循环列举出所有的两位数,x为循环变量;用公式a:=xdiv10分离出x的十位数字;用公式b:=xmod10分离出x的个位数字;用公式y:=b*10+a合成新数y;用式子y-x=36筛选出符合条件的数x并输出。Programex4_6;vara,b,x,y:integer;beginforx:=10to99dobegina:=xdiv10;b:=xmod10;y:=b*10+a;ify-x=36thenwriteln(x);end;readln;end.,13,例4.7把整数3025从中剪开分为30和25两个数,此时再将这两数之和平方,(30+25)2=3025计算结果又等于原数。求所有符合这样条件的四位数。【分析】设符合条件的四位数为N,它应当是一个完全平方数,用(a*a)表示。为了确保N=(a*a)在四位数(10009999)范围内,可确定a在3299循环;计算N=a*a;将四位数N拆分为两个数n1和n2;若满足条件(n1+n2)*(n1+n2)N就输出N。Programex4_8;Varn,a,x,n1,n2:integer;beginfora:=32to99dobeginn:=a*a;n1:=ndiv100;/拆取四位数的前两位数n2:=n-n1*100;/拆取四位数的后两位数x:=n1+n2;ifx*x=Nthenwriteln(N);end;readlnend.,14,例4.9根据公式2/6=1+1/22+1/32+1/n2,计算圆周率的pai值。【分析】此题是上例的一个变例,关键在于求出右边的累加和,变量n由键盘输入,n越大,圆周率的pai值就越精确。但是,i作为循环控制变量参加循环体的运算,它是整型数,那么当i=182时,i*i已经超过了正整数32767的范围,在Pascal系统里就把它变为-65536+i*i的整型数进行处理,当i=256时,-65536+i*i正好等于零,从面产生以零作除数的编译错误,所以我们在程序里应该把i定义为长整型,这样可以输入更大的n(不能大于46341,等于65536时,也会同样出现被0除的溢出错误)。Programex4_9;vari,n:integer;/应该为longint(长整型)pai,s:real;beginreadln(n);s:=0;fori:=1tondos:=s+1/(i*i)pai:=sqrt(6*s);writeln(pai:8:6);end.,运行结果:输入:1000输出:3.132077输入:10000输出:3.141497,15,【上机练习4.1】,1、求12+22+32+10022、求s=1+1/2+1/3+1/1003、计算100之内所有的奇数之和。4、计算n!,其中n由键盘输入。5、求10个数中的最大值和最小值。6、按字母表的顺序,从字母A到Z顺序打印输出。7、求菲波拉契数列a0,a1,a2,a20。a0=0,a1=1,a2=a1+a0,a3=a2+a1,an=an-1+an-2;如0,1,1,2,3,5,8,13,21,16,第二节当语句(WHILE语句),17,WHILE循环,对于for循环有时也称为计数循环,当循环次数未知,只能根据某一条件来决定是否进行循环时,用while语句或repeat语句实现循环要更方便。while语句的形式为:whiledo;其意义为:当布尔表达式的值为true时,执行do后面的语句。,18,while语句的执行过程为:判断布尔表达式的值,如果其值为真,执行步骤2,否则执行步骤4;执行循环体语句(do后面的语句);返回步骤1;结束循环,执行while的下一个语句。说明:这里while和do为保留字。当布尔表达式成立时,执行do后面的语句(循环体),当布尔表达式的值为false时,才结束循环,转去执行while语句的下一条语句,故又称此语句为“当”语句或“当型循环”。while语句的特点是:先判断,后执行。,19,例4.10求恰好使s=1+1/2+1/3+1/n的值大于10时n的值。【分析】恰好使s的值大于10意思是当表达式s的前n-1项的和小于或等于10,而加上了第n项后s的值大于10。从数学角度,我们很难计算这个n的值。故从第一项开始,当s的值小于或等于10时,就继续将下一项值累加起来。当s的值超过10时,最后一项的项数即为要求的n。程序如下:Programex4_10;Vars:real;n:integer;/n表示项数begins:=0.0;n:=0;whiles=1e-6dobeginpai:=pai+t;n:=n+2;f:=-f;t:=f/n;end;pai:=pai*4;writeln(pai:10:8);end.,运行程序会发现没有结果,为什么?因为布尔表达式abs(t)=1e-6,即1/n=1e-6,而程序的说明部分n是整型数,它的范围是-3276832767,条件永远成立,所以形成死循环,从而没有运行结果。while循环不需要用顺序型数据来控制循环的次数,改程序的说明部分中的n为实型数或说明为长整型即可,请同学们自己修正,以后要对变量的取值范围引起重视。,22,【上机练习4.2】,1、用WHILE循环完成如下3题:求s=1+2+3+4+10求s=1+1/2+1/3+1/100计算n!,其中n由键盘输入。2、输入任一的自然数A,B,求A,B的最小公倍数。3、小球从100高处自由落下,着地后又弹回高度的一半再落下。求第20次着地时,小球共通过多少路程?4、Faibonacci数列前几项为:0,1,1,2,3,5,8,其规律是从第三项起,每项均等于前两项之和。求前30项,并以每行5个数的格式输出。5、鸡兔同笼,头30,脚90,求鸡兔各几只?,23,第三节直到循环(REPEAT语句),用while语句可以实现“当型循环”,用repeat-until语句可以实现“直到型循环”。repeat-until语句的含义是:“重复执行循环,直到指定的条件为真时为止”。直到循环语句的一般形式:Repeat;:;until;其中Repeat、until是Pascal保留字,repeat与until之间的所有语句称为循环体。,24,说明:repeat语句的特点是:先执行循环,后判断结束条件,因而至少要执行一次循环体。repeat-until是一个整体,它是一个(构造型)语句,不要误认为repeat是一个语句,until是另一个语句。repeat语句在布尔表达式的值为真时不再执行循环体,且循环体可以是若干个语句,不需用begin和end把它们包起来,repeat和until已经起了begin和end的作用。while循环和repeat循环是可以相互转化的。,25,例4.13求两个正整数m和n的最大公约数。程序采用repeat-until循环实现。Programex4_13;varm,n,r:integer;beginreadln(m,n);repeat/辗转相除法r:=mmodn;m:=n;n:=r;untilr=0;writeln(m);end.,26,例4.14校体操队到操场集合,排成每行2人,最后多出1人;排成每行3人,也多出1人;分别按每行排4,5,6人,都多出1人;当排成每行7人时,正好不多。求校体操队至少是多少人?【分析】设校体操队为X人,根据题意X应是7的倍数,因此X的初值为7,以后用inc(x,7)改变X值;为了控制循环,用逻辑变量yes为真(True)使循环结束;如果诸条件中有一个不满足,yes的值就会为假(false),就继续循环。Programex4_14;varx:integer;yes:boolean;beginx:=0;repeatyes:=true;inc(x,7);ifxmod21thenyes:=false;ifxmod31thenyes:=false;ifxmod41thenyes:=false;ifxmod51thenyes:=false;ifxmod61thenyes:=false;untilyes;/直到yes的值为真writeln(All=,x);readlnend.程序中对每个X值,都先给Yes赋真值,只有在循环体各句对X进行判断时,都得到“通过”(此处不赋假值)才能保持真值。,27,例4.15求1992个1992的乘积的末两位数是多少?【分析】积的个位与十位数只与被乘数与乘数的个位与十位数字有关,所以本题相当于求1992个92相乘,而且本次的乘积主下一次相乘的被乘数,因此也只需取末两位参与运算就可以了。Programex4_15;vara,t:integer;Begina:=1;t:=0;repeatt:=t+1;a:=(a*92)mod100;untilt=1992;writeln(a);Readln;End.,28,例4.16利用格里高公式求。/4=1-1/3+1/5-1/7+,直到最后一项的值小于10-6为止.【分析】解本题的关键就是求右边数值序列的和,序列有明显的特点:分母是从1开始的奇数,加、减号轮流出现,因此,我们可以用m=n+2表示序列数值的变化,用f=-f来设置它们知项的符号位。Programex4_16;varf:integer;n,t,pai:real;beginpai:=0;t:=1;n:=1;f:=1;repeatpai:=pai+t;n:=n+2;f:=-f;t:=f/n;untilabs(t)trunc(sqrt(i)thenwrite(i:8);end;end.,38,例4.21试编写能够打印输出如下图形的程序:#程序如下:Programex4_21;vari,j,k:integer;beginfori:=8downto1do/总共要输出8行内容beginforj:=1to8-idowrite();/控制每行空格数目,这个循环可以写成:write(:8-i);fork:=2*i-1downto1dowrite(#);/控制每行中的个数writeln;end;end.此程序的设计是由两个并列循环加一个嵌套循环构成的。各环的作用如下:(1)外层环控制打印的行数,此倒三角形共8行,故外环的设置为递减型循环。(2)嵌套在外环中的第一个并列循环为空格输出,根据图形变化控制输出不同数量的空格。(3)外环内第二个并列循环为控制三角形每行中#号的个数。,39,例4.22验证哥德巴赫猜想:任一个充分大的偶数N(N=4),可以用两个素数之和表示。例如:4=2+26=3+38=3+598=17+79输入一个数,不是偶数则输出:“isnoteven.”,否则输出表示它的二个素数。【分析】哥德巴赫猜想是一个古老而著名的数学难题,它的理论证明很麻烦,迄今未得出最后证明。在这方面我国数学家陈景润的研究成果处于世界领先地位。这里只对有限范围内的数用计算机加以验证,不算严格的证明。充分大的偶数用N表示,将它分成P和Q,使NP+Q。P从1开始(每次加1),QN-P。若P、Q均为素数,则输出结果,否则以P+1再试。,40,Programex4_22;varn,p,q,j:integer;flagp,flagq:boolean;beginreadln(n);ifnmod2=0then/输入的是偶数beginp:=1;/p从1开始枚举repeatp:=p+1;q:=n-p;/n=p+qflagp:=true;/查看当前的p是不是素数forj:=2totrunc(sqrt(p)doif(pmodj)=0thenflagp=false;flagq:=true;/查看当前的q是不是素数forj:=2totrunc(sqrt(q)doifqmodj=0thenflagq:=false;untilflag
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年数控高精度内外圆磨床项目建议书
- 安全培训教学方法改革课件
- 广东省【中职专业高考】2025年中职高考对口升学(理论考试)真题卷【轻工纺织大类】模拟练习
- “百万英才汇南粤”2025年佛山市高明区公开招聘中小学教师(第四场)考前自测高频考点模拟试题带答案详解
- 2025贵州贵州省福泉市引进教育系统高层次人才20人考前自测高频考点模拟试题及答案详解(必刷)
- 2025年棕、藤、草制品项目合作计划书
- IN-1130-Standard-生命科学试剂-MCE
- 2025年羟丙纤维素项目发展计划
- 2025广西壮族自治区中医骨伤科研究所广西骨伤医院招聘实名编制工作人员(高级职称)3人考前自测高频考点模拟试题含答案详解
- GW7647-Standard-生命科学试剂-MCE
- 危险货物道路运输规则第4部分:运输包装使用要求(JTT617.4-2018)
- 2024年四川省成都市中考数学真题及答案解析
- 部队军事体能训练课件
- 狗猫鼠全文赏析课件
- 国有企业外部董事个人履职报告
- 船舶拆解资金管理办法
- 皮带机安全知识培训
- 增值税发票培训知识课件
- 2025年对酒驾醉驾问题谈心谈话记录内容范文
- 【《以儿歌为载体的小班幼儿生活自理能力提升路径分析》11000字】
- 2025年《3~6岁儿童学习与发展指南》试题(+答案)
评论
0/150
提交评论