

下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、循环结构程序设计第 1 节 For 循环程序实例【问题描述】计算一副扑克牌的点数,其中牌A为1点,牌J、Q、K分别为11、12、13点,大、小 王不算点。【问题分析】根据题意,要计算一副扑克牌的点数,可以先求出一种花色牌的点数和,再乘以4即可。 进一步分析,求一种花色牌的点数和,即是求113的连续自然数之和。我们用S表示 所求数的和,用T表示加数,这样可以让T从1变化到13,每次让T不断加入到S中, 就可以求出S的值,最后乘以4即可。【算法设计】自然语言1置初值,即S=0, T=1;2使S=S+T,所求出的和仍放入S中;3使T增加1,即T=T+1;4如果T小于等于13,转第二步,否则转第五步;
2、5输出计算结果。程序设计】程序清单program ex3_1;vars,t:integer;begins:=0; S置初值为0for t:=1 to 13 do For循环语句s:=s+t;writeln(total:,s*4);end.运行示例 total:364【知识拓展】1在程序处理过程中,经常需要对某一条或一组语句重复执行多次,以最终完成某项 任务,这就是循环。对于重复次数已知, 而不依赖循环中语句的结果, 常用计数循环 (f or / to /do语句)。2for循环语句格式:格式一:for控制变量:=初值to终值do循环体语句;格式二:for控制变量:=初值downto终值do循环
3、体语句;其中for、to、downto、do为保留字,do后面的语句称为循环体。其中循环控制变量 可以是整型、字符或布尔型,但不能为实型。一般地,可以是顺序类型数据。 初值、终值表达式通常要与控制变量的类型相同。在for语句中如果使用的是to,称为递增型计数循环语句,如果使用的是downto,称为递减型计数循环语句。3For语句的执行过程: 先将初值表达式的值计算出来并赋给循环控制变量。2判断循环控制变量的值是否已“超过”终值(对于递增型循环来说,“超过” 是指“大于”;对递减型循环来说,“超过”是指“小于”)。如已超过,则跳到步骤 。3如果未超过终值,则执行do后面的语句(称为循环体)。4循
4、环变量递增(或递减)。5返回执行步骤。6循环结束,执行for循环下面的一个语句4使用For语句的的注意事项:1循环控制变量必须为顺序类型。例如,可以是整型、字符型、布尔型,不能为实型, 如:for i=3.5 to 8.5 do write(i)是错误的。2循环控制变量的值递增或递减的规律是:若是递增型循环,则按Succ函数规律变化;若是递减型循环,则按Pred函数规律变化。例如:for k:=atozdo write(k)将按顺序打印出26个小写英文字母“abedz”。3循环体可以是一条基本语句,也可以是一条复合语句。例如:for j:=1 to n dobeginreadln(x);wre
5、teln(x+1)end;循环语句的范围直到end才结束4循环控制变量不得在循环体内再被赋值。例如:for x;=1 to 10 dobegi nx:=2*z+1;end;是错误的。5循环控制变量的初值和终值一经确定,循环次数就确定不变了。循环的次数可用如下公式计算:0若初值终值递增型循环的循环次数=Ord(终值)-Ord(初值)+1若初值w终值0若初值终值Ord(初值)-(终值)+1若初值终值【同步练习】1宰相的麦子:相传古印度宰相达依尔,是国际象棋的发明者。有一次,国王因 为他的贡献要奖励他,问他想要什么。达依尔说:“只要在国际象棋棋盘上(共64格)摆上这么些麦子就行了:第一格一粒,第二格
6、两粒,后面一格的麦子总是前一格 麦子数的两倍,摆满整个棋盘,我就感恩不尽了。”国王一想,这还不容易。于是令人 扛来一袋麦子,可很快用完了,又扛来一袋,很快用完了国王很奇怪,请你帮国王8计算一下,要多少麦子。(1立方米的麦子约为1.42X10粒)问题分析:对于编程类问题的描述,要特别注意正确、全面地理解题意,要学会从描述性语言中抽递减型循环的循环次数=象出具体的数据,并建立数学模型。在本题中根据国际象棋棋盘上共有64格,第,后面一格的麦子总是前一格麦子数的两倍 ”的题意,我们可以建立数学模型: 第一格为2。, 第二格为21, 第三格为2,第64格为263,设64格中应放麦子数为S,则可用下面的公
7、式表示:S= 20+21+22+23+2631立方米的麦子约为1.42X108粒,那么S粒麦子的体积T为:T=S/(1.42X108)立方米。这样我们将问题转化为一般数学模型, 再根据数学模型写出算法设计, 再写出具体程序就水道渠成。程序清单program p3_1_2(input,output);varn,s,t:integerbegins:=0;for n:=0 to 63 dos: =s+2An;t:=s/(1.42*10A8)writeln(s=,s,)writeln(t=,t );end.运行示例S=1.84467441E+19T=1.29906648E+112阅读下面的程序,说明该
8、程序的作用程序清单program p3_1_3(input,output);var a,b,c:integer此处integer表示整型数据格一粒,第二格两粒,beg ingwriteln(请任意输入一个数:);readl n(b);for c:=1 to 5 dobegi nread(a);if ab the n b:=a;end;writeln(最后的值是:,b:5);end.运行示例请任意输入一个数:6/4/7/13/8/11/最后的值是:13第 2 节当循环程序实例【问题描述】农场主的预算报告放暑假学校组织夏令营来到一个农场,农场主热情的接待了他们。在参观时,同学们发现在农场的左上角圈
9、出了一块地方,这儿阳光充足,通风也不错,但却什么也没有,觉得很奇怪。农场主告诉大家因为农场四周由许多小朋友因没钱交学费而缀学,所以决定 引进品种不错的雌雄一对小白兔, 在这饲养。小白兔需经过一个月才能长大,长大后每 个月都生雌雄一对小白兔。想等小白兔繁殖到1000对的时候,在分发给周围贫困的人, 希望能帮助他们重新进入课堂。现正在写一份预算报告,其中预计所需时间却却没算出 来。同学们现在就让我们来帮助这位好心的农场主算出时间。【问题分析】这问题从表面来看好象没有什么规律,不妨设计一张表格来推算一下月份123456兔子数(对)12481632因为第一个月小白兔没长大,所以兔子数是1对。到了第二个
10、月小白兔长大了,生 了一对小白兔,兔子数是2对。第三个月小白兔也长大了,大白兔是2对,它们都生了 一对小白兔,兔子数是4对。依此类推,发现除了第一个月,其它都是:前一个月 的兔子数X2 =本月兔子数。我们发现这又是一个循环,直到兔子数为1000对的时 候结束。可是用for语句显然不行,因为我们不知道循环的次数。下面我们用当型循环(while/do语句)来编写程序。农场主的预算可以描述如下:月份:=1;兔子数:=1; 预定义第一个月的兔子数是1对while兔子数1000 do当兔子数小于1000对时进入循环beg in月份:=月份+1;兔子数:=兔子数*2;end;【程序设计】程序清单 prog
11、ram p4-1(i nput,output);varmonth, rabbit: integer;beginmonth:= 1;rabbit:= 1;while rabbit0 DOBEGINWriteln (k);k:=k-1END;其中WHIIE和DO是PASCALS留关键字,是WHILE循环语句的组成部分。(2)保留关键字DO后面的“语法”只能是一条语句,称为“循环体”;如果 循环体中需要包含多个语句则应该如上例所示,采用一条复合语句。2.WHILE循环的执行功能当执行到WHILE语句时(1)求出布尔表达式的值若布尔表达式的值为真,贝揪行循环体内的语句;若为“假”,执行步骤4(3)重复
12、步骤1和2(4)循环结束,执行循环后面的语句。3本例While循环的结构化流程图如下:While 布尔表达式循环体语句【同步练习】1.周末小明遇到一个有趣的题目:找出四位整数abed中满足下述关系的数:(ab + cd)(ab + cd)= abed请你帮小明编写一个程序,找出满足条件的所有的数。问题分析: 这道题属于搜索问题,因为是四位整数,不难看出范围是从10009999,所求的数究 竟在哪里,无法确定,只有在这个范围内从小到大一个一个进行搜索, 对每一个数看它 的高两位数与低两位数和的平方是否与该数相等。ab和cd两个数可以在abcd中将 高两位与低两位分离开来。我们可以这样考虑,将ab
13、cd整除100,可得到高两位ab如:abcd=1234,1234 div 100 = 12。有了ab,也就可用下面的式子把低两位cd分离出来:abedabx100 = abedabOO = cd如:123412x100 = 12341200 = 34同学们仔细想想,在求解的过程中,条件都是一样的,只是abed这个数不同。实际上 是在反复做同一个步骤。下面我们用当型循环来解这道题。程序清单Program xuhuan(input,output);Var i,m,n,k:integer;BeginI:=1000;给I赋值,即abed假设一个数;While l=9999 do 判断I(即abed)的
14、值是否超出范围,;如果超过则不执行循环Begin体中的语句,结束循环;M:=l div 100; 分离出ab和ed两个数,如果符合条件,就写出来;N:=I - m*100;K:=(m+n)*(m+n);If k=I thenWriteln(符合条件的四位整数是:,I);I:=I+1 I的值加1;End;End.运行示例符合条件的四位整数是:2025符合条件的四位整数是:3025符合条件的四位整数是:98012从n个数中挑选出最大的数。问题分析:本题可以借助于古代比武的 “打擂台 ”来比喻: 先有任意一人站在擂台上, 然后第二个人上来与它比武,胜者留在台上,如此反复进行 下去,直到第n个人比完为
15、止(要注意:一共比n-1次) ,这样最后留在台上的人肯定 是最强者。设计算法:1从n个数中任选一数放在变量X中, 并设一计数器m=0(这里变量X就是比 武的擂台,m=0表示尚未进行比较);2将下一个数与X中的数进行比较;3使m的值加1(计一次数);4若m的值小于(n-1),则重新进行第步,否则执行下一步;5输出此时X的值,即为n个数中的最大者;6结束。程序清单PROGRAM 323(input,output);VARn,x,m,y:integer;BEGINwrite(输入共需参加比较的总数:);readln(n);write(先将n个数的第一个数输入给变量x)readln(x);m:=0;w
16、hile m=y then x:=y; m:=m+1;END;write (n ,个数中最大的是:, x);END.运行示例输入共需参加比较的总数: 3先将n个数的第一个数输入给变量x:1输入一个其他参加比较的数2输入一个其他参加比较的数103个数中最大的是:10第 3 节 直到循环程序实例【问题描述】 小明和小强是好朋友, 他俩都喜爱数学, 一个周末的下午他们进行了一场比赛, 题目是这样的:任意给出两个正整数M和N,求出M和N的最大公约数,看谁算的又快又准。请你用计算机编写一程序帮助他俩又快又准的计算出M和N的最大公约数。【问题分析】设用M作为被除数,N作为除数,R作为余数。这样我们就可以用
17、辗转相除法求出M和N的最大公约数,辗转相除法的具体算法如下:第1步:输入M和N的值;第2步:求出M除以N所得的余数R;第3步:将N的值赋给M,R的值赋给N;第4步:若R=0,则M为所求得的最大公约数,转第5步,否则转第1步;第5步:输出最大公约数M的值。根据上述算法,我们可以用结构化流程(N-S)图表示该算法:输入M和N的值RT除以N的余数MT, kRR=0输岀M的数值【程序设计】程序清单Program p3_3_1(input,output);varm, n,r:real;beg inwrite(输入两个正整数:);readl n(m, n);if nm the nbeg in它的N-S图如
18、下图所示or:=n;n:=m;m:=r;end;repeatr:=m mod n;m:=n;n:=r;until r=0;writeln(m,和,n,最大公约数是:,m)end.运行示例输入两个正整数:112 77112和77最大公约数是:7输入两个正整数:12 3412和34最大公约数是:2【知识拓展】1在程序设计中,如果需要在执行了某操作过程之后,再根据某一指定条件判定 是否重复执行,应采用直到循环语句,即repeat-until语句实现循环。此语句的含义 是:“重复执行循环体,直到指定条件为真时为止”。2Repeat-until语句格式:repeatuntil 循环体语句un til布尔
19、表达其中repeat和until为保留字。3它的执行过程:1执行循环体;2计算布尔表达式的值,若为false则返回,否则,退出循环体执行下一 语句。4.它的特点是:先执行(循环体),后判断(布尔表达式)。repeat-u ntil是个整体,它是一个语句(构造型语句),在这个句中可以包含若干个语句,不要误认为repeat是一个语句,until是一个语句;5. Repeat语句与while语句都可以实现循环结构,且可以相互转化,但有四点不 同:Repeat语句While语句先执行语句,后判断条件。先判断后执行语句。指定语句可以是多条语句,无需 用beg in和end。指疋语句只能是一条语句或一条复
20、 合语句。当条件不成立时重复执行。当条件成立时重复执行。无论条件是否成立,总要执行一 次指定语句序列。当条件一开始就不成立时,则不执行 循环中的指定语句。【同步练习】1利用格里高公式求n。二=1+一-I+,直到最后一项的值小于10-6为止4357问题分析:解本题的关键就是求右边数值序列的和,序列有明显的特点:分母是从1开始的奇数,来设置它们各项的符号位。画出程序的N-S图程序清单program ex2_34;varf:i nteger;n ,t,pai:real;beg inpai:=0;t:=1;n:=1.0;f:=1;repeatpai:=pai+1;n:=n+2.0;f:=-f;t:=
21、f/nun til abs(t)1e-6;pai:=pai*4;writln(pai=,pai:10:8);readl nend.pai.=0; L=1; n.=1; L=1pai:=pai+tn:=n+2.0f:=-ft:=f/nun til abs(t)max THEN max:=aELSEIF a=9avg:=s/i;writeln(最大值是:,max, 最小值是:,min);writeln(10个数和是:,s ,10个数平均值是:,avg:5:1 );END.运行示例please in put:1 2 3 4 5 6 7 8 9 10最大值是:10最小值是:110个数和是:5510个数
22、平均值是:5.5第 4 节多重循环程序实例【问题描述】一个炊事员上街采购,用500元钱买了90只鸡,其中母鸡一只15元,公鸡一只10元,小鸡一只5元,正好把钱买完。问母鸡、公鸡、小鸡各买多少只?【问题分析】设母鸡I只,公鸡J只,小鸡为k只,我们可列方程组:丿l+J+K=90显然这是一个不定方程组,一般情况下有多解。 由方程可得I和J、K的取值范围:0I90,0J90,0K90我们用穷举法在范围内搜索求解。【程序设计】程序清单program ex3_4_1;var i,j,k:integer;beginfor i:=0 to 90 dofor j:=0 to 90 dofor k:=0 to 9
23、0 doif(i+j+k=90)AND(15*i+10*j+5*k=500)thenwriteln(i:5,j:5,k:5);end;运行示例010 8018812682348342845085【知识拓展】1.以上的程序是一个三重的for循环嵌套。循环体由PASCA语句构成,当然也可以包含FOR语句,这就构成了循环的嵌套,形成多重循环2 为了减少无用的循环次数,我们进一步研究题目,分析后,可以将循环次数缩小,这里I的值可以是0到33(因为如果500元钱全部用来买母鸡,最多可以买500/1 5只),同样J的值可以从0到50。知道I和J的值,又可求出K的值为90-I-J, 这样又可减少循环嵌套的层
24、数。以上的程序可以优化为:programr ex4_6;var i,j,k:integer;beginfor i:=0 to 33 dofor j:=0 to 50 dobegink:=90-i-j;if 15*i+10*j+5*k=500 then writeln(i:5,j:5,k:5);end;end.优化后的程序运行速度会大大提高。 在以后设计程序时, 同学们不仅要注意如何解 题,还要尽量使程序优化,提高运行速度。【同步练习】1试编写能够打印输出如下图形的程序:# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
25、 # # # # # # # # # # # # # # # # # # #问题分析:这道题属于打印平面图形问题。程序的设计如下:由两个并列循环外加一个嵌套循环构成的。各环的作用为:1。外层循环控制打印的行数,此倒三角形共需8行,故外层循环的设置为递减型循环。2嵌套在外环内的第一个并列循环为空格输出,根据图形变化控制输出不同数量的空格。3外环内第二个并列循环为控制三角形每行中“#”号的个数。程序清单program ex2_36;vari,j,k:integer;bginfor i:=8 downto 1 dobeginfor j:=1 to 8i dowrite();for k:=2*i-1
26、downto 1 dowriteln;end;readlnend.2.求s=1!+2!+3!+10!的值。问题分析:这个问题是求10自然数的阶乘之和,可以用for循环来实现,通过10次的循环可求 出1!,2!,10!,并同时累加起来,可求得S的值。而求T=N!,又可以用一个for循环来实 现,构成了二重循环。程序清单program ex4_5;var t,s:real;i,j,n:integer;beginS:=0;for n:=1 to 10 dobegint:=1;for j:=1 to n dot:=t*j;S:=S+t;end;writeln(s=,s:0:0);end.3.求100999中的水仙花数。(若三位数ABC ABC=A+B+C,则称ABC为水仙花数。333例如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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 园区商家安全管理制度
- 员工外出学习管理制度
- 多人活动安全管理制度
- 售后配件发货管理制度
- 城市配送仓库管理制度
- 兼职私人教练管理制度
- 完善单位各项管理制度
- 医院安保日常管理制度
- 学校病例随访管理制度
- 大型净水设备管理制度
- 铁路列车服务课件
- DB13T 2770-2018 焊接熔深检测方法
- T∕ZZB 2774-2022 商用车用气路电磁阀
- JJF 1343-2022 标准物质的定值及均匀性、稳定性评估
- 民法典侵权责任编课件
- 员工手册(格林豪泰)VDOC
- 高中数学苏教版(2019)选择性必修第一册考前必背知识点 素材
- 边坡复绿专项施工方案
- 幼儿园课件——《生气虫飞上天》PPT课件
- 幼儿园幼儿个人健康档案
- 部编版《道德与法治》三年级下册第11课《四通八达的交通》精美课件(含视频)
评论
0/150
提交评论