zoukankan      html  css  js  c++  java
  • 习题5-7 使用函数求余弦函数的近似值 (15分)

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

    cos(x)=x0​​/0!x2​​/2!+x4​​/4!x6​​/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
    ", 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 */
  • 相关阅读:
    GDUFE ACM-1087
    背包九讲
    OJ4TH|Inverse number:Reborn
    OJ4TH|Let's play a game
    GG第四次作业
    OpenCV(3)其他常用数据类型
    OpenCV学习(2)读取视频和摄像头
    OpenCV(1)读写图像
    GG第三次作业
    GG第二次作业
  • 原文地址:https://www.cnblogs.com/samgue/p/13196779.html
Copyright © 2011-2022 走看看