You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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;
}
  • 修改说明
    1. 新增loop_p变量,用它控制循环,原始p变量保持不变,确保最后输出的是用户输入的幂次。
    2. 去掉tmp变量,直接用resp累积乘法,简化逻辑;同时修正resp初始值为x,对应幂次1的情况。
    3. 规避int类型临时变量的精度损失问题,不再使用tmp。
    4. 去掉冗余的carre和cube变量,直接用x*x、x*x*x计算,减少代码冗余。

内容的提问来源于stack exchange,提问作者Karim270

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 22:25:30