![]() |
#2
veketdelphi2013-10-16 20:19
|
3、编一个程序计算sinx和cosx的近似值。使用如下的台劳级数:
sin x=x/1! -x*x*x/3! + x*x*x*x*x/5! -x*x*x*x*x*x*x/7! + ....
cos 省略
舍去的绝对值应小于预定值o。o由自己选择。
要求:定义一个函数计算n!。

#include <iostream.h>
#include <math.h>
int ff(int x) //自定义的阶层函数
{
int i,s=1;
for(i=1;i<=x;i++)
s=s*i;
return s;
}
int main()
{
int x,a,b,j=1,k=1;
long double y,z,o=1e-100; //o代替无穷小量,并且赋值为1e-100
cin>>x;
while(pow(x,2*j-1)/ff(2*j-1)>o)
j=j+1; //对于sin x,计算出当通项小于o时,循环的次数j
while(pow(x,2*k-1)/ff(2*k-2)>o)
k=k+1; //对于cos x,计算出当通项小于o时,循环的次数k
y=z=0;
for(a=1;a<=j;a++)
y=y+(pow(-1,a+1)*pow(x,2*z-1))/ff(2*a-1); // 对于sin x来说,计算出循环了j次的式子之和
for(b=1;b<=k;b++)
z=z+(pow(-1,b+1)*pow(x,2*b-2))/ff(2*b-2); //对于cos x来说,计算出循环了k次的式子之和
cout<<"sin"<<x<<"="<<y<<endl;
cout<<"cos"<<x<<"="<<z<<endl;
}
#include <math.h>
int ff(int x) //自定义的阶层函数
{
int i,s=1;
for(i=1;i<=x;i++)
s=s*i;
return s;
}
int main()
{
int x,a,b,j=1,k=1;
long double y,z,o=1e-100; //o代替无穷小量,并且赋值为1e-100
cin>>x;
while(pow(x,2*j-1)/ff(2*j-1)>o)
j=j+1; //对于sin x,计算出当通项小于o时,循环的次数j
while(pow(x,2*k-1)/ff(2*k-2)>o)
k=k+1; //对于cos x,计算出当通项小于o时,循环的次数k
y=z=0;
for(a=1;a<=j;a++)
y=y+(pow(-1,a+1)*pow(x,2*z-1))/ff(2*a-1); // 对于sin x来说,计算出循环了j次的式子之和
for(b=1;b<=k;b++)
z=z+(pow(-1,b+1)*pow(x,2*b-2))/ff(2*b-2); //对于cos x来说,计算出循环了k次的式子之和
cout<<"sin"<<x<<"="<<y<<endl;
cout<<"cos"<<x<<"="<<z<<endl;
}