为何我的求自然数d次幂和的C语言代码结果不正确?
代码错误分析与修正
你的代码运行结果不正确的核心原因有两个:
- 累加变量被重复重置:在
sum函数的循环内部,每次迭代都执行sum=0;,这会把之前的累加结果全部清空,导致最终只计算了最后一个自然数的d次幂,而非前n个数的幂次总和。比如测试用例n=3、d=2时,循环到i=3时sum被重置为0,加上9后返回9,但正确结果应该是1+4+9=14。 - 变量未初始化:
float sum;没有显式初始化为0,虽然后续循环里的重置会覆盖这个问题,但这是不规范的写法,可能导致未定义行为。
修正后的代码
#include<stdio.h> #include<math.h> float sum(int n ,int d); int main(){ int n=3,d=2; printf("sum=%f\n",sum(3,2)); return 0; } float sum(int n ,int d){ float sum = 0; // 初始化累加变量为0 for(int i=1;i<=n;i++){ sum += pow(i, d); // 直接累加,不再重置sum } return sum; }
额外说明
pow函数返回的是double类型,赋值给float可能存在精度损失。如果需要更高计算精度,可以将sum的类型改为double,同时printf的格式符改为%lf。
内容的提问来源于stack exchange,提问作者Praveeniitkgp
相关产品推荐
相关产品推荐

