码迷,mamicode.com
首页 > 其他好文 > 详细

习题5-7 使用函数求余弦函数的近似值 (15分)

时间:2020-06-27 00:15:51      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:sub   返回   的区别   fabs   要求   裁判   str   list   com   

本题要求实现一个函数,用下列公式求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 <stdio.h>
#include <math.h>

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


 1 /*个人感觉这道题可以从三个方面进行考虑,通过对比每一项可以看到,
 2 每一项与上一项的区别在于多了一个x*x,多除了一个m*(m-1),以及变号(即乘上-1)*/
 3 double funcos(double e,double x){
 4     //初始sum值设为1,因为第一项求极限值为1
 5     double sum=1.0;
 6     //第一项为1小于e,计算第二项,幂数为m=2.除数也为2*1=2;
 7     double m=2;
 8     double k=2;
 9     //用temp存储每一项的绝对值
10     double temp=x*x;
11     sum-=temp/k;
12     //刚开始计算得到的temp是第二项的值,如果第二项的值大于e则执行以下流程
13     for(m=4;fabs(temp/k)>e;m+=2){
14         temp=temp*x*x;
15         k=k*(-1)*m*(m-1);
16         sum-=temp/k;
17     }
18     return sum;
19 }
20 
21 /*
22 double funcos( double e, double x ){
23     double tmp1=1,tmp2=1,tmp3=1,sum=1;
24     int i,k;
25     k=-1; 
26     for(i=2;tmp1>e;i+=2){
27         tmp2 = tmp2*x*x;//分子
28         tmp3 = tmp3*i*(i-1);//分母
29         sum = sum + k*tmp2/tmp3;//转换各项的符号再相加
30         tmp1=tmp2/tmp3;//每一项的绝对值
31         k=-k;//换号
32     }
33     return sum;
34 }
35 */

 

习题5-7 使用函数求余弦函数的近似值 (15分)

标签:sub   返回   的区别   fabs   要求   裁判   str   list   com   

原文地址:https://www.cnblogs.com/samgue/p/13196779.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!