首页 >>  正文

求C语言变成编程 y=x-x的三次方/3!+x五次方/5!-x7次方/7! 求到第n项

来源:www.zuowenzhai.com    作者:编辑   日期:2024-05-22
sin(x)=x-x^3/3!+x^5/5!-x^7/7!+...,直到最后一项的绝对值小于10的负七次方为止。C语言编程

这是泰勒展示没错。sin表示的就是一个求出来的和,你看原公式不就是sin=一个求和式的形式嘛。。。

我觉得x=-x*z*z/(2*n+1)/2*n;这一行貌似有问题,2*n没有加括号。

验证时其实不用转化,泰勒公式对所有x都成立。结果可能有一点差别,因为这个求和过程终止于你所定义的条件(<1e-7).

for(j=1;j<=2*n-1;j=j+2)
{for(i=1;i<=j;i++)
t=t*i;
sinx=pow(x,j)/t;
sinx=sinx+0;}
printf("sinx=%f",sinx);
修改为
for(j=1;j<=2*n-1;j=j+2)
{
t=1;//t需要赋值为1,否则每次都是上个循环的值

for(i=1;i<=j;i++)
t=t*i;
sinx + =pow(x,j)/t; //这个才是累加

}

#include "stdio.h"
int main(int argc,char *argv[]){
int n,i;
double x,t,s;
printf("Please enter n(int n>0) & x(R:)...
");
if(scanf("%d%lf",&n,&x)!=2 || n<1){
printf("Input error, exit...
");
return 0;
}
for(s=t=x,x*=x,i=1;i<n;i++){
(t*=x)/=(4*i*i+i+i);
s += i&1 ? -t : t;
}
printf("The result is %g
",s);
return 0;
}

运行样例:



double f(double x,int n){
if(n==0) return 0;
int i;
double s,res,px,flag;
res=x;
px=x;
s=1.0;
flag=-1.0;
for(i=2;i<=2*n-1;i++){
s*=(double)i;//求阶乘
px*=x;//求x^n
if(i%2){//如果为奇数则累加
res+=flag*px/s;
flag=-flag;//改变正负
}
}
return res;
}
用这个函数算就可以了,不过n不可以太大,不然会数据溢出(n大于8以后其是后面几乎就是加0了,更大的n要写高精度,完全没必要)

纯手打,望采纳,谢谢。



(编辑:嵇谦影)
联系方式:
关于我们 | 客户服务 | 服务条款 | 联系我们 | 免责声明 | 网站地图
@ 作文摘要网