5.3《算术表达式求值》

2024-07-25
| 20页
| 157人阅读
| 1人下载
普通

资源信息

学段 高中
学科 信息技术
教材版本 高中信息技术教科版选择性必修1 数据与数据结构
年级 -
章节 5.3 算术表达式求值
类型 课件
知识点 -
使用场景 同步教学-新授课
学年 2024-2025
地区(省份) 全国
地区(市) -
地区(区县) -
文件格式 PPTX
文件大小 33.63 MB
发布时间 2024-07-25
更新时间 2024-07-25
作者 xkw_026617112
品牌系列 -
审核时间 2024-07-25
下载链接 https://m.zxxk.com/soft/46514333.html
价格 1.50储值(1储值=1元)
来源 学科网

内容正文:

5.3算术表达式求值 高中信息技术/教科版/选择性必修1 目录 1.引入、表达式计算卡片游戏 2.分析与抽象 3.编程解决算术表达式求值 4.课堂小结 1.引入、表达式计算卡片游戏 同学们,我们来做一个纸牌游戏,通过该游戏得到四则运算式的值,而且是任意四则运算式的值。我们来看一看这个游戏怎么玩。 任务一体验手动算术表达式求值 活动1四则运算游戏 第一步:每人手里都有一张A4纸,请大家对折4次,然后把纸裁开,可以得到16张小纸牌。 第二步:任意写一个四则运算式,为了简单,数和运算符不要超过10个。把这个四则运算式,从左到右写在纸牌上,每张纸牌只能写一个数字或运算符。比如我写的算式为 3+2 * 4-5,从左到右,把这些数字和运算符写在纸牌上。如图所示。 任务一体验手动算术表达式求值 活动1四则运算游戏 第三步:桌面上设置两个区域,一个是数字区,一个是符号区,如表所示。游戏的目标是求出算术表达式的值,把手中的牌全部放入数字区或符号区。最初所有牌都拿在手中,从左到右取牌。 放牌: 指把牌放入数字区或符号区的最上面。 消牌:指取出数字区最上面的两张牌、运算符区最上面的一张牌,用两个数字做运算符指明的运算,把结果写入空牌并放入数字区。 任务一体验手动算术表达式求值 活动1四则运算游戏 游戏规则如下: ①如果取出的牌上是数字,直接把牌放入数字区。 ②如果取出的牌上是乘除号,而符号区最上面也是乘除号,就不断消牌,直到遇到加减号或符号区清空,然后把牌放入符号区。 ③如果取出的牌上是加减号,就不断消牌,直到符号区清空,然后把牌放入符号区。 ④当手中没有牌但符号区还有牌时,不断消牌,直到符号区清空。 ⑤最后数字区的数值就是表达式的结果。 任务一体验手动算术表达式求值 活动1四则运算游戏 通过以上游戏可以发现,先进入数字区的数后运算,后进入数字区的数先运算;先进入符号区的运算符后计算, 后进入符号区的运算符先计算,就像两个栈一样,所以可以利用栈来实现表达式求值。 2.分析与抽象 任务一编程实现算术表达式求值 活动1设计数据结构 编写函数expressCalc(s)实现算术表达式求值。任务一的游戏主要涉及符号区、数字区及手上的牌。把符号区和数字区分别用栈opStack和numStack表示,手中的牌用字符串表示。前面已经学习了栈的相关知识,这里直接使用栈对象。 01.#计算表达式s的值 02. def expressCalc(s): #符号区 03.opStack=Stack() #数字区 94.numStack=Stack() 为了简单起见,这里假设四则表达式的数字都小于10。 任务一编程实现算术表达式求值 活动2设计算法 算法描述如下。 (1) 依次取字符串s中的各个字符,依字符做不同处理。 D如果字符是数字,把字符压入栈numStack。 如果字符是乘除号,当栈opStack的栈顶也是乘除号时,就不断消牌,然后把字符压入栈opStack。 3如果字符是加减号,就不断消牌,直到符号区清空,然后把字符压入栈opStack。 (2)当栈opStack不为空时,则消牌,直到栈空。 (3)程序结束时,栈numStack的栈顶数值就是表达式的值。 任务一编程实现算术表达式求值 活动2设计算法 根据以上算法,请补全下面的代码。 05.for c in s: #取表达式的各个字符 06.if C=="*”or C=="/”: #如果是乘号或除号 07.#如果符号区顶部是乘号或除号 08.while not opStack.isEmpty() and 09.opStack.peek()=="*“oropStack.peek()=="/" : 10.calculate(numStack, opStack) #消牌 11.opStack.push(c) #入符号区 12.elif C=="+”or C=="_": #如果是加减号 13.#如果符号区不为空,则不断消牌 任务一编程实现算术表达式求值 活动2设计算法 14.while not opStack.isEmpty(): 15.calculate(numStack, opStack) #消牌 16.opStack.push(c) #入符号区 17.else: 18. #入数字区 19.while not opStack.isEmpty(): #如果符号区不为空 20.calculate(numStack, opStack) #消牌 21.return #得到答案 numStack.push(c) numStack.peek( ) 任务一编程实现算术表达式求值 活动2设计算法 在以上代码中,方法calculate(numStack,opStack) 完成消牌操作。消牌的算法为:取出栈numStack的两个数字,取出栈opStack的一个运算符,用两个数字做运算符指明的运算,把结果压入栈numStack。请补全下面的代码。 22.#消牌 23. def calculate(nums, ops): 24.b=float(nums.pop()) #获得第1个操作数 25.a=float(nums.pop()) #获得第2个操作数 26.op=ops.pop() #获得符号区的操作符 27.if op=="+" #如果操作符是加号,做加法 28.nums.push(a+b) 任务一编程实现算术表达式求值 活动2设计算法 29.if op=="-": #如果操作符是减号,做减法 30. . 31.if op=="*" #如果操作符是乘号,做乘法 32. . 33.if op=="/": #如果操作符是除号,做除法 34.nums.push(a/b) nums.push(a-b) nums.push(a*b) 3.编程解决算术表达式求值 任务一编程实现算术表达式求值 活动2设计算法 活动2已经完成了对算术表达式求值的算法设计和代码实现,请将代码集中输入到一个程序文件中,并用以下代码进行测试: 35.answer=expressCalc("3+2*4-5" 36.print(answer) 输入的时候请注意,数字要小于10。 4.课堂小结 栈是计算机科学中的一个重要概念,利用计算机科学的相关概念解决问题离不开对栈的使用。符号匹配是栈结构的典型应用。本节课我们学习了符号匹配的基本原理和基本过程,体会了栈在符号匹配中的应用以及符号匹配的算法。 作业布置:请同学们认真完成教材中的拓展练习。 下节课见! $$

资源预览图

5.3《算术表达式求值》
1
5.3《算术表达式求值》
2
5.3《算术表达式求值》
3
5.3《算术表达式求值》
4
5.3《算术表达式求值》
5
5.3《算术表达式求值》
6
所属专辑
相关资源
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。