我是靠谱客的博主 寂寞含羞草,最近开发中收集的这篇文章主要介绍习题5-7 使用函数求余弦函数的近似值,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

本题要求实现一个函数,用下列公式求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) = %.6fn", x, funcos(e, x));

return 0;

}

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

输入样例:

0.01 -3.14
结尾无空行

输出样例:

cos(-3.14) = -0.999899

#include <stdio.h>
#include <math.h>

double factorial(int z) {
    double sum1 = 1;
    for (int i = 1; i <= z; i++) {
        sum1 *= i;
    }
    return sum1;
}//阶乘

double funcos(double e, double x) {
    double sum = 0;
    int cnt = 0;
    int p = 1; //判断该加还是减
    for (int i = 0; ; i += 2) { 
        double a = pow(x, i);
        double b = factorial(i);
        double c = a / b;
        if (p == 1) {
            sum += a / b;
            p = -p; //取反
            cnt++;
        }
        else if (p == -1) {
            sum -= a / b;
            p = -p;
            cnt++;
        }
        if (pow(x, i+2) / factorial(i+2) < e) {   //判断for循环是否退出语句,如果直接写for循环里会少一项
            if (p == 1) {                         
                sum += pow(x, i + 2) / factorial(i + 2);
            }
            else if (p == -1) {
                sum -= pow(x, i + 2) / factorial(i + 2);
            }
            break;
    }
    }
    return sum;
}

这题的坑就是条件中的"精确到最后一项的绝对值小于e",如果用for循环 条件为Xn次方/6! 很容易丢失最后一项,因为他判断小于e之后就跳出了 小于e的第一项没算进去导致错误

最后

以上就是寂寞含羞草为你收集整理的习题5-7 使用函数求余弦函数的近似值的全部内容,希望文章能够帮你解决习题5-7 使用函数求余弦函数的近似值所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(68)

评论列表共有 0 条评论

立即
投稿
返回
顶部