使用 for 循环 (最常用)
这是最直观、最常用的方法,我们使用一个循环变量 i 从1遍历到100,并在每次循环中将 i 的值累加到一个变量(sum)中。
完整代码
#include <stdio.h>
int main() {
int sum = 0; // 1. 定义一个变量 sum 用来存储总和,并初始化为0
int i; // 2. 定义一个循环变量 i
// 3. 使用 for 循环,从 i = 1 开始,到 i <= 100 结束,每次 i 自增1
for (i = 1; i <= 100; i++) {
sum = sum + i; // 4. 在循环体内,将当前的 i 值加到 sum 上
}
// 5. 循环结束后,sum 中就存储了1到100的总和
printf("1到100的和是: %d\n", sum);
return 0; // 程序正常结束
}
代码分步解析
#include <stdio.h>: 引入标准输入输出库,这样我们才能使用printf函数来打印结果。int sum = 0;: 声明一个整型变量sum,并初始化为0。这一点非常重要,因为我们要用它来累加,如果不清零,结果将不可预测。for (i = 1; i <= 100; i++): 这是一个for循环。i = 1: 循环开始前,将i初始化为1。i <= 100: 每次循环前判断的条件。i小于或等于100,就继续循环;否则,循环结束。i++: 每次循环结束后,将i的值加1。
sum = sum + i;: 这是循环的核心,第一次循环时,sum是0,i是1,sum变成0 + 1 = 1,第二次循环,sum是1,i是2,sum变成1 + 2 = 3...以此类推,直到i变成100,sum加上100后,循环结束。printf("1到100的和是: %d\n", sum);: 循环结束后,sum的值就是最终结果(5050)。printf函数将这个结果打印到屏幕上。%d是一个格式化占位符,表示要在这里打印一个整数。return 0;: 表示main函数执行成功并返回。
使用数学公式 (更高效)
对于求1到n的自然数之和,有一个著名的数学公式:高斯求和公式。
*公式:和 = n (n + 1) / 2**
这个公式比循环快得多,因为它不需要进行100次加法运算,只需要一次乘法、一次加法和一次除法。
完整代码
#include <stdio.h>
int main() {
int n = 100; // 定义上限 n
int sum; // 定义变量 sum 来存储结果
// 使用高斯公式计算和
sum = n * (n + 1) / 2;
printf("1到100的和是: %d\n", sum);
return 0;
}
代码解析
int n = 100;: 我们定义一个变量n来表示求和的上限。sum = n * (n + 1) / 2;: 直接套用公式,代入n = 100,计算过程为100 * (100 + 1) / 2 = 100 * 101 / 2 = 10100 / 2 = 5050。printf: 打印结果。
两种方法的比较
| 特性 | 方法一 (for循环) | 方法二 (数学公式) |
|---|---|---|
| 可读性 | 非常直观,逻辑清晰,容易理解。 | 需要知道公式,但代码本身很简单。 |
| 效率 | 较低,需要进行 n 次加法运算,当 n 很大时(例如1亿),速度会很慢。 |
极高,无论 n 多大,都只需要固定的几次算术运算。 |
| 通用性 | 非常通用,可以解决各种复杂的累加问题,比如只求奇数的和、求某个范围内满足特定条件的数的和等。 | 局限性大,只适用于这种特定规律的等差数列求和。 |
| 推荐场景 | - 学习编程基础,理解循环的概念。 - 解决无法用简单公式描述的累加问题。 |
- 当问题明确符合等差数列求和规律时。 - 对性能有极高要求的场景。 |
- 对于初学者,强烈推荐使用 方法一 (
for循环),因为它能帮助你更好地理解程序是如何一步步执行的。 - 在实际开发中,如果问题可以用数学公式解决(如本例),方法二 (数学公式) 是更优的选择,因为它更高效、更简洁。
两种方法都能正确计算出1到100的和为 5050。
