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

C语言用循环替代pow函数计算n次方根结果异常问题求助

问题原因分析
  • degree变量没有在每次迭代时重置
    你当前的degree仅在定义时初始化为1,每次进入迭代循环计算xs的n-1次方时,没有重置为初始值1,会沿用上次循环计算的结果继续累乘,导致degree的数值完全错误,最终计算的xn偏离正确值。
  • 迭代判断前xs未初始化
    你在进入while(fabs(xn-xs)>EPS)判断时,xs还没有被赋值,是不确定的随机值,会导致循环的终止条件判断完全异常,甚至可能出现死循环或者提前退出的问题。
  • 循环边界对非整数n不兼容
    你输入的n是double类型,如果n不是正整数,for循环的i<=(n-1)判断逻辑会出错,如果你仅需要计算整数次方根,可以把n的类型改为int避免歧义,如果需要支持非整数n,需要额外实现浮点幂的计算逻辑。
修复后的代码示例
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define EPS 1e-5

int main()
{
    // 把n改为int类型适配循环逻辑
    int n;
    double xs,xn,x,degree;
    printf("Enter n>0:");
    scanf("%d",&n);
    while(n<1)
    {
        printf("Enter n>0:");
        scanf("%d",&n);
    }
    printf("Enter x:");
    scanf("%lf",&x);
    xn=(x+1)/n;
    // 提前给xs赋值避免第一次判断使用野值
    xs = xn + 2 * EPS;

    while(fabs(xn-xs)>EPS)
    {
        xs=xn;
        // 每次计算幂之前重置degree为1
        degree = 1;
        for(int i=1;i<=(n-1);i++)
        {
            degree=degree*xs;
        }
        xn=(1.0/n)*((n-1)*xs+(x/degree));
    }
    printf("%lf",xn);

    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:24:07