Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

整数加减法

1.1 整数加减法

引入

远古人类没有数字,只会结绳计数:数一样东西,就在绳子上打一个结。要知道两堆东西一共多少,最笨也最可靠的办法是——把两根绳子接起来,从头数一遍。

现在假设你比结绳先进一点点,但也只会一件事:从一个数,数到它后面紧挨着的那个数(1 后面是 2,2 后面是 3……)。仅凭这一个本事,你能不能算出 a+ba+b

能。a+ba+b 就是从 aa 开始,往后接着数 bb 个数。 数到哪里,哪里就是答案。这是历史上最古老的加法,也不需要背任何加法表。

加法

探索

拖一拖,观察:

解释

两个数字的加法,最简单的理解就是数一下图中两条长条拼在一起一共有多少格:先数完 aa 条,不用停,接着往下数 bb 个格子,数到的最后一个数,就是 a+ba+b

这和探索环节滑杆上看到的完全一致:加法不是一个要背的规则,而是"接着数"这个动作本身

代码例题

代码解释for 循环跑了 b 次,每次都让 c 变成"它后面紧挨着的那个数"(c = c + 1)。跑完 b 次,c 正好是从 a 往后数了 b 步的结果——这正是引入里"从 a 接着数 b 个"的字面翻译,一步没多,一步没少。

减法

探索

拖一拖,观察:

解释

减法其实是加法反着做:加法是"数到后面紧挨着的那个数",减法就是数到前面紧挨着的那个数——退一格。已知 c=a+bc = a + b(加完之后的结果)和 bb(加了多少个),从 cc 往回退 bb 格,退到哪里,哪里就是 aa

代码习题

提示:加法每一步是 c = c + 1(数后面一个);减法反过来,每一步应该是数前面一个。这里 a 记录当前数到的位置,把这一行补完,跑一跑,看 a 最后是不是变成了 3。

代码解释a = c 先让 a 站在 c 所在的位置;这时的 a 还不是答案,只是一个正在往回走的数。循环每运行一次,a 就“退一格”;重复 bb 次后,a 才走到真正的答案。这和加法用的是同一个技巧,只是方向反了过来。

数学小故事

100 多年前,意大利数学家皮亚诺(Giuseppe Peano)想把"自然数到底是什么"讲得清清楚楚,清楚到没有人能挑出一点毛病。他给自然数定的规则里,有一条是:每一个数,都有唯一一个"紧挨在它后面"的数

这条规则不需要证明——数学家把这种"作为出发点、不用再解释为什么"的规则叫公理。皮亚诺就用这一条公理,把加法重新定义成:把"数下一个"这个动作,重复做 bb

这正是你在代码里写的 c = c + 1。你写的这个循环,和皮亚诺一百多年前用来打地基的想法,是同一件事。

练习题

  1. 沿着"接着数"的思路判断对错:

两堆东西一共有多少,先数哪一堆、再数哪一堆,总数都一样。

  1. 再判断一句:

三堆东西,不管先合并哪两堆,最后的总数都一样。

  1. "减法就是倒着做的加法。"结合本课的两段代码,用你自己的话解释这句话对不对,为什么。