c语言问题,小白求救,问题是要求sinx=x-x^3/3!+x^5/5!......直到sinx的累加项绝对值小于10的负六次方

问题是要求sinx=x-x^3/3!+x^5/5!......直到sinx的累加项绝对值小于10的负六次方

#include<stdio.h>
#include<math.h>
void main()
{
int i,jc,a;
double x,sinx;
printf("输入弧度值x:");
scanf("%lf",&x);
printf("sin(%.2f)",x);
sinx=0;
for(a=1;jc=1;i=1,i++)
{
jc=jc*i;
if(i%2!=0)
{
x=a*pow(x,i)/jc;
sinx=sinx+x;
a=-a;
}
if(fabs(sinx)<0.000001) break;
}
printf("=%lf\n",sinx);
}

哪里出了问题啊,快疯了,无论输入什么答案总是0

稍作更改吧。
#include<stdio.h>
#include<math.h>
void main()
{
int i,jc,a;
double x,sinx,xiang;
printf("输入弧度值x:");
scanf("%lf",&x);
printf("sin(%.2f)",x);
sinx=0;
for(a=1,jc=1,i=1;;i++)
{
jc=jc*i;
if(i%2!=0)
{
xiang=a*pow(x,i)/jc;
sinx=sinx+xiang;
a=-a;
}
if(xiang<0.000001) break;
}
printf("=%lf\n",sinx);
}追问

但是我的要求是当sinx的累加项的绝对值小于10的负六次方才停止

追答

把if(xiang<0.000001)改回if(fabs(xiang)<0.000001)吧,sinx的累加项指的就是a*pow(x,i)/jc吧,而不是sinx。x=a*pow(x,i)/jc; 这样使得每次执行循环体都会使x的值发生改为,这明显不妥,所以多声明一个变量储存累加项的值。for循环括号中有三个语句,第一个语句最先执行并且只执行一次,第二个语句为条件语句,每次判断是否执行循环体之前都执行,第三个语句每次执行完循环体后都执行,三个语句都可以省略。如果for循环写成for(a=1;jc=1;i=1,i++)那么条件语句是jc=1,永远而true,而且每次循环执行前都把jc赋值为1;而i=1,i++;需要每次执行完循环体才执行,所以第一次执行循环体有于i还没有初始值所以应该会出错的,就算不出错,那也会使得每次i的值都会重置为2;
x的值要比较小才行,不然可能累加项的绝对值还没有小于10的负六次方,jc就溢出而导致无线循环。

温馨提示:内容为网友见解,仅供参考
无其他回答

...x^3\/3!+x^5\/5!...直到sinx的累加项绝对值小于10的负六次方
{ int i,jc,a;double x,sinx,xiang;printf("输入弧度值x:");scanf("%lf",&x);printf("sin(%.2f)",x);sinx=0;for(a=1,jc=1,i=1;;i++){ jc=jc*i;if(i%2!=0){ xiang=a*pow(x,i)\/jc;sinx=sinx+xiang;a=-a;} if(xiang<0.000001) break;} printf("=%lf\\n",si...

C语言问题 利用 sinx约=x - x^3\/3! + x^5\/5! - x^7\/7! +...;计算sinx...
&x -term*x*x\/(n*n+3*n+2)或-term*x*x\/((n+2)*(n+1))或-term*pow(x,2)\/((n+2)*(n+1))或-term*pow(x,2)\/(n*n+3*n+2)——主张用第一个,出题者意思好像让用第3个 count++ term>=1.0E-5 || -term>=1.0E-5或fabs(term)>=1.0E-5——主张用前者,出题者...

sinX的泰勒公式展开式用C语言怎么编写?非常急
泰勒展开是这个:sinx=x-x^3\/3!+x^5\/5!-..下面给出算20项的程序。include"math.h"include"stdio.h"void main(){ double x=0,y=0,z=1,s=1,mynum=0;int i=1 ,j=0, k=1;scanf("x=%f",&x);for(i=1;i<20;i++)z=1;k=1;for(j=1;j<=2*i-1;j++){ z=x*z;\/...

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);}

sinx的泰勒展开式是什么?
sinx的泰勒展开式是在x=0附近,将sinx表示为多项式的形式。具体的展开式为:sinx = x - x^3\/3! + x^5\/5! - x^7\/7! + ...。这个展开式展示了sinx函数与一系列多项式项的关系,每一项都是x的幂次和对应的阶乘的乘积。三、泰勒展开式的应用 泰勒展开式在多个领域都有应用,包括物理学、...

求证sinx=x-x^3\/3!+x^5\/5!-...(-1)^(k-1)*x^(2k-1)\/(2k-1)!+...
用泰勒公式吧sinx在x=0展开sinx=x-x^3\/3!+x^5\/5!-...(-1)^(k-1)*x^(2k-1)\/(2k-1)!+...则sinx~x所以原式=lim(x-sinx)\/xsinx=lim[x^3\/3!-x^5\/5!+...(-1)^k*x^(2k-1)\/(2k-1)!+...]\/x*x=lim[x\/3!-x^3\/5!+...(-1)^k*x^(2k-3)\/(2k-1)!+....

sinx泰勒公式展开
sinx泰勒公式展开为:sinx = x - x^3\/3! + x^5\/5! - x^7\/7! + ...这一公式是通过泰勒多项式来逼近正弦函数得到的。泰勒公式是分析数学中一种用于近似函数展开的强大工具,尤其适用于在特定点附近对函数进行近似。在sinx的泰勒展开式中,我们以x为中心点进行展开,得到一系列包含x的高阶项...

利用sinx=x-x^3\/3!+x^5\/5!-x^7\/7!+x^9\/9!-…,计算sinx(x为弧度值...
不知道为什么不能插入代码了,我就简写了 第一个空填- term * x * x \/ ((n + 1) * (n + 2 ))第二个空填fabs(term) >= 1e-5 就是运用了麦克劳林展开式简单的性质和math.h基本的函数,不懂可以追问。

...=X-X3\/3!+X5\/5!-X7\/7!...直到最后一项绝对值小于10负七次方_百度知...
输入的值过大没意义只要在-2*∏~2*∏即可。因为C语言的运算精确度有限。例如输入1.7,输出0.99166465 a=x;s=a;for(i=1;;i+=2){ a*=x*x*(-1)\/((i+1)*(i+2));if(fabs(a)<1e-7) break;s+=a;} cout<<setprecision(8)<<s<<endl;return 0;} \/\/用泰勒展开式求sinx ...

C语言计算sinx的近似值
{ int i=1,j=1,k,n=1,x;printf("sinx=x-x^3\/3!+x^5\/5-x^7\/7!...\\n请输入一个x\\n");scanf("%d",&x);double sinx=0;for(i=1;fabs(t)>=ACCURARY;i+=2){ for(k=1;k<=i;k++){n=n*i;} j++;t=pow(-1,j)*pow(x,i)\/n;sinx=sinx+t;} printf("sin%d=%....

相似回答