5-7 使用函数求余弦函数的近似值

本题要求实现一个函数,用下列公式求cos(x)的近似值,精确到最后一项的绝对值小于e:

cos(x)=x 0 /0!−x 2 /2!+x 4 /4!−x 6 /6!+⋯

函数接口定义:

double funcos( double e, double x );

其中用户传入的参数为误差上限e和自变量x;函数funcos应返回用给定公式计算出来、并且满足误差要求的cos(x)的近似值。输入输出均在双精度范围内。

裁判测试程序样例:

#include 
#include 

double funcos( double e, double x );

int main()
{    
    double e, x;

    scanf("%lf %lf", &e, &x);
    printf("cos(%.2f) = %.6f\n", x, funcos(e, x));
    
    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

0.01 -3.14

输出样例:

cos(-3.14) = -0.999899

这道题就是通过编程题改编而来,和求序列和一样的道理,把每一项划分成分子和分母,单独化,我之前一直搞不懂0!的值是多少于是就把它省略,直接从第二项开始计算,毫无疑问,运行错误,在查阅资料之后明白0!等于1。在写代码的时候你要明确你要使用什么循环

double funcos( double e, double x ){
	double sum=0;// 结果
    double a; //分子
    double b;//分母
    double c; //最后一项
    double index=0;
    double f=1;
    do{
        if(index==0)  //首先判断指数为0的形况下,0!的值
            b=1;
        else
            for(int i=1;i<=index;i++){ //计算阶乘
                b*=i;
            }
           // b=b*(index-1)*index;
        
	    a=pow(x,index);   //计算指数幂
		c=a/b;   //求每一项的值
        sum+=f*c;  //求和
        f=-f;   //规定每一项的符号
        index+=2;    //指数的变化区间为2
        b=1;    //这里进行归零 因为我用的是循环相乘,
	}while(c>e);
	
	return sum;
}

你可能感兴趣的:(c语言)