习题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 <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、最后一项的绝对值小于e,看到绝对值联想使用fabs函数

2、输入输出均在双精度(double)范围内

分析公式看规律

1、一正一负,很自然的想到设立flag

2、x的幂为0、2、4、6...初步考虑用循环迭代

解题代码

double funcos( double e, double x )
{
    int i = 1;
    int flag = 1;//设立flag实现一正一负
    double value = 1;//设立问题1,想想为什么将第一项设为1(后面有解答)
    double sum = 0;
    double denominator = 2;//设立问题2,想想为什么将分母设为2
    while(fabs(value) >= e)//利用fabs函数实现绝对值的判断
    {
        sum = sum + value;//明白问题1、2即可明白此步骤
        flag = -flag; 
        value = pow(x,i*2)/denominator*flag;
        i++;
        denominator = (i*2)*(i*2-1)*denominator;
    }
    sum = sum + value;//设立问题3,为什么还要做这一步?
    return sum;
}

问题解答

问题1:因为0的任何次方除以0的阶乘都为1,故可直接将第一项设置成1,也方便后面fabs的判断。为什么方便fabs的判断?若将第一项值设置成0,fabs的绝对值为0,0必然小于e,显然用fabs判断会出错。(当然此题还可用其他方法,在这里是想让大家了解fabs函数用法)

问题2:第二项的分母为2。

问题3:因为while循环时最后的结果sum没有加上最后一次的value。

相关推荐

  1. python使用函数余弦函数近似值

    2024-01-07 21:28:02       36 阅读
  2. mysql 5.7 函数汇总

    2024-01-07 21:28:02       33 阅读
  3. Python使用函数素数和

    2024-01-07 21:28:02       36 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-07 21:28:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-07 21:28:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-07 21:28:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-07 21:28:02       18 阅读

热门阅读

  1. 【LeetCode-402】移掉K位数字

    2024-01-07 21:28:02       43 阅读
  2. MyBatis中的XML文件中SQL的<=判断符号处理

    2024-01-07 21:28:02       42 阅读
  3. Unity2D学习笔记 | 《勇士传说》教程 | (六)

    2024-01-07 21:28:02       38 阅读
  4. ARM 链接器优化功能介绍

    2024-01-07 21:28:02       42 阅读
  5. 【机器学习前置知识】共轭分布

    2024-01-07 21:28:02       36 阅读
  6. Vue中用watch一次监听两个值的变化

    2024-01-07 21:28:02       34 阅读
  7. 写字母(文件)

    2024-01-07 21:28:02       34 阅读
  8. ubuntu2204,mysql8.x安装

    2024-01-07 21:28:02       39 阅读
  9. 【spring之条件评估器】

    2024-01-07 21:28:02       34 阅读
  10. AMP 通讯RPMsg

    2024-01-07 21:28:02       44 阅读