实验5-10 使用函数求余弦函数的近似值 (15point(s)) 需要重点注意 *和机试题目一毛一样

基本思想:

直接计算,和7-3思想差不多;

关键点:

才发现自己侥幸逃脱的一个坑点:这题隐含了一个高阶阶乘的问题,如果贸然使用int来计算阶乘,会出现溢出问题;

后续总结一下;

#include<stdlib.h>
#include<stdio.h>
#include<iostream>
using namespace std;

double factor(double x) {
    if (x <= 1.0)
        return 1.0;
    double sum = 1.0;
    while (x != 1.0) {
        sum *= x--;
    }
    return sum;
}

double mutiple(double x, double index) {
    if (index == 0.0)
        return 1.0;
    double sum = 1;
    while (index > 0.0) {
        sum *= x;
        index--;
    }
    return sum;
}

double funcos(double e, double x) {
    double sum = 0;
    double index = 0;
    while (1) {
        double fm = factor(0 + index * 2);
        double fz = mutiple(x, 0 + index * 2);
        double temp = fz / fm;
        if ((int)index % 2 == 0)
            sum += temp;
        else
            sum -= temp;
        index++;
        if (temp < e)
            break;
    }
    return sum;
}

int main() {
    double e, x;
    scanf("%lf %lf", &e, &x);
    printf("cos(%.2f) = %.6f\n", x, funcos(e, x));
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/songlinxuan/p/12360893.html
今日推荐