FREE PASCAL入门-循环结构程序

上传人:ji****72 文档编号:37541139 上传时间:2018-04-18 格式:DOC 页数:25 大小:121KB
返回 下载 相关 举报
FREE PASCAL入门-循环结构程序_第1页
第1页 / 共25页
FREE PASCAL入门-循环结构程序_第2页
第2页 / 共25页
FREE PASCAL入门-循环结构程序_第3页
第3页 / 共25页
FREE PASCAL入门-循环结构程序_第4页
第4页 / 共25页
FREE PASCAL入门-循环结构程序_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《FREE PASCAL入门-循环结构程序》由会员分享,可在线阅读,更多相关《FREE PASCAL入门-循环结构程序(25页珍藏版)》请在金锄头文库上搜索。

1、循环结构程序设计循环结构程序设计第第 1 1 节节 ForFor 循环程序实例循环程序实例【问题描述问题描述】计算一副扑克牌的点数,其中牌 A 为 1 点,牌 J、Q、K 分别为 11、12、13 点,大、小王不算点。【问题分析问题分析】根据题意,要计算一副扑克牌的点数,可以先求出一种花色牌的点数和,再乘以 4 即可。进一步分析,求一种花色牌的点数和,即是求 113 的连续自然数之和。我们用S 表示所求数的和,用 T 表示加数,这样可以让 T 从 1 变化到 13,每次让 T 不断加入到 S 中,就可以求出 S 的值,最后乘以 4 即可。【算法设计算法设计】 自然语言置初值,即 S=0,T=1

2、;使 S=S+T ,所求出的和仍放入 S 中;使 T 增加 1,即 T=T+1;如果 T 小于等于 13,转第二步,否则转第五步;输出计算结果。 程序流程图和结构化流程(N-S)图【程序设计程序设计】程序清单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在程序处理过程中,经常需要对某一条或一组语句重复执行多次,以最终完成某项任务,这就是循环。对于重复次数已知,而不依赖循环中语句的结果

3、,常用计数循环(for / to /do 语句)。2for 循环语句格式:格式一: for 控制变量 := 初值 to 终值 do 循环体语句;格式二: for 控制变量 := 初值 downto 终值 do循环体语句;其中 for、to、downto、do 为保留字,do 后面的语句称为循环体。其中循环控制变量可以是整型、字符或布尔型,但不能为实型。一般地,可以是顺序类型数据。初值、终值表达式通常要与控制变量的类型相同。在 for 语句中如果使用的是 to,称为递增型计数循环语句,如果使用的是 downto,称为递减型计数循环语句。3For 语句的执行过程:先将初值表达式的值计算出来并赋给循

4、环控制变量。判断循环控制变量的值是否已“超过”终值(对于递增型循环来说,“超过”是指“大于”;对递减型循环来说,“超过”是指“小于”)。如已超过,则跳到步骤。如果未超过终值,则执行 do 后面的语句(称为循环体)。循环变量递增(或递减)。返回执行步骤。循环结束,执行 for 循环下面的一个语句4使用 For 语句的的注意事项:循环控制变量必须为顺序类型。例如,可以是整型、字符型、布尔型,不能为实型,如:for i=3.5 to 8.5 do write(i)是错误的。循环控制变量的值递增或递减的规律是:若是递增型循环,则按 Succ 函数规律变化;若是递减型循环,则按 Pred 函数规律变化。

5、例如:for k:=ato zdo write(k)将按顺序打印出 26 个小写英文字母“abcdz”。循环体可以是一条基本语句,也可以是一条复合语句。例如:for j:=1 to n dobeginreadln(x);wreteln(x+1)end;循环语句的范围直到 end 才结束。循环控制变量不得在循环体内再被赋值。例如:for x;=1 to 10 dobeginx:=2*z+1;end;是错误的。循环控制变量的初值和终值一经确定,循环次数就确定不变了。循环的次数可用如下公式计算:0 若初值终值递增型循环的循环次数=Ord(终值)-Ord(初值)+1 若初值终值0 若初值终值递减型循环

6、的循环次数=Ord(初值)-(终值)+1 若初值 终值 【同步练习同步练习】1宰相的麦子:相传古印度宰相达依尔,是国际象棋的发明者。有一次,国王因为他的贡献要奖励他,问他想要什么。达依尔说:“只要在国际象棋棋盘上(共 64 格)摆上这么些麦子就行了:第一格一粒,第二格两粒,后面一格的麦子总是前一格麦子数的两倍,摆满整个棋盘,我就感恩不尽了。”国王一想,这还不容易。于是令人扛来一袋麦子,可很快用完了,又扛来一袋,很快用完了国王很奇怪,请你帮国王计算一下,要多少麦子。(1 立方米的麦子约为 1.42108粒)问题分析:对于编程类问题的描述,要特别注意正确、全面地理解题意,要学会从描述性语言中抽象出

7、具体的数据,并建立数学模型。在本题中根据“国际象棋棋盘上共有 64 格,第一格一粒,第二格两粒,后面一格的麦子总是前一格麦子数的两倍”的题意,我们可以建立数学模型:第一格为 20,第二格为 21,第三格为 22,第 64 格为 263,设 64 格中应放麦子数为 S,则可用下面的公式表示:S= 20+21+22+23+263 1 立方米的麦子约为 1.42108粒,那么 S 粒麦子的体积 T 为:T=S/(1.42108)立方米。这样我们将问题转化为一般数学模型,再根据数学模型写出算法设计,再写出具体程序就水道渠成。程序清单program p3_1_2(input,output);var n,

