C - 求一个数的立方根

C - Finding Cube root of a number

在我的一项作业中,我应该得到 x^2、x^4 的值和 x 的立方根,其中 x 的范围是 0 - 100。到目前为止,我已经有了这个。 (测试 5 个数字)

#include <stdio.h>
#include <math.h>

int powers(int n)
{
    return (n < 0) || (powers(n-1) && printf("%d\t%d\t%d\t\t%d\n", n, n*n, n*n*n*n, cbrt(n)));
}

int main(void)
{
    printf("number\tx^2\tx^4\t\tx^(1/3)\n");
    powers(5);

    return 0;
}

我的输出

number    x^2    x^4        x^(1/3)
0         0      0          0
1         1      1          0
2         4      16         -108170613
3         9      81         1225932534
4         16     256        -1522700739
5         25     625        -1124154156

所以,我的平方和二次方程的工作原理很简单,但我无法使用立方根。当我单独计算立方根时,它起作用了。 printf("Cube root of 125 is %f\n, cbrt(125)); 产生 Cube root of 125 is 5.0000.

我需要帮助了解为什么它在我的函数中不起作用。 C 编程的新手,所以请善待。 (编译器:Borland C++ 和 IDE:C-Free 5.0)

问题是 cbrt 接受并 return 一个 floatdouble 值,这意味着 cbrt(n) 将自动转换 nfloat/double,然后再将其传递给函数。该函数将 return 一个 float/double 但你没有将它存储在任何地方以强制转换回 int,你直接将它传递给 printf 指定 %d 因此该值被解释为 int,即使它实际上是 float/double.

一个简单的转换就足够了:(int)cbrt(n),或者您可以使用 %f%g 说明符并将其打印为真实类型。

同样存储在临时变量中会导致相同的转换行为:

int v = cbrt(n);
printf("%d\n", v);