将
while(fabs(sum)>=e)
{
item=flag*pow(x,i)*1.0/fact(n);
sum=sum+item;
flag=-flag;
i=i+2;
n=n+2;
}
改为:
do
{
item=1.0*flag*pow(x,i)/fact(n);
sum=sum+item;
flag=-flag;
i=i+2;
n=n+2;
}while(fabs(item)>=e);
下面是在你的基础上修改的:
#include
#include
double funcos (double,int);
double fact (int);
int main(void)
{
int x;
double e;
printf("e: ");
scanf("%lf",&e);
printf("x: ");
scanf("%d",&x);
printf("cos(x)=%.3fn",funcos(e,x));
getch ();
return 0;
}
double funcos(double e,int x)
{
int flag,i,n;
double item,sum;
flag=1;
n=0;
i=0;
sum=0;
do
{
item=1.0*flag*pow(x,i)/fact(n);
sum=sum+item;
flag=-flag;
i=i+2;
n=n+2;
}while(fabs(item)>=e);//
return sum;
}
double fact(int n)
{
double product;
int i;
product=1;
if(n==0)
product=1; /* 0!不能用以下的算法吧?*/
else
{
for(i=1;i