曲终人尽散、物是已人非
2021-08-27 12:01
采纳率: 100%
浏览 90

C语言自编程序实现pow()函数功能时程序遇到一个问题!求解

img
我学C语言不久,刚刚在做题,题目要求是编写pow()函数相同功能的 函数,箭头所指的那行代码有问题(其功能是将 2.0^3 再乘上 2.0^0.2 ,以实现pow()函数输出一个数2.0的3.2次幂),希望看到问题的纠正一下,谢谢!
代码如下:


#include<stdio.h>

int main()
{
    double pow(double x,double y);
    double x=2.0,y=3.2;
    double result;
    result=pow(x,y);
    printf("%f",result);
}
double pow(double x,double y)
{
    double z=x,i;
    for(i=1;i<(int)y;i++)
    {z=x*z;}
    z=z*(x^(y-(int)y));
    return z;
}

  • 收藏

7条回答 默认 最新

  • Sniper-01 2021-08-27 13:58
    已采纳

    试了试题主最后发的,好像指数在0到1这个区间时,答案有点偏差
    下面是我自己写的,可供参考:

    #include<stdio.h>
    #include <math.h>
    double jc(int n)
    {
        if(n==1 || n==0)
            return 1;
        else
            return n*jc(n-1);
    }
    double powx(double a,double x) //通过指数函数的泰勒展开式求值
    {
        double sum=0,y=1;
        int i=0;
        for(i=0; i<300; i++)
        {
            y=y*x*log(a);
            sum=sum+y/jc(i+1);
        }
        if(x==0)
            return 1;
        else if(x>0)
            return sum+1;
    }
    int main(void)
    {
        double a=0,x=0;
        while(1)
        {
            printf("输入底数和指数(非负实数):");
            scanf("%lf%lf",&a,&x);
            printf("自己写的的函数结果为:%lf\n",powx(a,x));
            printf("系统提供的函数结果为:%lf\n\n",pow(a,x));
        }
        return 0;
    }
    

    img

    已采纳该答案
    1 打赏 评论
  • 吴迦诺 2021-08-27 12:05

    不能叫pow吧?改成powx试试

    2 打赏 评论
  • StjpStjp 2021-08-27 12:07
    如有帮助,请采纳;

    pow函数就是一个计算冥的
    pow(a,b); = 计算a^b

    然后你的问题就是说C语言中没有^ 这个符号(异或是数学逻辑运算式)
    所以报错

    1 打赏 评论
  • baidu_30233079 2021-08-27 12:09

    ^是按位异或,不能操作double吧

    1 打赏 评论
  • Pliosauroidea 2021-08-27 12:10

    c中的^代表按位异或
    c里面用来求幂的函数是math.h中引入的pow函数,所以也不建议你自己写函数起名叫pow
    有帮助望采纳

    1 打赏 评论
  • img

    img

    看了各位大佬的反馈,我将前面出错的语句换了一种方式来表示指数函数,结果就不在报错了,且实验结果正确,和原本的pow()函数功能吻合。之前将异或符号^当成幂指数符号来用了0.0

    
    #include<stdio.h>
    #include<math.h>
    int main()
    {
        double po(double x,double y);
        double x=100.0,y=2.001;
        double result;
        result=po(x,y);
        printf("%f",result);
    }
    double po(double x,double y)
    {
        double z=x,i;
        for(i=1;i<(int)y;i++)
        {z=x*z;}
        z=z*exp((y-(int)y)*log(x)); 
        return z;
    }
    
    
    打赏 评论
  • 急速光粒 2021-08-27 14:22

    不知道你实现这个函数的意义何在,既然调用的c的函数exp、log这么多函数,那就直接调用pow就好了!纯做练习就不多说了。

    打赏 评论

相关推荐 更多相似问题