读书人

一道C语言题目

发布时间: 2013-04-21 21:18:07 作者: rapoo

一道C语言题目求助
输入精度e 和实数x,用下列公式求cos x 的近似值,精确到最后一项的绝对值小于e?要求定义和调用函数funcos(e,x)求余弦函数的近似值?
然后我是这么做的没有错误但是不能算出要求的东西
#include<stdio.h>
#include<math.h>
int main(void)
{
double e,result,x;
double funcos(double e,double x);

printf("输入精度:");
scanf("%lf",&e);
printf("x=");
scanf("%lf",&x);
result=funcos(e,x);
printf("cos %f = %f",x,result);

}


double funcos(double e,double x)
{
int flag,digit,i;
double denominator,sum,item,numerator;

sum=0;
item=1.0;
denominator=1.0;
flag=1;
numerator=1.0;
digit=0;
while(fabs(item)>=e)
{
item=flag*numerator/denominator;
numerator=numerator*x*x;
digit=digit+2;
denominator=1.0;
for(i=digit;i>=1;digit--)
denominator=denominator*i;
flag=-flag;
sum=sum+item;
}

return sum;
}
求指导哪里错误了 C math.h
[解决办法]


#include<stdio.h>
#include<math.h>
double funcos(double e,double x);
double fact(int x);
int main(void)
{
double e,x,y;
printf("Input e:");
scanf("%lf",&e);
printf("Input x:");
scanf("%lf",&x);
y=funcos(e,x);
printf("cos%lf=%.2lf\n",x,y);
return 0;
}
double funcos(double e,double x)
{
int n,p;
double z,m;
z=p=0;
n=1;
while(1)
{
m=pow(x,p)/fact(p);
if(m<e)
break;
z=z+n*m;
n=-n;
p=p+2;
}
return z;
}


double fact(int x)
{
int i;
double y;
y=1;
for(i=1;i<=x;i++)
{
y=y*i;
}
return y;
}


[解决办法]

// 其他的没细看,感觉这句有点问题
for(i=digit;i>=1;digit--) // i值没变化,很容易陷入死循环
denominator=denominator*i;

读书人网 >C语言

热点推荐