在我的一个任务中,我应该得到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
所以,我的square和quatric工作起来很简单,但我无法使用cube root。当我分别做立方根时它起作用。
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 )
答案 0 :(得分:2)
问题是cbrt
接受并返回float
或double
值,这意味着cbrt(n)
会自动将n
转换为float
在将它传递给函数之前/ double
。该函数将返回float
/ double
,但您不会将其存储在任何位置以强制转换回int
,而是直接将其传递给printf
指定{{} 1}}所以该值被解释为%d
,即使它实际上是int
/ float
。
简单的演员就足够了:double
,或者您可以使用(int)cbrt(n)
或%f
说明符并将其打印为真实类型。
同样存储在临时变量中会导致相同的转换行为:
%g