棋盘上的麦粒 循环结构——FOR循环
传说: 在印度有一个古老的传说:
舍罕王打算奖赏国际象棋的发明人—— 宰相 西萨·班·达依尔
你想要什么 奖赏呢?
陛下,请您在这张棋盘的 第1个小格里赏给我1粒麦子,
在第2个小格里给2粒, 3小格给4粒, 每一小格都比前一小格加一倍。
请您把这样摆满棋盘上64格的麦粒, 都赏给您的仆人吧!
这个简单! 快搬麦子过来!
陛下。。。 我数不清了
国王才发现:就是把全印度甚至全世界的麦粒全拿来, 也满足不了宰相的要求。
聪明的你可知道宰相要求得到的麦粒到底有多少呢?
我们一起来算一算 2的0次方 2的63次方 2的7次方 2的56次方
棋盘格子 麦粒数量 第1格 1 第2格 4 第3格 8 第4格 16 第5格 32 第6格 64 第7格 128 ..... ...... 第64格 ???
首先:2的0至63次方? 然后: 1+2+4+8+16+32+64+128+...+?=???
你选择用计算器吗?
20=1 25=32 210=1024 21=2 26=64 211=2048 22=4 27=128 212=4096 23=8 28=256 213=8192 ...... 24=16 29=512
循环 结构 20=1 22=4 21=2 23=8 24=16 25=32 27=128 26=64 28=256 29=512 210=1024 212=4096 211=2048 213=8192 ...... 214=16384 215=32768 216=65536 217=131072 218=262144 219=524288 220=1048576 221=2097152 222=4194304 223=8388608 224=16777216 225=33554432 226=61708864 227=134217728 228=536870912 229=1073741824 230=2147483648
一起来学习使用循环结构解决问题*∩_∩*
循环示意图 起始入点 是对同一段代码重复执行若干次 . 循环结构 循环语句 添加标题 结束出口
For循环 循环 语句 Do循环 While循环
For = Next 循环变量 循环体 For循环格式 循环变量 初值 to 终值 [Step 步长值 ] 控制循环的次数 有规律的变化达到终值 For 循环体 Next 循环变量 循环变量 = 初值 to 终值 [Step 步长值 ] 循环开始结束的条件
计算S=1+1+1+…+1 (100个1相加) for i = 1 to 100 1(可省略) S = S + 1 next i
FOR 循环变量 初值 判断循环变量是否超出终值 Yes No 执行循环体 循环变量 循环变量+步长 Next
【例】计算100以内自然数之和 初值: 0—>S 第一次: S+1—>S 第二次: S+2—>S 第 i 次: S+i—>S 第100次: S+100—>S
Dim s As Integer = 0 // S存储数字的和 程序代码 Dim s As Integer = 0 // S存储数字的和 for i = to 100 1(可省略) S + = S i next i
首先:定义Double变量S用来保存 到当前格所有麦粒的总数。 并赋予变量 S 的初值为 1 . (第一格给的麦粒数为1)
棋盘格子 麦粒总数 前1格 S 前2格 S = S + 21 前3格 S = S + 22 前4格 S = S + 23 前5格 S = S + 24 前6格 S = S + 25 前7格 S = S + 26 ..... ...... 前64格 S = S + 263 第二格开始
S = S + 2(i-1) 棋盘格子 麦粒总数 前1格 S 前2格 S = S + 21 前3格 S = S + 22 前4格 前5格 S = S + 24 前6格 S = S + 25 前7格 S = S + 26 ..... ...... 前64格 S = S + 263 观察可以发现,第 i 格中 2 的次方数是 i-1 第二格开始 因此左侧所有的语句都可以统一表示为: S = S + 2(i-1)
Dim s As Double = 1 // S存储麦粒总数 程序代码 Dim s As Double = 1 // S存储麦粒总数 for i = 2 to 64 1(可省略) S + = S 2(i-1) next i
【课后思考题】 1:s=10+15+20+25+……200 2:p=1*2*3*……*100 3:s=1+1/2+1/3+1/4+……+1/100 4:s=1-1/2+1/3-1/4+……-1/100
谢谢大家 选手:伍贤龙