注意精度问题,终止循环不是用#define N XXXX i<=N
谢谢~~~
#include<stdio.h>
#include<math.h>
main()
{
float sin=0.0,repl,x;
int j,i;
printf("请输入X的值\n");
Scanf("%f",&x);
for(i=1,j=1;sin>=-1||sin<=1;i++,j+=2)
{ repl=pow(x,j)/a(j);
if (i%2==0)
sin-=repl;
else
sin+=repl;
}
printf("sin(X)=%f",sin);
}
long a(int x)
{
int i;
long s=1;
for(i=1;i<=x;i++)
s*=i;
return s;
}
[此贴子已经被作者于2006-3-9 13:24:09编辑过]
#define k 50
#define pi 3.1415926
double factorial(int z) /*阶乘,递归算法实现*/
{if(z==0||z==1)
return (1);
else
return (factorial(z-1)*z);
}
double mysin(double x)
{
int n;
long double v;
double y=0,o,p;
for(n=1;n<k;n++)
{
v=factorial(n*2-1);
o=pow((-1),(n-1));
p=pow(x,(n*2-1));
y=y+(o*p/v);
/*
printf("%f %f %f %f\n",v,o,p,y);
*/
}
return(y);
}
void main()
{
float x;
double y,temp;
printf("Enter the randian:");
scanf("%f",&x);
if (x>pi)
{
temp=-2*pi;
while(x>pi)
{
x+=temp;
}
}
if (x<-pi)
{
temp=2*pi;
while(x<-pi)
{
x+=temp;
}
}
y=mysin(x);
printf("sinx:%f\nmysinx:%f\ndisparity:%f%",sin(x),y,(1-sin(x)/y)*100);
getch();
}
怎样把#define k 50
去掉,然后设立另一个方法跳出循环~~~