作者其他文章
【导学案】4.5 设计购买纪念品的最佳方案——项目实施4——运用循环结构描述问题求解过程
发布者:葛小英发布时间:2024-04-21 10:40:28阅读(17) 评论(0) 举报
课前准备】
1.快速登录平台
2.回到导学案页面,阅读导学案,各小组根据项目选题及拟订的项目方案,结合本节所学知识,开展探究活动
【项目选题】
本章项目学习活动大主题,生活中常见的购买物品最佳方案 1.设计购买电信服务的最佳方案 2.设计购买家用电器的最佳方案 3.设计购买图书的最佳方案 4. 设计购买纪念品的最佳方案(例) |
【项目实施】
(一)分析相应的程序设计语言的基础知识。
(二)分析所选程序设计语言的特点。
(三)运用顺序结构描述问题求解过程
(四)运用选择结构描述问题求解过程
(五)运用循环结构描述问题求解过程
【问题1】
假如项目小组经过讨论,决定先网购单价为1元至10元的十种笔记本各1本,且每一种 只买1本,那么该如何编程计算一共要花多少元?
【分析】
解决上述问题的方法有很多,其中一种方法步骤如下:
(1)分析问题——学习相关知识点
这个问题相当于要计算从1到10的累加值。1~10的累加就是 计算1+2+…+10,可以用for循环结构编程来解决这个问题。
项目实施4 | 探究内容 | 知识与技能 | 具体活动 | 相关学习资源 | 学科核心素养 |
运用循环结构描述“购买笔记本的费用优惠” 问题求解过程 | for 语句的应用 | 1.for循环语句格式及执行过程 2.运用for循环语句描述问题的求解过程 | 1.分析问题,学习for循环语句的格式,并描述算法 格式: for 循环变量 in 列表: 语句或语句组 2.画出流程图 3.编写代码 4.调试运行 | 教材:P85-88 4.4 运用循环结构描述问题求解过程 | |
(2)设计算法。
根据上述分析,可设计如下算法:需要有一个循环变量从 1变化到10,将该变量命名为i;还需要另外一个临时变量不断 和该变量进行加法运算,并记录运算结果,将临时变量命名为 sum;变量i每增加1时,就和变量sum进行一次加法运算,变量 sum记录的是累加的结果。
(3)画流程图
(4)编写程序。
根据上面设计的算法,编写出解决该问题的程序(见配套学 习资源包“第四章\课本素材\程序4-5”)如下:
# 高一(5)班 1-2组 设计购买纪念品的最佳方案——for循环 # 先网购单价为1元至10元的十种笔记本各1本,且每一种只买1本 sum=0 for i inrange(1,11): sum=sum+i print("the result:",sum) |
(5)调试运行
【问题2】
项目小组为了筹集购买奖品和纪念品的费用,准备开展一次募捐活动,计划向第一个 赞助人募集20元,向第二个赞助人募集25元……后一个比前一个多募捐5元,依次下去, 第几个人募捐后募集到的总费用累计超过500元?
【分析】
用while循环语句编程解决上述问题的方法有多种,编程时要注意条件表达式的构成, 现给出其中一种方法的步骤:
(1)分析问题——学习相关知识点
设所拉赞助人的数量为num(num=1,2,3,…),每次募集的费用为money,每次募 集之后总费用为sum,则sum可以用如下的式子表示:
sum=20+25+30+…
于是这个问题就可以转化为:当sum≥500时,求num的值。
项目实施4 | 探究内容 | 知识与技能 | 具体活动 | 相关学习资源 | 学科核心素养 |
运用循环结构描述“购买笔记本的费用优惠” 问题求解过程 | while语句的应用 | 1.whiler循环语句格式及执行过程 2.运用while循环语句描述问题的求解过程 | 1.分析问题,学习while循环语句的格式,并描述算法 格式: while (表达式): 语句或语句组 2.编写代码 3.调试运行 4.讨论与交流 | 教材:P88-90 4.4.2 while循环的应用 | |
(2)设计算法。
根据上述的分析,设计算法如下:
①令num=1;
②令money=20;
③令sum=20;
④num=num+1;
⑤money=money+5;
⑥sum=sum+money;
⑦如果sum<500,则返回步骤④;
⑧输出num的值;
⑨结束。
(3)编写程序。
根据上面设计的算法,编写出解决该问题的程序(见配套学习资源包“第四章\课本 素材\程序4-6”)如下:
# 高一(5)班 1-2组 设计购买纪念品的最佳方案——while 循环# 募捐活动,计划向第一个 赞助人募集20元,向第二个赞助人募集25元……后一个比前一个多募捐5元,# 依次下去, 第几个人募捐后募集到的总费用累计超过500元? num =1 money =20 sum=20 while sum<500: num = num+1 money = money+5 sum=sum+money print(num) |
(5)调试运行
【小组讨论】交流讨论如下问题:
(1)如何根据上述解法的自然语言描述画出其算法流程图?
(可将结果分享到班级话题讨论区,组长注明班级+组别+4.4.2 while 循环 流程图)
(2)对于上述问题的解法,如果改变几个变量的初始值,假设令“num=0,money=20, sum=0”,那么,while循环体中的程序段应该如何编写?它们之间的语序能改变吗?为 什么?
(可到班级话题讨论区,组长注明班级+组别+4.4.2 while 循环 改变变量初始值,除小组讨论,各小组可参与其它小组讨论,发言注明 )
【问题3】
项目小组经过讨论,最后选择购买单价分别为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)<r, 则r=1000-(1.8x+1.9y+2.1z),并记录此时x,y,z的值。
项目实施4 | 探究内容 | 知识与技能 | 具体活动 | 相关学习资源 | 学科核心素养 |
运用循环循环嵌套描述“购买笔记本的费用优惠” 问题求解过程 | 循环嵌套的应用 | 1循环嵌套样式及执行流程 2.运用循环嵌套描述问题的求解过程 | 1.分析问题,学习循环嵌套样式,并描述算法 格式: for 循环变量 in 列表: 语句或语句组 2.画出流程图 3.编写代码 4.调试运行 | 教材:P90-92 4.4.3 循环嵌套的应用 | |
(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=z;若x+y+z=s,且1000-(1.8x+1.9y+2.1z)<r,则r=1000- (1.8x+1.9y+2.1z),x1=x,y1=y,z1=z;
⑥转步骤④;
⑦转步骤③;
⑧转步骤②;
⑨输出x1,y1,z1,s和r的值。
(3)编写程序。
根据上面设计的算法,编写出解决该问题的程序(见配套学习资源包“第四章\课本 素材\程序4-7”)如下:
x1 =100 y1 =100 z1 =100 s =300 r =1000-(100*1.8+100*1.9+100*2.1) for x inrange(100,556): for y in range(100,527): for z in range(100,477): 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 r =1000-(1.8*x+1.9*y+2.1*z) x1 = x y1 = y z1 = z else: break # 当1.8*x+1.9*y+2.1*z>1000,则可以退出循环,避免循环空转而浪费时间 print("符合条件的最优方案是:") print("单价1.8元的物品的数量是:",x1) print("单价1.9元的物品的数量是:",y1) print("单价2.1元的物品的数量是:",z1) print("共买到的礼物总数量为:",s) print("余款还剩:",r,"元") |
(5)调试运行
【小组讨论】交流讨论如下问题:
(1)for循环、while循环语句在格式、功能、应用等方面的异同及其各自的特点。
(可将结果分享到班级话题讨论区,组长注明班级+组别+4.4 循环语句格式、功能、应用特点)
(2)对于上述问题的解法,如果改变几个变量的初始值,假设令“num=0,money=20, sum=0”,那么,while循环体中的程序段应该如何编写?它们之间的语序能改变吗?为 什么?
(可到班级话题讨论区,组长注明班级+组别+4.4.2 while 循环 改变变量初始值,除小组讨论,各小组可参与其它小组讨论,发言注明 )