内容正文:
每个人都应该学习编程,
因为它教会你思考的方式。
——乔布斯
让我们的思维跳跃起来!
Month Report.
PowerPoint Business Template
for循环的执行流程图
for <变量> in <序列>:
<循环体>
[else:
<语句块>]
for循环语句一般格式
回顾for循环
字符串
列表
range对象
for 循环语句是通过遍历某一序列对象来构建循环,循环结束的条件就是对象遍历完成,因此for循环也称为遍历循环。
第9课 for循环的应用实例
国际象棋棋盘上麦粒问题
在印度有一个古老的传说:国王打算奖赏发明了国际象棋的大臣。国王问他想要什么,他对国王说:“陛下,我只要一些麦粒。请您在这张棋盘的第1个小格放1粒麦子,第2个小格放2粒,第3小格放4粒,第4小格放8粒,以此类推,直到把64格棋盘放满就行了。”国王觉得这个要求太容易满足了,就答应给他这些麦粒。当人们把一袋一袋的麦子搬来开始计数时,国王才发现:就算把全印度甚至全世界的麦粒都拿来,也满足不了他的要求。那么,这位大臣要求得到的麦粒到底是多少呢?
问题分析
设计算法
编写代码
调试运行
程序设计基本步骤
5
问题分析
该问题其实是一个累加的过程,相邻格子的麦粒数存在一个2倍的规律,如果我们用变量i来表示当前所处格子的序号,变量p表示此格子中存放的麦粒数,变量s表示累加得到的麦粒数,那么请同学们完成下列表格的填写。
格子的序号( i ) 当前格子存放的麦粒数(p) 当前格子存放的麦粒数规律 累加和(s)
1 1 1 1
2 2 1*2 1+2
3 4
4 8
…
64 ?
说一说你总结出的规律?
2*2 1+2+4
2*2*2 1+2+4+8
… …
2*2*2…*2 1+2+4+8…
知识链接
累加器 在算法执行过程中,用来生成并存储数据累加和的变量。1. 累加器的初值通常置为0。
2. 循环体中的累加语句格式通常为 s=s+x 。
注意:在for循环中,变量在每一次循环之后会自动变化,不需要在循环体中出现变量变化语句;如果我们要统计循环次数,可以使用另外一个变量:计数器。
格子的序号( i ) 当前格子存放的麦粒数(p) 当前格子存放的麦粒数规律 累加和(s)
1 1 1 1
2 2 1*2 1+2
3 4 2*2 1+2+4
4 8 2*2*2 1+2+4+8
… … …
64 ? 2*2*2…*2 1+2+4+8…
问题分析
这里的累加语句该怎样编写?
p是常量还是变量?
p的累乘又该如何编写?
p的初值置为几?
根据s的初值,要累加多少次?
知识链接
计数器 在算法执行过程中,用来记录某种事件发生次数的变量。1. 计数器的初值通常置为0,可以根据需要灵活设置。
2. 循环体中的计数语句格式通常为 i=i+1 。
前面我们用变量 i 表示当前格子序号,它是递增的。现在,我们又要用它来作为计数器,那么初值设为多少比较合适呢?
现在,我们回顾一下,循环体包含哪些语句?几个变量要赋初值?一共要循环多少次?
问题分析
为使程序具有普遍通用性,我们将棋盘格子总数采用从键盘输入,赋值给变量n。
若棋盘格子数为n呢?
思考:从输入、处理、输出三个层面考虑,流程图该怎么画?
range()函数能创建一个整数列表,可以用for循环和range()函数来实现自动计数,那么这个流程图可以如何改进?
9
算法流程图
设计算法
想一想:range()函数的参数
该如何设置?
编写代码
根据设计的算法,先输入棋盘的格子数n,然后通过for循环语句实现累加。麦粒总数s需要在循环之前进行数值初始化为0,第1格麦粒数p数值初始化为1,其程序代码如下:
变量通过赋值语句先定义后使用
尝试更换两者的顺序,会对结果造成影响吗?
一头成年非洲象的体重最大可达八吨……
编写代码
同学们知道这个麦粒总数是一个怎样的概念吗?为了帮助我们更好地理解,我们可以将麦粒总数转化为吨数(按每粒麦子约0.03克计算),赋值给变量m并输出。
修改完善:试着在结尾处添加合适的语句并输出相应结果。
想要具体地看到循环过程中每个格子的麦粒数p,又该如何添加语句。添加在什么地方?
按“F5”键,输入棋盘格子数,