8、s,t:integer begin s:=0; for n:=0 to 63 dos: =s+2n;t:=s/(1.42*108) writeln(s=,s,)writeln(t=,t );end. 运行示例S=1.84467441E+19T=1.29906648E+112阅读下面的程序,说明该程序的作用。程序清单program p3_1_3(input,output);var a,b,c:integer此处 integer 表示整型数据begingwriteln(请任意输入一个数:);readln(b);for c:=1 to 5 dobeginread(a);if ab then b:=a

9、;end;writeln(最后的值是:,b:5);end.运行示例请任意输入一个数:64 7 13 8 11最后的值是:13第第 2 2 节节 当循环程序实例当循环程序实例【问题描述问题描述】农场主的预算报告放暑假学校组织夏令营来到一个农场,农场主热情的接待了他们。在参观时,同学们发现在农场的左上角圈出了一块地方,这儿阳光充足,通风也不错,但却什么也没有,觉得很奇怪。农场主告诉大家因为农场四周由许多小朋友因没钱交学费而缀学,所以决定引进品种不错的雌雄一对小白兔,在这饲养。小白兔需经过一个月才能长大,长大后每个月都生雌雄一对小白兔。想等小白兔繁殖到 1000 对的时候,在分发给周围贫困的人,希望

10、能帮助他们重新进入课堂。现正在写一份预算报告,其中预计所需时间却却没算出来。同学们现在就让我们来帮助这位好心的农场主算出时间。【问题分析问题分析】这问题从表面来看好象没有什么规律,不妨设计一张表格来推算一下。月 份123456兔子数(对)12481632因为第一个月小白兔没长大,所以兔子数是 1 对。到了第二个月小白兔长大了,生了一对小白兔,兔子数是 2 对。第三个月小白兔也长大了,大白兔是 2 对,它们都生了一对小白兔,兔子数是 4 对。依此类推,发现除了第一个月,其它都是:前一个月的兔子数 2 = 本月兔子数 。我们发现这又是一个循环,直到兔子数为 1000对的时候结束。可是用 for 语

11、句显然不行,因为我们不知道循环的次数。下面我们用当型循环(while/do 语句)来编写程序。农场主的预算可以描述如下: 月份:=1;兔子数:=1; 预定义第一个月的兔子数是 1 对while 兔子数0 DO BEGIN Writeln (k); k:=k-1 END; 其中 (1)WHIlE 和 DO 是 PASCAL 保留关键字,是 WHILE 循环语句的组成部分。 (2)保留关键字 DO 后面的“语法”只能是一条语句,称为“循环体”;如果循环体中需要包含多个语句则应该如上例所示,采用一条复合语句。2WHILE 循环的执行功能当执行到 WHILE 语句时(1) 求出布尔表达式的值(2)若布

12、尔表达式的值为真,则执行循环体内的语句;若为“假”,执行步骤4 (3)重复步骤 1 和 2 (4)循环结束,执行循环后面的语句。3本例 While 循环的结构化流程图如下:【同步练习同步练习】1周末小明遇到一个有趣的题目:找出四位整数 abcd 中满足下述关系的数:( ab + cd )( ab + cd )= abcd请你帮小明编写一个程序,找出满足条件的所有的数。问题分析:While 布尔表达式循环体语句这道题属于搜索问题,因为是四位整数,不难看出范围是从 10009999,所求的数究竟在哪里,无法确定,只有在这个范围内从小到大一个一个进行搜索,对每一个数看它的高两位数与低两位数和的平方是

13、否与该数相等。ab 和 cd 两个数可以在 abcd 中将高两位与低两位分离开来。我们可以这样考虑,将 abcd 整除 100,可得到高两位 ab。如:abcd=1234 , 1234 div 100 = 12。有了 ab,也就可用下面的式子把低两位 cd 分离出来:abcd ab 100 = abcd ab00 = cd如: 1234 12 100 = 1234 1200 = 34同学们仔细想想,在求解的过程中,条件都是一样的,只是 abcd 这个数不同。实际上是在反复做同一个步骤。下面我们用当型循环来解这道题。程序清单Program xuhuan(input,output);Var i,m

14、,n,k:integer;BeginI:=1000;给 I 赋值,即 abcd 假设一个数;While I=y then x:=y;m:=m+1;END;write (n , 个数中最大的是: , x);END.运行示例输入共需参加比较的总数: 3先将 n 个数的第一个数输入给变量 x:1输入一个其他参加比较的数 2输入一个其他参加比较的数 103 个数中最大的是:10第第 3 3 节节 直到循环程序实例直到循环程序实例【问题描述问题描述】小明和小强是好朋友,他俩都喜爱数学,一个周末的下午他们进行了一场比赛,题目是这样的:任意给出两个正整数 M 和 N,求出 M 和 N 的最大公约数,看谁算的

15、又快又准。请你用计算机编写一程序帮助他俩又快又准的计算出 M 和 N 的最大公约数。【问题分析问题分析】设用 M 作为被除数,N 作为除数,R 作为余数。这样我们就可以用辗转相除法求出M 和 N 的最大公约数,辗转相除法的具体算法如下:第 1 步:输入 M 和 N 的值;第 2 步:求出 M 除以 N 所得的余数 R;第 3 步:将 N 的值赋给 M,R 的值赋给 N;第 4 步:若 R=0,则 M 为所求得的最大公约数,转第 5 步,否则转第 1 步;第 5 步:输出最大公约数 M 的值。根据上述算法,我们可以用结构化流程(N-S)图表示该算法:【程序设计程序设计】程序清单Program p3_3_1(input,output);varm,n,r:real;beginwrite(输入两个正整数:);readln(m,n);if nm then begin r:=n;n:=m;m:=r;end;repeat r:=m mod n;m:=n;n:=r;until r=0;writeln(m,和,n,最大公约数是:,m)end. 运行示例输入两个正整数:112 77112 和 77 最大公约数是:7输入两个正整数:12 3412 和 3

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号