问答

【C语言小白】使用函数求余弦函数的近似值 【题目的错误找不出来

作者:admin 2021-04-22 我要评论

题目如图所示: 原题所在链接: 使用函数求余弦函数的近似值 我的代码如下: double funcos( double e, double x ) { double delta; double numerator; //分子 d...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

题目如图所示:

image.png
image.png
image.png

原题所在链接:
使用函数求余弦函数的近似值

我的代码如下:

double funcos( double e, double x ) {
    double delta;
    double numerator; //分子
    double denominator; //分母
    int k; //真实的k等于n+1
    
    double answer = 0;
    
    for (int n = 1;; n++) {
        numerator = pow(x, 2*n);
        
        int result = 1;  //计算2*n的阶乘
        for (int i = 0; i < 2*n; i++) {
            result = result*(i+1);
        }
        denominator = result;
        
        delta = numerator/denominator;
        
        if (delta < e && delta > -e) {
            k = n+1;
            break;
        }
        
    }

    for (int i = 0; i < k; i++) {
        
        if (i == 0) {
            delta = 1;
        } else {
            
            numerator = pow(x, 2*i);
            
            int result = 1;  //计算2*i的阶乘
            for (int j = 0; j < 2*i; j++) {
                result = result*(j+1);
            }
            denominator = result;
            
            if (i%2 != 0) {
                delta = (numerator/denominator)*(-1);
            } else {
                delta = numerator/denominator;
            }
        }
        answer += delta;
    }
    return answer;
    
}

报错如下:
image.png

不知道这里为什么说我错呢?有没有哪位大神可以帮忙解答一下?

后来找到正确答案如下,可以供参考:

#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;
}

double funcos( double e, double x ) {
    double item = 1.0; //单个cosx项目
    double numerator = 1.0; //分子
    double denominator = 1.0; //分母
    double cosx = 1.0;  //整个cosx项目,由n个item组成
    
    int i; //cosx的项系数,从2开始,因为第一项等于1,已经一开始赋值了
    int flag = -1; //cosx的项系数的正负号
    
    for (i = 2; fabs(item) >= e; i+=2) {
        numerator *= x*x;  //分子等于x*x,每多一项就再乘一次
        denominator *= i*(i-1);  //分母为阶乘,每多一项就多2位的阶乘
        item = flag*numerator/denominator;
        cosx = cosx + item; //cosx等于所有的item相加
        flag *= -1; //第二项开始符号是负数,每次变号
    }
    return cosx;
}

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 【C语言小白】使用函数求余弦函数的近

    【C语言小白】使用函数求余弦函数的近

  • swiftui 中如何使用百度地图?

    swiftui 中如何使用百度地图?

  • vite 如何实现 vue mpa ?以及 vite 文

    vite 如何实现 vue mpa ?以及 vite 文

  • ts 类型问题

    ts 类型问题

腾讯云代理商
海外云服务器