pascal第4章 循环结构的程序设计.ppt
文本预览下载声明
第四章 循环结构 第一节 循环语句(FOR语句) for语句的一般格式 For语句执行过程 说明 应用举例 第二节 当语句(?WHILE语句) WHILE循环 第三节 直到循环(REPEAT语句) 【上机练习4.3】 第四节 多重循环结构 【上机练习4.4】 请维护编者版权,请勿将课件在网络上传播。 福建省长乐一中 董永建 浙江省温州中学 舒春平 2009年9月 1、用REPEAT循环完成如下3题: ①求s=1+2+3+4+…+10 ②求s=1+1/2+1/3+…+1/100 ③计算n!,其中n由键盘输入。 2、读一组实数,遇零终止,打印其中正、负数的个数 及各自的总和。 3、用辗转相除法求两个自然数的最大公约数。 4、找出被2、3、5除时余数为1的最小的十个数。 5、将一根长为369cm的钢管截成长为69cm和39cm 两种规格的短料。在这两种规格的短料至少各截 一根的前提下,?如何截才能余料最少。 当一个循环的循环体中又包含循环结构程序时,我们就称之为循环嵌套。 内循环整个作为外循环的一条语句。 例4.17 求1!+2!+…+10!的值。 【分析】这个问题是求10自然数的阶乘之和,可以用for 循环来实现。程序结构如下: for n:=1 to 10 do begin ①N!的值?t ②累加N!的值?s end 显然,通过10次的循环可求出1!,2!…,10!,并同时累加起来, 可求得S的值。而求T=N!,又可以用一个for循环来实现:因此,整个程序为: program ex4_17; var t,s:longint; i,j,n:integer; begin S:=0; for n:=1 to 10 do begin t=1; for j:=1 to n do //求n! t:=t*j; S:=S+t; //累加n! end; writeln(‘s=’,s:0:0); end. 以上的程序是一个二重的for循环嵌套。这是比较好想的方法,但实际上对于求n!,我们可以根据求出的(n-1)!乘上n即可得到,而无需重新从1再累乘到n。 程序可改为: program ex4_17; var t,s:longint; i,j,n:integer; begin s:=0;t:=1; for n:=1 to 10 do begin t:=t*n; //t为上一个数的n-1的阶乘值,再乘以n即为n! s:=s+t; //累加n! end; writeln(‘s=’,s:0:0); end. 显然第二个程序的效率要比第一个高得多。第一程序要进行1+2+…+10=55次循环,而第二程序进行10次循环。如题目中求的是1!+2!+…+1000!,则两个程序的效率区别更明显。 例4.18 一个炊事员上街采购,用500元钱买了90只鸡, 其中母鸡一只15元,公鸡一只10元,小鸡一只5元,正好把钱买完。问母鸡、公鸡、小鸡各买多少只? 【分析】设母鸡I只,公鸡J只,则小鸡为90-I-J只,则15*I+ 10* J+(90-I-J)*5=500,显然一个方程求两个未知数是不能直接求解。必须组合出所有可能的i,j值,看是否满足条件。这里I的值可以是0到33,J的值可以0到50。 源程序如下: programr ex4_18; var i,j,k:integer; begin for i:=0 to 33 do //枚举母鸡的数量 for j:=0 to 50 do //枚举公鸡的数量 begin k:=90-i-j; if 15*i+10*j+5*k=500 then writeln(i:5,j:5,k:5); end; end. 例4.19 求100-999中的水仙花数。(若三位数ABC,ABC=A3+B3+C3,则称ABC为水仙花数。例如153,13+53+33=1+125+27=153,则153是水仙花数。) 【分析】 根据题意,
显示全部