(共17张PPT)
4.4运用循环结构描述问题求解过程
《数据与计算》必修一
目 录
4.4.1 for循环的应用
4.4.2 while循环的应用
4.4.2 循环嵌套的应用
4.4.2 循环控制的应用
4.4.3循环嵌套的应用
1.循环嵌套的定义:
某一种循环语句中包含着自身或其他循环语句,就称为循环的“嵌套”。for循环或while循环之间可以相互嵌套。
2.循环嵌套的作用:
解决复杂的问题
单独使用for循环或while循环单循环语句,往往无法解决复杂的问题。如需要解决类似“工作要做很多遍,而每一遍工作都是需要重复做一些事情”的问题,就要用到多重循环
4.4运用循环结构描述问题求解过程
案例一:
如果一个三位数等于它的各位数字的3次方,则这个3位数称为“水仙花”数,例如153=13+53+33。试编写程序求出所有的水仙花数。
思考:如何用程序求出1000以内的所有的水仙花数。
一、分析问题
通过观察水仙花数可知,一个三位数,百位数为1-9,十位数为0-9,个位数为0-9,分别把百位、十位、个位上的数字求立方和,然后和这个三位数本身去比较,如果等于这个三位数本身,则这个数就是水仙花数。
4.4运用循环结构描述问题求解过程
二、设计算法
1、设这个三位数为n,百位、十位、个位上的数字分别为a,b,c;
2、通过for循环语句依次实现百位、十位、个位数的立方求和;
3.令n=100*a+10*b+c;
4.判断a3+b3+c3==n,若两者相等,则是水仙花数,则打印输出。
4.4运用循环结构描述问题求解过程
for a in range(1,10):
for b in range(0,10):
for c in range(0,10):
n=100*a+10*b+c
if a*a*a+b*b*b+c*c*c==n:
print(n)
三、编写代码
4.4运用循环结构描述问题求解过程
四、调试运行程序
运行结果
解析:给定一个三位数abc,如何获得它的个位数c,十位数b,百位数a?
(1)以153为例,如何获得它的个位数3?只要%10就可以了:153%10=3;通过模10运算,我们将个位数3分离了出来。
(2)那么如何分离十位数5?先将十位数挪到个位,再利用%10,不就可以分离出来了吗?通过除以10向下取整,153//10=15,将十位数挪到个位上来;再利用模运算15%10=5,得到十位数5.
(3)如果想得到153的百位数,将153除以100向下取整即可:153 // 100 = 1
探究学习一:
思考:利用数位分离方法求1000以内的水仙花数?
4.4运用循环结构描述问题求解过程
项目小组经过讨论,最后选择购买单价分别为1.8元的笔记本、1.9元的笔、2.1元的小饰品作为活动的奖品和纪念品,每一种物品至少买100件,并且尽可能地用完1000元经费。如何设计方案,才能实现购买物品数量最多呢?如数量相同的情况下余额最小的方案为最佳,则最佳方案中每一种物品的数量是多少?余额是多少?
阅读教材p91使用循环嵌套解决问题的过程,理解问题求解过程。
探究学习二:
4.4运用循环结构描述问题求解过程
设购买单价为1.8元、1.9元、2.1元的物品数量分别为x,y,z,当前余额r元,所买物品总数量为s,根据题意有下面关系式:1.8x+1.9y+2.12≤1000,我们分别将x,y,z从100至555,526,476逐个穷举,如果x,y,z的值满足式子1.8x+1.9yr+2.1z≤1000,
①如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)一、分析问题
4.4运用循环结构描述问题求解过程
①令x1=100,令y1=100,令z1=100.令s=300,令r=1000-(100×1.8+100x
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-(18x+1.9y+2.1z).x1=x,y1=y,z1=z;若x+y+z=s,且1000-(1.8x+1.9y+2.1z)⑥转步骤④;
⑦转步骤③;
⑧转步骤②;
⑨输出x1,y1,z1,s和r的值。
4.4运用循环结构描述问题求解过程
根据上述的分析,可设计出如下的算法:
三、编写程序
x1=100
y1=100
z1=100
s=300
r=1000-(100*1.8+100*1.9+100*2.1)
for x in range(100,555):
for y in range(100,526):
for z in range(100,476):
if 1.8*x+1.9*y+2.1*z<=1000:
if x+y+z>s:
s=x+y+z
r=1000-(1.8*x+1.9*y+2.1*z)
x1=x
y1=y
z1=z
if x+y+z==s and r>=1000-(1.8*x+1.9*y+2.1*z):
s=x+y+z
x1=x
y1=y
z1=z
print("符合条件的最优方案:")
print("单价1.8元的物品的数量:",x1)
print("单价1.9元的物品的数量:",y1)
print("单价2.1元的物品的数量:",z1)
print("共买到礼物数量:",s)
print("余款还剩:",r)
4.4运用循环结构描述问题求解过程
四、调试、运行程序
4.4运用循环结构描述问题求解过程
运行结果
4.4.4循环控制的应用
循环控制包含控制循环变量的变化方式和控制循环的跳转,简单地说循环控制语句可以更改语句执行的顺序。
无论是for循环还是while循环,都需要一个控制循环的变量来控制循环的执行。但是,有些循环仅靠循环变量自身的变化难以达到想要的控制效果,因此需要用到控制循环的跳转语句。d
实现控制循环的跳转需要用到break和continue两个关键字。break是中断循环,continue是跳出本次循环体的执行。
1.循环控制的作用
4.4运用循环结构描述问题求解过程
在循环结构中,可以用break语句跳出当前循环体,从而中断当前循环。
在实际应用中,往往在循环体中使用某一个条件来选择是否中断循环,即跳出当前循环,转而执行当前循环外的下一条语句。
当某个条件满足时,立即退出循环,不再运行循环中余下的代码,也不管循环控制变量的条件测试结果如何。
for a in 'Python':
if a == 'h':
break
print( ‘当前字母 :’, a)
输出结果:
当前字母 : P
当前字母 : y
当前字母 : t
4.4运用循环结构描述问题求解过程
2.break 语句
break 实例应用
是对break语句的补充。continue不是立即跳出循环体,而是当条件符合需要跳转的时候,跳过该次循环结束前的语句,回到循环开头的条件测试部分,重新开始执行循环。
for a in 'Python':
if a == 'h':
continue
print( ‘当前字母 :’, a)
输出结果:
当前字母 : P
当前字母 : y
当前字母 : t
当前字母 : o
当前字母 : n
4.4运用循环结构描述问题求解过程
3.continue语句:
continue 实例应用:
循环控制语句总结
控制语句 描述
break 语句 在语句块执行过程中终止循环,并且跳出整个循环
continue 语句 在语句块执行过程中终止当前循环,跳出该次循环,执行下一次循环。
4.4运用循环结构描述问题求解过程
探究学习三:
用for循环和while循环编程实现计算从1到10的累加值。当循环到5时,用break或者continue跳出循环,结果会发生什么样的改变?
4.4运用循环结构描述问题求解过程