sinx的近似计算

已知sinx的近似计算公式如下:

 sin x = x - x3/3! + x5/5! - x7/7! + ... + (-1)n-1x2n-1/(2n-1)!

 其中x为弧度,n为正整数。编写程序根据用户输入的x和n的值,利用上述近似计算公式计算sinx的近似值,要求输出结果小数点后保留7位

【输入形式】

从控制台输入小数x(0<=x<=20)和整数n(1<=n<=5000),两数中间用空格分隔。

【输出形式】

控制台输出公式结果:小数点后保留7位。

【样例输入1】

0.5236 4

【样例输出1】

0.5000011

【样例输入2】

0.5236 50

【样例输出2】

0.5000011

【样例说明】

输入x为0.5236,n为4,求得sinx近似计算公式的值为0.5000011,小数点后保留7位;同样,输入x为0.5236,n为50,求得sinx近似计算公式的值为0.5000011,小数点后保留7位。

注意:为保证数据的准确性和一致性,请使用double数据类型保存计算结果

以下是本人的代码

#include<stdio.h>
#include<math.h>
int main()
{
	double sin=0, x, t = 1;
	int i,j,n,fu=-1;
	scanf("%lf%d", &x,&n);
	for (i = 1; i <2*n; i++)//x的幂从1到2n-1
	{
		if (i % 2 != 0)//只有奇次项才参与计算
		{
			t = 1;
			for (j = 1; j <= i; j++)
			{
				t *= j;
			}
			fu *= -1;//奇次幂项每隔一项正负号变一次
			sin += fu * pow(x,i) / t;
		}
	}
	printf("%.7f", sin);
	return 0;
}

递归法 

这个是朋友写的,我不是很理解,求大佬讲解

#include <stdio.h>
#include <math.h>
int main ()
{
	int n,i;
	double x,s,t;
	double fact(int a);//计算分母
	scanf("%lf %d",&x,&n);
	t=x;
	if (x>=0&&x<=20&&n>=1&&n<=5000)
	{
		for (i=2;i<=n;i++)
		{
			s=pow(-1,i+1)*pow(x,2*i-1)/fact(2*i-1);
			t=t+s;
		}
		printf("%.7f",t);
		return 0;
	}
}
double fact(int a)
{
	if (a==1)
		return 1;
	else
		return a*fact(a-1);
}

  • 11
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

扶1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值