markdown复制## 1. 实验目标与需求解析
这次C++实验涵盖了六个基础但极具代表性的数学计算问题,主要考察循环结构、递归算法和基础数学运算的实现能力。作为计算机专业学生首次接触的综合性实验,它巧妙地将数学概念与编程思维结合,能有效训练以下核心能力:
1. **阶乘求和**:理解循环嵌套与累积运算
2. **等比数列**:掌握递推公式的代码转化
3. **斐波那契数列**:体验递归与迭代的效率差异
4. **最大公约数**:实践欧几里得算法的精妙
5. **最小公倍数**:学习利用已有算法构建新解法
6. **平均数计算**:处理动态输入与数据类型转换
> 提示:实验虽基础,但每个问题都暗含陷阱。比如阶乘的快速增长会导致整型溢出,递归实现的斐波那契有严重的性能问题,这些正是老师希望我们通过实践理解的编程要点。
## 2. 核心算法实现与代码解析
### 2.1 阶乘求和(1!到n!的和)
阶乘计算是理解循环结构的经典案例。我们采用双层循环实现:外层控制求和范围,内层计算单个阶乘。
```cpp
long long factorialSum(int n) {
long long total = 0;
for (int i = 1; i <= n; ++i) {
long long fact = 1;
for (int j = 1; j <= i; ++j) {
fact *= j;
}
total += fact;
}
return total;
}
关键点:
- 使用
long long类型防止溢出(20!就会超出int范围) - 内层循环每次从1重新计算,避免复杂的状态维护
- 时间复杂度O(n²),适合教学演示但实际应用应优化
2.2 等比数列求和
等比数列求和公式为S = a₁(1-qⁿ)/(1-q),当q≠1时。代码需要处理q=1的特殊情况:
cpp复制double geometricSeries(double a1, double q, int n) {
if (q == 1.0) return a1 * n;
return a1 * (1 - pow(q,
