sinx的近似计算

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

大家好,欢迎来到IT知识分享网。

已知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.

【样例输入2】

0.5236 50

【样例输出2】

0.

【样例说明】

输入x为0.5236,n为4,求得sinx近似计算公式的值为0.,小数点后保留7位;同样,输入x为0.5236,n为50,求得sinx近似计算公式的值为0.,小数点后保留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); } 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/151191.html

(0)
上一篇 2025-03-14 21:33
下一篇 2025-03-14 21:45

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信