在我的一项作业中,我应该得到 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)
会在将 n
传递给函数之前自动将其转换为 float
/double
。该函数将返回一个 float
/double
但您没有将其存储在任何地方以强制转换回 int
,而是直接传递它到 printf
指定 %d
因此该值被解释为 int
,即使它实际上是 float
/双
。
一个简单的转换就足够了:(int)cbrt(n)
,或者您可以使用 %f
或 %g
说明符和将其打印为真实类型。
同样存储在临时变量中会导致相同的转换行为:
int v = cbrt(n);
printf("%d\n", v);
我是一名优秀的程序员,十分优秀!