C++使用函数与循环实现求和序列输出结果不符合预期
代码错误定位与修正
核心问题点
- 循环逻辑完全偏离目标:原循环未使用循环变量计算序列项,反而固定取入参x生成计算值,且循环从0开始遍历,未覆盖序列首项
1/2的计算场景 - 累加逻辑完全错误:原循环内先将sum直接赋值为固定表达式结果,再执行
sum += sum(即当前值自翻倍),没有逐次累加序列每一项的动作 - 存在整数整除陷阱:若直接对两个整型值做除法,C++会执行整数截断,例如
1/2会被计算为0,无法得到正确的小数结果
修正后的可运行代码
#include <iostream> using namespace std; void sumSeries(int x); int main() { sumSeries(1); return 0; } void sumSeries(int x){ double sum = 0; // 按公式要求遍历每一项:分子从1到传入的参数x for(int k = 1; k <= x; k++){ // 强制将分子转为浮点类型,规避整数整除问题 double currentItem = (double)k / (k + 1); sum += currentItem; // 逐次累加当前项,不做重新赋值、自翻倍操作 } cout << sum; }
效果验证
- 传入参数1时,循环仅计算第一项
1.0/2.0,最终输出0.5,匹配预期 - 传入参数2时,累加
1/2 + 2/3,结果约为0.8333,与数学公式计算值完全一致
内容的提问来源于stack exchange,提问作者Cyrus
相关产品推荐
相关产品推荐

