不使用pow()计算1≤i≤10时(x+y)^(i²-i+1)求和的C代码调试
错误点梳理
- 未每次循环重置
temp变量:当前代码temp仅在for循环外初始化一次,每次计算完i对应次方后,temp会保留上一轮的计算结果,下一轮循环会在上一轮结果的基础上继续乘base,导致计算值完全偏离预期。 - 次方计算逻辑错误:要计算
base^exp,如果初始temp赋值为base,再循环exp次乘base,最终得到的是base^(exp+1),多乘了一次base。
修正方案
- 每次进入i的循环时,先将
temp重置为1 - 次方计算逻辑调整为:初始
temp=1,循环exp次乘base,即可得到正确的base^exp结果
修正后完整代码
#include <stdio.h> #include <math.h> double double_bitxy (double x, double y) { double base = x + y; double result = 0; for (int i = 1; i <= 10; i++) { int exp = i * i - i + 1; double temp = 1; while (exp != 0) { temp *= base; exp--; } result += temp; } return result; } int main() { double x, y; printf("enter x\n"); scanf("%lf", &x); printf("enter y\n"); scanf("%lf", &y); double sum = double_bitxy(x, y); printf("%.3lf", sum); return 0; }
验证说明
测试输入x=0.25、y=0.5时,base为0.75,累加计算后保留三位小数结果为1.331,和预期结果一致。
内容的提问来源于stack exchange,提问作者Lee Azoulay
相关产品推荐
相关产品推荐

