ads3579 2021-04-28 00:48 采纳率: 69.2%
浏览 35

<C语言> 如何用取中间值的方法算出立方根?大佬们帮帮忙

这是原题:(是翻译过来的题目可能有些偏差)

编写一个程序,计算带小数位的数字的立方根。按着这些次序:

•用户应输入一个数字(它可以包含小数位,但不能为负数)。

•开始缩小根的范围:第一个下限是1,上限是输入的数字本身,多维数据集的根必须介于两者之间。 o如果输入的数字小于1,则为下限,而1为上限。

•第一次尝试将上限和下限恰好在中间。

•如果该中心太大(因为中心³大于输入的数字),则将其用作新的上限。如果太小,请将其用作新的下限。 重复此过程,直到找到的中心足够准确为止,即,直到下限和上限之间的距离最大为0.001。然后输出找到的中心。

•通过最终输出使用pow()函数计算出的立方根来测试您的程序。

 

PS:这是我用牛顿迭代法写的,不确定符合不符合要求

double result(double a,double x0)
{
    double x1,y;
    x1=(2*x0+a/(x0*x0))/3.0;
    if(fabs(x1-x0)>=0.001)
        y=result(a,x1);
    else
        y=x1;
    return y;
}

int main()
{
    double x;
    printf("Enter x: ");
    scanf("%lf",&x);
    while (x<0)
    {
        printf("ERROR!");
        return;
    }
    printf("The result of %lf is %lf \n",x, result(x,1.0));
    printf("The checking result is %lf\n", pow(x,0.3333333));

    return 0;
}

 

  • 写回答

1条回答 默认 最新

  • 泡沫o0 2023年度博客之星上海赛道TOP 1 2023-06-11 14:13
    关注

    你的牛顿迭代法的解决方案是非常有效的,但题目中要求使用的方法是二分查找(也就是取中间值的方法)。以下是用二分查找来实现这个题目的一个可能的C语言解决方案:

    #include <stdio.h>
    #include <math.h>
    
    double cubeRoot(double num) {
        double low, high, mid;
        
        if(num < 1) {
            low = num;
            high = 1;
        } else {
            low = 1;
            high = num;
        }
        
        while(high - low > 0.001) {
            mid = (high + low) / 2;
            if(mid*mid*mid > num) {
                high = mid;
            } else {
                low = mid;
            }
        }
    
        return (high + low) / 2;
    }
    
    int main() {
        double num;
    
        printf("Enter a number: ");
        scanf("%lf", &num);
        if(num < 0) {
            printf("ERROR! Number must be non-negative.\n");
            return -1;
        }
    
        double root = cubeRoot(num);
        printf("The cube root of %.2f is approximately %.2f\n", num, root);
        printf("Checking with pow(): %.2f\n", pow(num, 1.0/3.0));
    
        return 0;
    }
    

    这个程序首先检查输入的数字是否小于1,然后设置了适当的起始上限和下限。然后它进入一个循环,不断地将上限和下限的中间值与原始数字的立方进行比较,根据比较的结果来调整上限和下限。这个过程会一直持续,直到上限和下限之间的差小于0.001。这个时候,它就找到了一个相当精确的立方根的近似值,然后输出这个值。

    评论

报告相同问题?

悬赏问题

  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler