内容正文:
《用计算机计算圆周率_循环控制结构的用法》
【教材分析】课程选自上海科技教育出版社 《信息技术》必修1 数据与计算 “项目七 用计算机计算圆周率” 。本节课的学习是建立在前面已经掌握了算法的相关概念,以及python程序设计语言的基本知识基础上,探究理解程序控制结构中循环控制的应用方法。通过剖析计算圆周率的真实项目实施过程,帮助学生了解学科思想方法,设计简单算法,掌握计算机解决问题的逻辑和过程,借助数字化工具的学习,提高利用信息技术解决问题的能力,养成数字化学习与创新的习惯。
【学情分析】学习对象是高二年级的学生,他们已具备一定的信息技术和python基础知识,逻辑思维能力较成熟,通过设计常用的数学问题,贴近学生的平常学习生活实际,整合多学科知识,发展学生跨学科思维能力,培养学生的核心素养。
【教学目标】1.进一步理解循环结构的基本概念和原理
2.通过对用计算机计算圆周率的探究学习,掌握python编程实现循环控制算法.(核心素养指向:信息意识和计算思维)
3.提高学生的编程实践能力和创新意识(核心素养指向:数字化学习与创新)
【重点难点】重点:循环结构的理解;计算圆周率的算法设计
难点:计算圆周率的算法设计
【教学方法】以项目驱动,自主学习,合作探究
【教学准备】多媒体课件、微课、计算机机房
【教学过程】
1、 情境导入
我们知道,圆周率π是一个在物理、工程、计算机、金融、自然科学等很多领域中要用到的数学常数,它等于圆的周长与直径的比值,或者是圆的面积与半径的平方之比。古今中外,一代代数学家为探求圆周率的值贡献了自己的智慧与辛劳。
接下来视频导入,介绍割圆术。
在计算机发明之后,人们开始借助计算机来计算圆周率,并设计了很多算法。
在本项目中,我们将对用计算机计算圆周率一探究竟,利用python编程语言的循环控制结构,实现两种计算圆周率的算法,并感受不同算法的效率。
二、自主学习、复习巩固循环结构的知识
循环结构是描述需要反复多次执行同一组操作的程序设计结构,要构建一个循环结构,需要解决两个问题:一是重复要做的是什么事,二是如何控制循环。
对于重复要做什么事,可以从分析具体问题入手解决。
实现循环结构,一般是通过设置一个循环变量来进行控制。它有三个要素:①循环控制变量的初始值;②循环控制变量的终值;③满足控制条件时,需要重复执行的指令(语句)。
活动一、求50!
· 分析问题:50!=1,就是一个从1开始,重复累计相乘的问题。
则循环控制变量的初值设为1,终值设为50,重复做乘法。这个循环控制变量就相当于一个计数器的作用。
· 设计算法:
1. 1!=1 令 s=1;
2. 2!=1 s=s2;
3. 3!=1 s=s
50. 50!=1 s=s
算法的规律:s=s。就是每一次的结果,等于上一次的乘积乘以这个循环控制变量i,即从1变化到50的“计数器”。
在python语言中,用for语句来编写循环结构的格式为:开始
设置初始值,令s=1;i=1;
假如?
计算s=si
循环控制变量增加1:i=i+1
输出结果s
结束
for i in range(1,51):
s=si
range(1,51):表示产生一个从1到50的顺序序列,缺省步长为1,如果是range(51),则默认初始值从0开始。属于一个半闭半开区间。
· 画流程图:
· 编写程序:
s=1
for i in range(1,51)
s=si
print(’50!=’,s)
三、迁移探究
活动二、随机投点法计算圆周率
1.数学思维:
也叫“蒙特卡洛法”:随机在单位正方形里撒一把豆子,每一颗豆子落在正方形内任何一点的可能性都是相等的,如图,落在扇形里的豆子数与总豆子数之比近似成正比。设落在扇形内的豆子数为hits,正方形内的总豆子数为darts,则有:
≈
根据数学知识,圆周率等于圆的面积与半径平方之比:
π=,又观察图中,可知:=4,=,
所以,π= 4≈4
2.分析问题,设计算法:
确定总投点数darts,即输入一个数值给darts,同时设置扇形区域内的点数hits初值=0;
在单位正方形内开始随机投点,并判断该点是否在扇形内,如果是,则扇形区域的投点数hits增加1.
判断条件是:所投之点的x坐标与y坐标都在[0,1)范围内,即0x,y1,所以+<1.
算法描述为:循环i从1到darts:
赋予x,y均为[0,1)之间的随机数;
假如+1:
则hits增加1;
循环结束
(1) 所有点投完后,即可求出π=4
(2) 输出π的值。
3.根据算法,画出流程图
4.编写程序,调试结果
# 随机投点法计算圆周率
from random import random
darts=int(input(“请输入总的投点数:”))
hits = 0 # 落在圆内的计数器初值设为 0
for i in range(1,darts):
x, y = random(), random() # 生成两个随机数模拟一个点的坐标
if x*x+y*y<1: # 如果距离小于等于1,点在圆内
hits = hits + 1
pi = 4 * (hits /darts)
print(“圆周率的近似值为:”,pi)
5.思考问题
(1)多次运行程序,改变投点总数,记录运行结果。
(2)多次输入同一个总数,得到的结果是否相同?为什么?开始
输入总的投点数darts
赋予hits=0;i=1
当idarts?
赋予x,y的随机值
假如+1 ?
hits增加1(hits=hits+1)
计数器加1,即再投下一个点(i=i+1)
计算圆周率的近似值(pi=4)
输出圆周率的近似值(print(pi))
结束
否
是
四、迭代实践
活动三:用割圆术计算圆周率
1.数学思维:
假设半径r=OA=1,则初始内接正六边形的边长AB=r=1;
第一次分割:从圆心O作AB的中垂线OD,交AB于点C,交圆弧于点D,AD即为正12边形的边长。
按照勾股定理,AD=,而AC=,即上一次分割的边
长的一半;CD=1-OC,OC是上一次分割时相邻两顶点与圆心构成的三角形的高,利用勾股定理,可知,OC=,则可以求出分割后
新的正多边形边长。
以此类推,逐次分割圆弧,直至边长无限接近圆弧。(对应第四步,并且不断重复)
最后,正N边形的周长=边数N*边长≈圆的周长,圆周率π=圆的周长/直径≈正N边形周长/2。
2.设计算法:
(1)输入需要分割的次数
(2)设置边长的初值为1;
(3)设置边数的初值为6;
(4)循环计算每次分割后的边长,直到分割次数已经达到:
(4.1)计算分割后,正多边形相邻两点与圆点构成的三角形的高
(4.2)根据高,利用勾股定理计算新的边长
(4.3)边数翻倍。
(5)用数学公式计算出圆周率的近似值。PI=(边长*边数)/2
(6)输出圆周率的近似值。
3.根据算法的描述,画出流程图。
(流程图给学生填空)
4.根据流程图,编写程序
import math
times=int(input(“请输入需要分割的次数:”))
length = 1 # 初始边长
edges = 6 # 初始边数
for i in range(times):
height = 1 - math.sqrt(1 - (length / 2) ** 2)
length = math.sqrt(height ** 2 + (length / 2) ** 2)
edges = edges * 2 # 每割一次,边数量加倍
pi = length * edges / 2
print(‘分割成’,edges,’边形时,’,‘圆周率的近似值为:’,pi) 开始
请输入要分割的次数(times)
初始化边长(length=1)和边数(edges=6)
循环控制i<=times?
计算新的正多边形的高height=
计算新的正多边形的边长length=
边数增加一倍edges=edges2
计算出圆周率的近似值PI=
输出圆周率的近似值PI
结束
否
是
割圆法求圆周率(刘徽算到了正3072边形)
思路:刘徽断言“割之弥细,所失弥少,割之又割,以至于不可割,则与圆合体,而无所失矣”。
5.思考:
(1)程序中哪几行指令是重复执行的?
(2)多次运行程序,分别输入不同的分割次数:2,10,20,24……观察得到的圆周率近似值的精确度。
(3)比较两种算法的运行情况,填写表格,进行算法对比。
算法
结果的精确度
对算法的理解
随机投点法
□较高 □较低
□容易理解 □不易理解
割圆术
□较高 □较低
□容易理解 □不易理解
五、拓展外延
(1) 除for语句外,如何用其他循环控制语句改写程序?
(2) 还有哪些计算圆周率的方法?如何设计算法?
(3) 如何实现割圆术和随机投点法中的可视化效果?
(4) 输出程序运行时间(Time()函数的用法),比较不同算法的效率。
六、课堂小结和评价
评价内容
达成情况
对算法的理解
for语句用法的理解和应用
循环结构的算法构建
能自主使用python编写简单程序
学科网(北京)股份有限公司
$$