资源简介 ?运用循环结构描述问题求解过程(下)学习目标掌握循环结构。学习内容循环嵌套的应用单独使用for循环或while循环单循环语句,往往无法解决复杂的问题。如需要解决类似“工作要做很多遍,而每一遍工作都是需要重复做一些事情”的问题,就要用到多重循环,即“循环嵌套”。如果某一种循环语句中包含着自身或其他循环语句,就称为循环的“嵌套”。for循环或while循环之间可以相互嵌套。问题项目小组经过讨论,最后选择购买单价分别为1.8元的笔记本、1.9元的笔、2.1元的小饰品作为活动的奖品和纪念品,每一种物品至少买100件,并且尽可能地用完1000元经费。如何设计方案,才能实现购买物品数量最多呢?如数量相同的情况下余额最小的方案为最佳,则最佳方案中每一种物品的数量是多少?余额是多少?思考如何运用循环嵌套的方法编程解决上述的最优采购方案设计问题?观察要解决这个问题,需要用到循环嵌套的知识,下面提供了其中一种解法:(1)分析问题。设购买单价为1.8元、1.9元、2.1元的物品数量分别为x,y,z,当前余额为r元,所买物品总数量为s,根据题意有下面关系式:1.8x+1.9y+2.1z≤1000(x,y,z∈N,N为自然数),我们分别将x,y,z从100至555,526,476逐个穷举,如果x,y,z的值满足式子1.8x+1.9y+2.1z≤1000(x,y,z∈N,N为自然数),如x+y+z>s,则s=x+y+z,r=1000-(1.8x+1.9y+2.1z),并记录此时x,y,z的值;如x+y+z=s,且1000-(1.8x+1.9y+2.1z)(2)设计算法根据上述的分析,可设计出如下的算法:①令x1=100,令y1=100,令z1=100,令s=300,令r=1000-(100×1.8+100×1.9+100×2.1)②x从100~555穷举;③y从100~526穷举;④z从100~476穷举;⑤如果1.8x+1.9y+2.1z≤1000,若x+y+z>s,则s=x+y+z,r=1000-(1.8x+1.9y+2.1z),x1=x,y1=y,z1=x;若x+y+z=s,且1000-(1.8x+1.9y+2.1z)⑥转步骤④;⑦转步骤③;⑧转步骤②;⑨输出x1,y1,z1,s和r的值。(3)编写程序。.Z1h)k"t8@根据上面设计的算法,编写出解决该问题的程序如下:(4)调试运行将程序输入计算机进行调试运行,结果如下所示:符合条件的最优方案是单价1.8元的物品的数量是单价19元的物品的数量是:106单价2.1元的物品的数量是:100共买到的礼物总数量为:余款还剩:00元循环控制的应用循环控制包含控制循环变量的变化方式和控制循环的跳转。无论是for循环还是while循环,都需要一个控制循环的变量来控制循环的执行。但是,有些循环仅靠循环变量自身的变化难以达到想要的控制效果,因此需要用到控制循环的跳转语句。实现控制循环的跳转需要用到break和continue两个关键字。其中,?break是中断循环,continue是跳出本次循环体的执行。1.break语句在循环结构中,可以用break语句跳出当前循环体,从而中断当前循环。在实际运用中,往往是在循环体中使用某一个条件来选择是否中断循环,即跳出当前循环,继而执行当前循环外的下一条语句。也就是说,当某个条件成立的时候,需要立即退出循环,不再运行循环中余下的代码,也不管循环控制变量的条件测试的结果如何。使用break语句,即可让程序能按照要求执行要执行的代码。2.continue语句continue语句是对break语句的补充。continue不是立即跳出循环体,而是当条件符合需要跳转的时候,跳过该次循环结束前的语句,回到循环开头的条件测试部分,重新开始执行循环。同理,在实际运用中,往往是在循环体中使用某一个条件来选择是否跳转循环。课内任务:有三个数字:1、2、3,能组成互不相同且无重复数字的两位数,各是多少?运用循环结构描述问题求解过程(上)学习目标掌握循环结构。学习内容程序的循环结构是程序设计中常用到的基本结构之一。循环是让计算机自动完成重复工作的常见方式。for循环、while循环、循环嵌套、循环控制等都是程序循环结构的主要内容。for循环的应用for循环语句的一般格式如下:for??循环变量??in??列表:??语句或语句组for循环依次把列表中的每个元素逐个迭代出来。冒号“:”代表下一行是循环的第一行,但是循环体在书写时需要缩进。在for循环中,从for语句末尾的冒号开始至其下面没有缩进的代码之间都是其包含的需要重复执行的部分。因此,for循环所包含的语句是以缩进为标志的。具体如表4-9所示。需要注意的是,列表可以有几种表达方式(1)直接罗列的方式。如表4-9中代码“forvaluein[1,2,3,4,5]:”就是直接罗列的方式。(2)先定义后使用的方式,如表4-10所示。(3)使用range()函数。range()函数是让Python从指定的第一个值开始数,并在到达所指的第二个值后停止,因此不包含第二个值。如range(1,6)其实是生成一个1~6的整数(不包含6),如表4-11所示。使用range()函数时,还可指定步长,如表4-12所示。当然,使用range()函数时,数值列表也可以是降序的,如range(10,1,-2)就是生成10至2的偶数(降序),具体如表4-13所示。问题假如项目小组经过讨论,决定先网购单价为1元至10元的十种笔记本各1本,且每一种只买1本,那么该如何编程计算一共要花多少元?思考如何用for循环语句编程解决上述“网购物品累计费用计算”问题?观察解决上述问题的方法有很多,其中一种方法步骤如下:(1)分析问题。这个问题相当于要计算从1到10的累加值。1~10的累加就是计算1+2+…+10,可以用for循环结构编程来解决这个问题。(2)设计算法。根据上述分析,可设计如下算法:需要有一个循环变量从1变化到10,将该变量命名为i;还需要另外一个临时变量不断和该变量进行加法运算,并记录运算结果,将临时变量命名为sum;变量i每增加1时,就和变量sum进行一次加法运算,变量sum记录的是累加的结果。该算法流程图如图4-14所示。(3)编写程序。根据上面设计的算法,编写出解决该问题的程序所示:(4)调试程序。将程序输入计算机进行调试运行,所得结果为“theresult=55”。while循环的应用while循环是当型循环,只要条件满足,就不断循环;否则,退岀循环。whie循环语句的格式:while??(表达式):??语句或语句组(1)表达式一般是一个关系表达式或一个逻辑表达式,表达式的值应该是一个逻辑值真(True)或假(False)。(2)当表达式的值为真时,执行循环体语句;当表达式的值为假时,退出循环,执行循环体外的下一条语句(即while后面没有缩进的第一条语句)。(3)每次循环都是执行完循环体语句后回到表达式处重新开始判断,重新计算表达式的值。一旦表达式的值为假就退出循环,为真时就继续执行循环体语句。(4)循环体中必须有改变条件表达式值的语句,否则将成为死循环。(5)while循环可以用流程图来演示执行过程,如图4-15所示。问题项目小组为了筹集购买奖品和纪念品的费用,准备开展一次募捐活动,计划向第一个赞助人募集20元,向第二个赞助人募集25元……后一个比前一个多募捐5元,依次下去,第几个人募捐后募集到的总费用累计超过500元?思考如何用while循环语句编程解决上述的募集费用计算问题?观察用while循环语句编程解决上述问题的方法有多种,编程时要注意条件表达式的构成,现给出其中一种方法的步骤如下:(1)分析问题。设所拉赞助人的数量为num(num=1,2,3,…),每次募集的费用为money,每次募集之后总费用为sum,则sum可以用如下的式子表示:sum=20+25+30+……于是这个问题就可以转化为:当sum≥500时,求num的值。-(2)设计算法。根据上述的分析,设计算法如下:①令num=1;②令money=20;③令sum=20;④num=num+1;⑤money=money+5;⑥sum=sum+money;⑦如果sum<500,则返回步骤④;⑧输出num的值;⑨结束。(3)编写程序。根据上面设计的算法,编写出解决该问题的程序如下:(4)调试程序。将程序输入计算机进行调试运行,得出结果为12。课内任务1:假如项目小组经过讨论,决定网购单价为1元至10元的十种笔记本,且每一种笔记本需要购买对应单价的本数(1元的买1本,2元的买2本,3元的买3本,……,10元的买10本),那么该如何编程计算一共要花多少元?课内任务2:项目小组为了筹集购买奖品和纪念品的费用,准备开展一次募捐活动,计划向第一个赞助人募集20元,向第二个赞助人募集25元……后一个比前一个多募捐5元,依次下去,第几个人募捐后募集到的总费用累计超过500元?对于上述问题的解法,如果改变几个变量的初始值,假设令“num=0,money=20,sum=0”,那么,while循环体中的程序段应该如何编写?它们之间的语序能改变吗?为什么? 展开更多...... 收起↑ 资源列表 4.4 运用循环结构描述问题求解过程(上) 学案.doc 4.4 运用循环结构描述问题求解过程(下) 学案.doc