(
课件网) 浙教版信息技术 八年级 第9课 for循环的应用实例 新知导入 上节课我们学习了for循环机构程序设计,这节课我们通过实例进一步理解应用for机构程序结构,来解决实际问题。让我们一块学习吧! 新知讲解 在印度有一个古老的传说:国王打算奖赏发明了国际象棋的大臣。 他对国王说:“陛下,我只要一些麦粒。请您在这张棋盘的第1个小格放1粒麦子,第2个小格放2粒,第3小格放4粒,第4小格放8粒,以此类推,直到把64格棋盘放满就行了。” 国王觉得这个要求太容易满足了,就答应给他这些麦粒。 当人们把一袋一袋的麦子搬来开始计数时,国王才发现:就算把全印度甚至全世界的麦粒都拿来,也满足不了他的要求。 新知讲解 那么,这位大臣要求得到的麦粒到底是多少呢? 新知讲解 一、问题分析 该问题可以用累加的方法求解,相邻格子的麦粒数有一定规律,即后一格的麦粒数是前一格的2倍。 若用变量i表示当前所处格子的序号,变量p表示此格子中存放的麦粒数,变量s表示累加得到的麦粒数 新知讲解 那么分析过程如表所示 格子的序号(i) 当前格子存放的麦粒数(p) 累加和(s) 1 1 1 2 1 2 1+2 3 2 2 1+2+4 4 2 2 2 1+2+4+8 …… …… …… 64 2 2 2... 2 1+2+4+8… 新知讲解 二、算法设计 根据以上分析,输入数据为棋盘的格子数n,输出数据为麦粒的总粒数s。间处理数据为计数器和每个格子的麦粒数,不用输出。 新知讲解 输入:棋盘的格子数n。 该算法用自然语言描述如下: 处理:每个格子的麦粒数p。 输出:麦粒的总数s。 新知讲解 该算法用流程图表示,如图所示。 新知讲解 三、编写代码 根据设计的算法, 先输入棋盘的格子数n, 然后通过for循环语句实现累加。麦粒总数s需要在循环之前进行数值初始化为0,第1格麦粒数p数值初始化为1。 新知讲解 其程序代码如下: #n表示棋盘的格子数 n=int(input("请输入棋盘格子数:”)) P=l #第1格麦粒数p置初值1 s=0 #累加器s初始化为0 #通过for语句循环累加, 并输出麦粒总数 for i in range(1, n+1) : s=s+p p=p 2 print("棋盘格子数为:", n, ", 麦粒总数:", s) 新知讲解 循环的边界条件,也就是考虑循环的进入和退出条件。 本例中,循环是从第1个格子到第64个格子, 因为包含第64个格子本身 所以函数range() 的终值参数为n+1。 新知讲解 计数器 在算法执行过程中,用来记录某种事件发生次数的变量。 1.计数器的初值通常置为0. 2.循环体中的计数语句格式通常为i=i+1。 知识链接 新知讲解 累加器 在算法执行过程中,用来生成并存储数据累加和的变量。 1.累加器的初值通常置为0. 2.循环体中的累加语句格式通常为s=s+x。 知识链接 新知讲解 四、调试运行 按“F5”键,输入棋盘格子数,观察运行结果。 新知讲解 为了更好呈现麦粒重量和计算过程,可以将麦粒数转化为吨数(按每粒麦子约0.03克计算),并在循环过程中输出每个格子的麦粒数p。 新知讲解 其程序代码如下: #n表示棋盘的格子数 n=int(input("请输入棋盘格子数:") ) p=l #第1格麦粒数p置初值1 S=0 #累加器s初始化为O #通过for语句循环累加, 并输出每个格子麦粒数 #最后输出麦粒总重量,单位换算成吨 for i in range(1, n+1) : s=s+p p=p 2 print("当前格子序号:", i, ", 当前格子麦粒数:", int(p/2) ) s=(s 0.03)/(1000 1000) print("麦粒总重量(吨):", format(s, '.2f') ) 新知讲解 判断m是否为素数(m为正整数,由用户输入) 实践1 新知讲解 分析: (1)素数的定义:一个数是素数,则这个数的约数只有1和它本身。 (2)若一个数不是素数,则只有这个数存在除1和它本身之外的任意一个约数即可。即:若m不是素数,则除1和m外,至少还存在一个约数x,且x的取值 ... ...