C语言——用多项式来近似表示正弦函数sinx

在数学上对一些复杂的函数,常用多项式来近似表示函数。例如正弦函数sinx是用如下多项式来近似表达的:

\sin x=x-\frac{x^3}{3!}+\frac{x^5}{5!}-\cdots+(-1)^n\frac{x^{2n-1}}{(2n-1)!}+\cdots

在实际计算时当多项式尾项(−1)n−1(2n−1)!x2n−1​的绝对值小于一个预定值ε(例如10−5或10−6)时可认为达到了计算精度要求,结束计算。请根据题目描述编写函数计算在x∈[0,π]处的正弦值。

编程要求:

编写两个函数,一个是求sinx的函数MySin(x),另一个是求n!的函数fact(n)。在函数sin(x)中调用fact(n)函数。其中公式中的xn可用库函数pow(x,n)来实现。

输入说明:

在一行内输入两个数,两数之间用空格间隔,其中第一个数是自变量的值,第二者数是计算精度要求值。

输出说明:

输出一个值,输出保留17位小数。

输入样例:

在这里给出一组输入。例如:

1.1  0.00001

输出样例:

在这里给出相应的输出。例如:

0.891200933115079

代码如下: 

#include "stdio.h"
#include <math.h>
double fact ( int n )
{
    int i;
    double a=1;
    for(i=1;i<=n;i++)
    {
        a*=i;
    }
    return a;
}

double MySin(double x,double epsilon)
{
    double PI=3.141592654;
    int i = 1,j = 1;
    double a,b,c = 1,sum=0;
    while(fabs(x)>2*PI)
    {
        if(x>0)
            x-=2*PI;
        else
            x=2*PI-x;            
    }
    while(fabs(pow(x,j)/fact(j))>=epsilon)
    {
        a=pow(-1,i+1)*pow(x,j);
        b=fact(j);
        j=j+2;
        i++;
        c=a/b;
        sum+=c;
    }
    return sum;
}

int main()
{
    double x,epsilon;
    scanf("%lf%lf",&x,&epsilon);
    printf("%.15f\n",MySin(x,epsilon));
    return 0;
}

PTA提交结果:

  • 11
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
在用C语言写一元多项式表示及相加时常遇到的问题有1. 数据结构选择:一元多项式可以使用数组、链表或其他数据结构来表示。在选择数据结构,需要考虑插入删除、遍历等操作的效率和易用性。 2. 多项式的输入和输出:需要设计一种方式来输入和输出多项式的系数和指数。可以通过用户输入、文件读取或其他方式来获取多项式的信息,并将结果以合适的格式输出。 3. 多项式相加的实现:多项式相加需要考虑相同指数项的合并和系数的相加。在实现相加算法时,需要遍历多项式并判断相同指数项,然后进行系数相加。 4. 内存管理:在创建和操作多项式时,需要注意内存的申请和释放。确保在不再使用时正确释放内存,以避免内存泄漏和程序崩溃。 5. 错误处理:在实现多项式相关函数时,需要考虑错误处理机制。例如,处理输入错误、除零错误等异常情况,并返回适当的错误码或错误信息。 6. 效率优化:对于大规模的多项式相加,可能需要考虑一些优化策略,如排序、合并相同指数项时的算法复杂度优化等,以提高程序的效率。 以上是在用C语言写一元多项式表示及相加时常遇到的一些问题。解决这些问题需要对数据结构和算法有一定的理解和掌握,并且注重细节和错误处理。希望这些问题的提示能对你有所帮助!
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值