C语言计算整数幂异常:为何输出幂次为1而非用户输入值?
C语言幂计算程序输出幂次错误的排查与修复
核心问题:循环中修改了原始输入的幂次变量
你在while循环里直接对输入的p执行p = p-1操作,导致循环结束后p的值被修改为1(比如输入p=5,循环执行4次后p就变成1了),最后输出时自然显示1,而非你输入的原始幂次。其他潜在问题
tmp被定义为int类型,但你把double类型的x赋值给它,会丢失小数部分精度,导致计算错误。resp初始化为0,当输入的幂次p=1时,循环不会执行,resp仍为0,输出结果错误。- 单独计算平方、立方的代码冗余,和循环计算幂的逻辑重复。
修复后的代码
#include <stdio.h> int main() { double x, resp; int p, loop_p; // 用loop_p作为循环控制变量,保留原始p用于输出 printf("Enter a number : "); scanf("%lg", &x); printf("Enter a power : "); scanf("%d",&p); // 初始化resp为x(对应幂次1的情况) resp = x; loop_p = p; // 当幂次大于1时执行循环计算 while (loop_p > 1){ resp *= x; loop_p--; } // 输出各幂次结果,包括用户输入的指定幂次 printf("%g ^ %d = %lg\n", x, 0, 1.0); printf("%g ^ %d = %lg\n", x, 1, x); printf("%g ^ %d = %lg\n", x, 2, x*x); printf("%g ^ %d = %lg\n", x, 3, x*x*x); printf("%g ^ %d = %lg\n", x, p, resp); return 0; }
- 修改说明
- 新增
loop_p变量,用它控制循环,原始p变量保持不变,确保最后输出的是用户输入的幂次。 - 去掉
tmp变量,直接用resp累积乘法,简化逻辑;同时修正resp初始值为x,对应幂次1的情况。 - 规避
int类型临时变量的精度损失问题,不再使用tmp。 - 去掉冗余的
carre和cube变量,直接用x*x、x*x*x计算,减少代码冗余。
- 新增
内容的提问来源于stack exchange,提问作者Karim270
相关产品推荐
相关产品推荐

