这个是实习时编的程序,交上去了,楼主看看,合适的话就纳为满意答案哦。
谢谢啊。
#include
void main()
{ int f=1;
double i,x,j,a=0.0,m=0.0;
printf("输入x=");
scanf("%lf",&x);
i=1,j=x,m=x;
while(m>1e-7)
{a+=f*m;
i*=(i+1)*(i+2);
j*=x*x;
m=j/i;
f=-f; }
printf("sinx=%lf\n",a);
}
#include
using namespace std;
double sin_item(double x, int n) // 计算每一项的值
{
double result = 1.0;
for(int i = 1; i <= n; i++)
{
result *= x/i;
}
return result;
}
double sin(double x)
{
double sum = 0.0;// 各项和
double item;// 每项的值
int n = 1;// 第n项
int sign = 1;// 每一项的符号
while((item = sin_item(x, n)) > 1e-8)// 计算每项的值,并把值大于1e-8的值加入sum
{
sum += sign*item;
sign *= -1;// 符号反号
n += 2;// n增加2
}
return sum;
}
int main(int argc, char* argv[])
{
cout << sin(3.1415926/6) << endl;// 输出sin 30度的值
return 0;
}
int jc(int n)
{
if(n==0)
{
return 1;
}
int s=1;
for(int i=1;i<=n;i++)
{
s*=i;
}
return s;
}
double mysin(double a)
{
double s=0.0;
double s1=a;
int i=0;
while(fabs(s-s1)>0.0000001)
{
s1=s;
if(i%2==0)
{
s+=pow(a,2*i+1)/jc(2*i+1);
}
else
{
s-=pow(a,2*i+1)/jc(2*i+1);
}
i++;
}
return s;
}
这样就行了,~~~