为了账号安全,请及时绑定邮箱和手机立即绑定

用C语言函数调用与递归解决问题

用C语言函数调用与递归解决问题

C
慕粉1340376064 2017-04-20 11:17:18
利用公式sin(x)=x-x^3/3!+x^5/5!-x^7/7!+……设计函数double sin(double x)计算sin(x)的值,(最后一项的绝对值小于10的负6次方),并用main函数测试。
查看完整描述

1 回答

?
Wendy_Jacky

TA贡献10条经验 获得超2个赞

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

#define PI 3.141592653

long factorial(int n);
double sin1(double x);

int main(void)
{
    int x = 30;
    double result = sin1(x);
    printf("sin(%d°) = %f\n", x, result);
    printf("Bye\n");
    return 0;
}

/**
 * 求阶乘
 * @param  n [description]
 * @return   [description]
 */
long factorial(int n)
{
    if (n == 1)return 1;
    else return (n * factorial(n - 1));
}

/**
 * 计算sin(x),因为sin在math.h中定义了,所以这里方法名用sin1。
 * sin(x) = x^1/1! - x^3/3! + x^5/5! - x^7/7! + ...
 * 把表达式中的-号,转换为+号,方便计算。
 * sin(x) = 1*x^1/1! + (-1)*x^3/3! + 1*x^5/5! + (-1)*x^7/7! + ...
 * @param  x 角度
 * @return   sin(x)
 */
double sin1(double x)
{
    int flag1 = 1;// 表示符号位
    int flag2 = 1;// 表示指数和阶乘,每次+2.

    double xf;      // 把输入的角度转成弧度,180度 = π弧度 => 1度 = π/180弧度。
    double temp;    // 保存每一项计算的结果
    double sum = 0; // 保存最终结果

    xf = PI / 180.0 * x;
    do
    {
        temp = flag1 * pow(xf, flag2) / factorial(flag2);
        sum += temp;

        flag1 *= -1;
        flag2 += 2;

    } while (fabs(temp) - 0.000001 >= 0);// 判断最后一项的绝对值小于10的负6次方

    return sum;
}
查看完整回答
反对 回复 2017-04-28
  • 1 回答
  • 1 关注
  • 1408 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号