在设计一个能计算指数的函数power中,这个代码错在哪QAQ?
#include <stdio.h>int main()
{
double power(double x, double y);
double a, b, result;
scanf("%f %f", &a, &b);
result = power( a, b);
printf("%f的%f次方是%f\n", a, b, result);
}
double power(double x, double y)
{
doubles, t;
int i, j ;
j = y;
s = y - j;
if(s != 0)
{
t = x * s;
}
for( i=1; i<=j; i++)
{
t = t * y;
}
return t;
} 输入2 2 的时候 s = 0这时候t 等于多少呢? 孩子你定义的是double,不是int,但是你输入的却是int类型,编译器自然就不知道了啊,编译器就会把你的int当做是0了 本帖最后由 claws0n 于 2018-10-9 19:23 编辑
scanf("%lf %lf", &a, &b); //double 要配 LF
函数的声明最好还是写在主函数的外面。然后你的函数……自然幂还是用 int 或 unsigned int 安全double power(double x, int y)
{
double s = 1;
if(y == 0)
{
if(x != 0)
return 1;
else
return -1;
}
for(; y > 0; y--)
s *= x;
return s;
} A小小鸟 发表于 2018-10-9 17:04
孩子你定义的是double,不是int,但是你输入的却是int类型,编译器自然就不知道了啊,编译器就会把你的int ...
还是不行QAQ 1005204767 发表于 2018-10-9 16:45
输入2 2 的时候 s = 0这时候t 等于多少呢?
是这样子吗? 。。。。还是不行{:9_221:} claws0n 发表于 2018-10-9 19:21
scanf("%lf %lf", &a, &b); //double 要配 LF
函数的声明最好还是写在主函数的外面。然后你的函数… ...
其实%f也是可以的吧,只是精度缺少而已{:9_222:} 安静路过 发表于 2018-10-9 21:01
其实%f也是可以的吧,只是精度缺少而已
旧版的编译器或许可以,但新的不行,float 4 Byte, double 8 Byte
内部实现错了
不明白 j = y, s = y-j , 那么直接 s = 0 不就好了吗?
t = x
t = t * y == x * y 这个不是幂哦~ ,反而是 x * y! claws0n 发表于 2018-10-9 19:21
scanf("%lf %lf", &a, &b); //double 要配 LF
函数的声明最好还是写在主函数的外面。然后你的函数… ...
这代码好像不能计算类似于13.6的12.3次方{:9_221:} 安静路过 发表于 2018-10-9 21:16
这代码好像不能计算类似于13.6的12.3次方
嗯,目前只能自然幂,所以我才说用 int 或者 unsigned int
对算法有兴趣? claws0n 发表于 2018-10-9 21:12
旧版的编译器或许可以,但新的不行,float 4 Byte, double 8 Byte
内部实现错了
不明白 j = y, s = y-j ...
噢{:9_228:},那我去试试 安静路过 发表于 2018-10-9 21:19
噢,那我去试试
j = y, s = y-j 是由于y是double型(也就是说有小数点部分),而 j 是int型,s=y- j ;则是将y的小数点后面部分赋给s 安静路过 发表于 2018-10-9 21:25
j = y, s = y-j 是由于y是double型(也就是说有小数点部分),而 j 是int型,s=y- j ;则是将y的小数点后 ...
我换了%lf,结果还是一样........... claws0n 发表于 2018-10-9 21:12
旧版的编译器或许可以,但新的不行,float 4 Byte, double 8 Byte
内部实现错了
不明白 j = y, s = y-j ...
“ = t * y == x * y 这个不是幂哦~ ,反而是 x * y!”这个改过来了{:9_239:} 安静路过 发表于 2018-10-9 21:30
“ = t * y == x * y 这个不是幂哦~ ,反而是 x * y!”这个改过来了
为何不能?#include <stdio.h>
double power(double x, int y)
{
double s = 1;
if(y == 0)
{
if(x != 0)
return 1;
else
return -1;
}
for(; y > 0; y--)
s *= x;
return s;
}
int main()
{
double a, b;
scanf("%lf %lf", &a, &b);
printf("%g", power(a,b));
return 0;
} claws0n 发表于 2018-10-9 21:34
为何不能?
额..........好像得了{:7_113:} 安静路过 发表于 2018-10-9 22:08
额..........好像得了
^_^ 这个还是不能实现指数是小数的啊,你的初衷不是可以计算指数是任意的么 可以参考https://blog.csdn.net/xiaoxiongli/article/details/2134626
页:
[1]