安静路过 发表于 2018-10-9 16:29:49

在设计一个能计算指数的函数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;
}

1005204767 发表于 2018-10-9 16:45:30

输入2 2 的时候 s = 0这时候t 等于多少呢?

A小小鸟 发表于 2018-10-9 17:04:28

孩子你定义的是double,不是int,但是你输入的却是int类型,编译器自然就不知道了啊,编译器就会把你的int当做是0了

claws0n 发表于 2018-10-9 19:21:14

本帖最后由 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;
}

安静路过 发表于 2018-10-9 20:54:58

A小小鸟 发表于 2018-10-9 17:04
孩子你定义的是double,不是int,但是你输入的却是int类型,编译器自然就不知道了啊,编译器就会把你的int ...

还是不行QAQ

安静路过 发表于 2018-10-9 20:59:18

1005204767 发表于 2018-10-9 16:45
输入2 2 的时候 s = 0这时候t 等于多少呢?

是这样子吗?    。。。。还是不行{:9_221:}

安静路过 发表于 2018-10-9 21:01:04

claws0n 发表于 2018-10-9 19:21
scanf("%lf %lf", &a, &b);   //double 要配 LF

函数的声明最好还是写在主函数的外面。然后你的函数… ...

其实%f也是可以的吧,只是精度缺少而已{:9_222:}

claws0n 发表于 2018-10-9 21:12:58

安静路过 发表于 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!

安静路过 发表于 2018-10-9 21:16:50

claws0n 发表于 2018-10-9 19:21
scanf("%lf %lf", &a, &b);   //double 要配 LF

函数的声明最好还是写在主函数的外面。然后你的函数… ...

这代码好像不能计算类似于13.6的12.3次方{:9_221:}

claws0n 发表于 2018-10-9 21:18:15

安静路过 发表于 2018-10-9 21:16
这代码好像不能计算类似于13.6的12.3次方

嗯,目前只能自然幂,所以我才说用 int 或者 unsigned int
对算法有兴趣?

安静路过 发表于 2018-10-9 21:19:52

claws0n 发表于 2018-10-9 21:12
旧版的编译器或许可以,但新的不行,float 4 Byte, double 8 Byte
内部实现错了
不明白 j = y, s = y-j ...

噢{:9_228:},那我去试试

安静路过 发表于 2018-10-9 21:25:20

安静路过 发表于 2018-10-9 21:19
噢,那我去试试

j = y, s = y-j 是由于y是double型(也就是说有小数点部分),而 j 是int型,s=y- j ;则是将y的小数点后面部分赋给s

安静路过 发表于 2018-10-9 21:26:56

安静路过 发表于 2018-10-9 21:25
j = y, s = y-j 是由于y是double型(也就是说有小数点部分),而 j 是int型,s=y- j ;则是将y的小数点后 ...

我换了%lf,结果还是一样...........

安静路过 发表于 2018-10-9 21:30:55

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:}

claws0n 发表于 2018-10-9 21:34:37

安静路过 发表于 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;
}

安静路过 发表于 2018-10-9 22:08:54

claws0n 发表于 2018-10-9 21:34
为何不能?

额..........好像得了{:7_113:}

claws0n 发表于 2018-10-9 22:13:01

安静路过 发表于 2018-10-9 22:08
额..........好像得了

^_^

1005204767 发表于 2018-10-9 23:13:00

这个还是不能实现指数是小数的啊,你的初衷不是可以计算指数是任意的么

1005204767 发表于 2018-10-9 23:13:32

可以参考https://blog.csdn.net/xiaoxiongli/article/details/2134626
页: [1]
查看完整版本: 在设计一个能计算指数的函数power中,这个代码错在哪QAQ?