用C语言程序算sinX的值

题目:利用泰勒级数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的答案?求高人指点~

第1个回答  2020-01-24
#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语言,绝对对你今后学习其他语言有很大帮助。
*************************************************************************/
第2个回答  2010-11-08
程序有几个问题:
1.long double型数据输入输出都要用%lf,而你都用的是%f。
2. if(i=1)此处应该为(x==1)
3.while(pow(x,j)/p<1e-5);此处应该为:pow(x,j)/p>1e-5

目前就发现这么多错误,但是答案貌似不对。你再检查检查。本回答被提问者采纳

C语言求sinx的值,有我写的程序,请问错在哪里了?
sinx,s没有赋初值,sinx=0;s=1 include<stdio.h> include<math.h> void main(){ int p(int n);int n;double i,j,sinx=0;printf("x的值为0.3时,sinx的值为:");for(n=1;fabs(sin(0.3)-sinx)>=1e-8;n++){ j=p(n);i=pow(-1,n-1)*pow(0.3,2*n-1)\/j;sinx+=...

c语言计算sinx的值问题,运行无错但得不到想要的结果.求解
{ int n=1,c=1,a,b=1;long double x,d=0,sinx=0;\/\/这里定义长双精度,long float不是标准的数据类型 printf("请输入x的值:");scanf("%lf",&x);\/\/这里输入一定是%lf,输入一开始就不对 for(n=1,c=1,a=1;;a++){ d=pow(x,n)\/c;sinx+=b*d;b*=-1;n++;c*=n;n++;...

C语言输入x求SINX,公式sinx=x-x^3\/3!+x^5\/5!-x^7\/7!+x^9\/9!..._百 ...
sinx=c*f(-1,i)+sinx;b=b+2;} while(c>=1e-6);printf("%.5lf\\n",sinx);}

c语言求sinx的值 以下是该程序,请问错误在哪里?
int main(){ double x;printf("Please Input the number of double x:\\n");scanf("%lf",&x);printf("%lf\\n",sin(x));if (x>0){ printf("%lf\\n",log10(x));} else printf("error");return 0;}

c语言问题 编写程序,计算sinx的近似值,精确到10的负六次方
include<stdio.h> include<math.h> main(){ float a,b=1;float i,sinx,x;scanf("%f",&x);a=x;sinx=0;for(i=1;fabs(a\/b)>=1e-6;i++){ sinx+=a\/b;a=-a*x*x;b=b*2*i*(2*i+1); } printf("%f",sinx);} ...

c语言编程,利用泰勒级数求解sinx,输入x值,求解sinx值,保留小数点后6位...
\/\/#include "stdafx.h"\/\/If the vc++6.0, with this line.#include "stdio.h"int main(void){ int i,t; double sum,x,tmp,xx; printf("Input x(real -360°~+360°)...\\n"); scanf("%lf",&x); xx=x,x*=3.1415926535897932\/180;printf("%f\\n",xx); f...

求帮看c语言计算sinx的一个程序!
程序是对的。从高数上面考虑的话,该级数的收敛域是负无穷到正无穷,但是当x很大的时候,会导致收敛的时候循环次数过多,看上去就和死循环差不多,但是是可以计算出结果的。

c语言 从键盘输入x的值计算sinx,ln(x+1),e^x,|cosx|的值
h"\/\/ include "math.h"\/\/ void main(void){ double x;scanf("%lf",&x);printf("sinx=%.2f\\n",sin(x));if(x<=-1) printf("ln(x+1) is limitless\\n");else printf("ln(x+1)=%.2f\\n",log(x+1));if((x=x+1)<0) x=-x;printf("|x+1|=%.2f\\n",x);} ...

C语言sin怎么用
  头文件:#includesin()函数用来求给定值的正弦值,其原型为:doublesin(doublex);【参数】给定的值(弧度)。【返回值】返回-1至1之间的计算结果。弧度与角度的关系为:弧度=180\/π角度角度=π\/180弧度使用rtod()函数可以将弧度值转换为角度值。  1。弧度main(){float...

C语言编写程序,要求输入x和eps,按上述公式计算sinx的近似值。要求计算的...
{ int t=0,n,m,i; float eps,sinx=0.0,x,f=1,s=1; scanf("%f%f",&x,&eps); for(m=1; fabs(f)>eps; m+=2) { f=(pow(-1.0,t))*(pow(x,2*t+1))\/s; sinx=sinx+f; s=s*(m+1)*(m+2); t++; } printf("%.2f",sinx); } ...

相似回答