(
课件网) 3.3.1 解析算法 0.用算法解决问题的过程 抽象与建模 找到核心要素 得出计算模型 设计算法 明确输入输出 描述数据处理 编写程序 用计算机程序语言描述,形成计算机程序 调试运行程序 关注语法错误 逻辑错误等 1.基本思想 【解析算法】 是指根据问题的前提条件与所求结果之间的关系,找出求解问题的数学表达式,并通过表达式的计算来实现问题的求解。 解题思路: 明确问题的前提条件 明确要求的解 找出前提条件与所求解之间关系的数学表达式 1.基本思想 【解题关键】 要确保数学表达式的正确性 在程序中正确描述该数学表达式。(python运算符的正确使用) 2. 实例分析 Q1:一个小球从高处自由落体落下,经过5秒后到达地面,已知重力加速度g为10m/s,请问小球从距离地面多高的地方落下? 1.抽象与建模 找到核心要素(问题的前提条件和要求的解) 得出计算模型 前提条件: 自由落体运动 时间为5秒,设为t 重力加速度g为10m/s,设为g 要求的解: 小球下落的高度,假设为h 根据自由落体运动: h=1/2gt2 2. 实例分析 Q1:一个小球从高处自由落体落下,经过5秒后到达地面,已知重力加速度g为10m/s,请问小球从距离地面多高的地方落下? 2.设计算法 输入数据 处理数据 输出数据 无 h=1/2gt2 输出h 输入本金p 输入期数t 输出h t=5 g=10 h=1/2gt2 2. 实例分析 Q1:一个小球从高处自由落体落下,经过5秒后到达地面,已知重力加速度g为10m/s,请问小球从距离地面多高的地方落下? 3.编写程序 t=5 g=10 h=g*t**2/2 print(h) 输入本金p 输入期数t 输出h t=5 g=10 h=1/2gt2 2. 实例分析 Q2:判断一个数是否是3和7的公倍数,请用程序实现上述功能。 1.抽象与建模 找到核心要素 得出计算模型 假设要判断的数为 x 判断条件:3和7的公倍数 3和7的公倍数 x%3==0 and x%7==0 x是公倍数或x不是公倍数 2.设计算法 输入数据 处理数据 输出数据 输入x x%3==0 and x%7==0 输出x是公倍数或x不是公倍数 3.编写程序 x=int(input(“请输入一个数”)) if x%3==0 and x%7==0: print(‘x是公倍数’) else: print(‘x不是公倍数’) 3. 课堂实战 1.人口增长问题 2.设备价值问题 3.蔡勒公式 4.十进制转二进制 5.二进制转十进制 6.二进制转十六进制 7.十六进制转二进制 3. 课堂实战 二进制转十进制 n="011101" res=0 for i in range(len(n)): res=res*2+int(n[i]) 十进制转二进制 n=int(input()) res="" while n>0: res=str(n%2)+res n=n//2 print(res) 3. 课堂实战 十六进制转十进制 n="A3" dic={'0':0,'1':1,'3':3,'A':10} res=0 for i in n: res=res*16+dic[i] print(res) 十进制转十六进制 n=int(input()) res="" g="0123456789ABCDEF" while n>0: res=g[n%16]+res n=n//16 print(res) 3.3.2 枚举算法 13 1.基本思想 【枚举算法】 1.建立正确的数学模型,即得出正确的数学代数式 2.将数学代数式转化为正确的python表达式 13 我手里有三把一模一样的钥匙,分别可以开教室、办公室、寝室的门。当我晚上回到寝室,该如何找到能开寝室门的钥匙呢? 每把都试一遍 14 一一列举 逐一检验 分支 循环 枚举 筛选 1.基本思想 15 不能遗漏任何一个正确解 尽可能地缩小解的列举范围,提高算法的效率 1.基本思想 【枚举算法要注意的问题】 4. 课堂实战 【Q0:例举出300以内被7整除的所有的数,如何编程实现?】 列举的范围是什么? 检验的条件是什么? 列举方式是什么? n=0,1,2,···,300 被7整除的数:n%7==0 for循环 如何编程实现 for i in range(301): if i%7==0: print(i) 4. 课堂实战 【Q1:编程推算单据中被涂抹数字】 有一张单据上有一个5位数的编号n,如图所示,其千位数和十位数处已经变得模糊不 ... ...