在我的一项作业中,我应该获得 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("125 的立方根为 %f\n, cbrt(125));
得出125 的立方根为 5.0000
。
我需要帮助来了解为什么它在我的函数中不起作用。 C 编程新手,请多多关照。 (编译器:Borland C++ 和 IDE:C-Free 5.0)
最佳答案
问题是 cbrt
接受并返回 float
或 double
值,这意味着 cbrt(n)
code> 会在将 n
传递给函数之前自动将其转换为 float
/double
。该函数将返回一个 float
/double
但您没有将其存储在任何地方以强制转换回 int
,而是直接传递它到 printf
指定 %d
,因此该值被解释为 int
,即使它实际上是 float
/双
。
一个简单的转换就足够了:(int)cbrt(n)
,或者您可以使用%f
或%g
说明符和将其打印为真实类型。
同样存储在临时变量中也会导致相同的转换行为:
int v = cbrt(n);
printf("%d\n", v);
关于C - 求一个数的立方根,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36376704/