看完了程序思路以后,我们来具体看一下其中的代码,就拿 sum3 的计算过程来举例,其实使用的就是“等差数列求和公式”,如果你忘了等差数列求和公式,请看下图:
我们再来回顾一下程序,在编写这个程序的过程中,其中有哪些数字是我们计算得到的么?你会发现没有一个是我们直接计算得到的,哪怕是5 的倍数995这个数字,也是我们通过一段代码算得到的。
而对于这段代码呢,咱们可以详细解释一下,首先用 1000 以内最后一个数字 999 除以 5,会得到在1000 以内 5 的倍数有多少个。为什么会得到这个结果呢?这个就要说说 C 语言中的整型间的除法问题了。
在 C 语言中,两个整型数字相除,结果会做**向零取整**,什么是 向零取整呢?解释这个概念之前,先要介绍一下**向下取整**的概念,所谓向下取整,就是取小于等于当前数字的第一个整数。
例如,4.9 向下取整,就是 4,因为小于等于 4.9 的第一个整数就是 4。那么 -1.5 向下取整等于多少呢?这里需要注意,结果是 -2,不是 -1,因为小于等于 -1.5 的第一个整数是 -2,而 -1 比 -1.5 要大。
当你明白了什么是向下取整以后,就很好理解向零取整了,那就是取当前数字和 0 之间,与前数字距离最近的整数。对于正数来说,向零取整的结果和向下取整的结果相同,而对于负数来说结果恰好相反。
咱们还是拿 -1.5 举例,向下取整是 -2,可是向零取整就不同了,向零取整是在当前数字与 0 之间,取一个距离当前数字最近的整数,取到的就是 -1。
理解了 C 语言中的整数除法规则以后,我们再回到题目中看一下,题目中用 999 / 5 得到的就是 1000 以内有多少个 5 的倍数的数字,然后再用这个数字乘以 5 就得到了 1000 以内,最后一个 5 的倍数的数字。
这时候你可能又问了,为什么要这么麻烦呢?何不直接写一个 995 呢?你算得没错,995 确实是 1000 以内最后一个 5 的倍数。可你别忘了,今天我想教给你的是“把计算过程,交给计算机”,也就意味着计算5的倍数,可能还轻松一点儿,那要是计算 7 的倍数呢?13 的倍数呢?9973 的倍数呢?你会发现,还是计算机比你更适合做具体的计算。所以记住:将计算过程,留给计算机。
## 一起动手,搞事情
在做今天的思考题之前,我们先来弄清楚两个说法,“平方和”以及“和的平方”。
例如,10 以内自然数的平方和就是:
1^2 + 2^2 + 3^2 + 4^2 + 5^2 + 6^2 + 7^2 + 8^2 + 9^2 + 10^2 = **385**
也就是 1 到 10 每个数字的平方相加之和。
而,10 以内自然数的和的平方就是:
(1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10) ^ 2 = **3025**
也就是 1 到10 所有数字相加之和,然后再取平方的值。
#### 思考题:和的平方减平方和
今天我们的思考题呢,分成两个子问题:
> 
1.请编写一个程序,计算 100 以内自然数“和的平方”与“平方和”的差。
2.通过今天的学习,我们复习了等差数列求和公式,那你能否通过查阅资料,推导得到等差数列的平方和公式呢?