用C语言程序算sinX的值
题目:利用泰勒级数sinx≈x-x^3/3!+x^5/5!-x^7/7!+x^9/9!-…,计算sinx的值。要求最后一项的绝对值小于10^-5,并统计出此时累加了多少项...
题目:利用泰勒级数sinx≈x-x^3/3!+x^5/5!-x^7/7!+x^9/9!-…,计算sinx的值。要求最后一项的绝对值小于10^-5,并统计出此时累加了多少项。
#include <stdio.h>
#include <math.h>
void main()
{
long double x,sinx;
int i=0,j=1;
long p=1;
printf("In sinx,x=");
scanf("%f",&x);
do{
i++;
if(i=1)
sinx=(pow(x,j))/p;
else if(i%2==0)
sinx=sinx-(pow(x,j))/p;
else
sinx=sinx+(pow(x,j))/p;
p=p*(j+1)*(j+2);
j=j+2;
}while(pow(x,j)/p<1e-5);
printf("sinx=%f\n",sinx);
}
为什么每次算都是-1.INF00的答案?求高人指点~ 展开
#include <stdio.h>
#include <math.h>
void main()
{
long double x,sinx;
int i=0,j=1;
long p=1;
printf("In sinx,x=");
scanf("%f",&x);
do{
i++;
if(i=1)
sinx=(pow(x,j))/p;
else if(i%2==0)
sinx=sinx-(pow(x,j))/p;
else
sinx=sinx+(pow(x,j))/p;
p=p*(j+1)*(j+2);
j=j+2;
}while(pow(x,j)/p<1e-5);
printf("sinx=%f\n",sinx);
}
为什么每次算都是-1.INF00的答案?求高人指点~ 展开
2个回答
展开全部
#include
#include
/*计算n的阶乘*/
int factor(int n)
{
if(n==1)
return 1;
else
return factor(n-1)*n;
}
/*得到分子的值*/
double get_numerator(double x,int order)
{
return pow(x,order); //求x^order
}
/*得到分母的值*/
double get_denominator(int n)
{
return factor(n); //求n的阶乘
}
/*获得第n项的符号,即(-1)^n*/
int get_symbol(int n)
{
if(n%2 ==0) //n是偶数
return 1;
else
return -1;
}
int main()
{
int i;
double x;
double sin_x=0;
double tmp=0;
printf("please input the x:\n");
scanf("%lf",&x);
for(i=0;;i++)
{
tmp=sin_x; //暂时保存上一步得到的sin值
sin_x += get_numerator(x,2*i+1)/get_denominator(2*i+1)*get_symbol(i);
if(fabs(sin_x-tmp)<1e-6) //精度满足要求
break;
}
printf("sin(%lf)=%lf\n",x,sin_x);
return 0;
} /***********************************************************************
学好c语言,首先应该把语言的语法学好,这也是基础。尤其是注意指针部分,可以说这是c语言的精髓,也是c语言能够直接操作内存的犀利之处。
其次,应该多练代码,并且注意代码的可读性,规范性。
最好,能够亲身用c语言参加某个项目实践,毕竟实践出真知。
至于之后c++或者java的学习,要看自己的发展规划了。不过学好c语言,绝对对你今后学习其他语言有很大帮助。
*************************************************************************/
#include
/*计算n的阶乘*/
int factor(int n)
{
if(n==1)
return 1;
else
return factor(n-1)*n;
}
/*得到分子的值*/
double get_numerator(double x,int order)
{
return pow(x,order); //求x^order
}
/*得到分母的值*/
double get_denominator(int n)
{
return factor(n); //求n的阶乘
}
/*获得第n项的符号,即(-1)^n*/
int get_symbol(int n)
{
if(n%2 ==0) //n是偶数
return 1;
else
return -1;
}
int main()
{
int i;
double x;
double sin_x=0;
double tmp=0;
printf("please input the x:\n");
scanf("%lf",&x);
for(i=0;;i++)
{
tmp=sin_x; //暂时保存上一步得到的sin值
sin_x += get_numerator(x,2*i+1)/get_denominator(2*i+1)*get_symbol(i);
if(fabs(sin_x-tmp)<1e-6) //精度满足要求
break;
}
printf("sin(%lf)=%lf\n",x,sin_x);
return 0;
} /***********************************************************************
学好c语言,首先应该把语言的语法学好,这也是基础。尤其是注意指针部分,可以说这是c语言的精髓,也是c语言能够直接操作内存的犀利之处。
其次,应该多练代码,并且注意代码的可读性,规范性。
最好,能够亲身用c语言参加某个项目实践,毕竟实践出真知。
至于之后c++或者java的学习,要看自己的发展规划了。不过学好c语言,绝对对你今后学习其他语言有很大帮助。
*************************************************************************/
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询