#include <stdio.h>
#include <math.h>
double funcos(double e, double x);
int main()
{
double e, x;
scanf("%lf %lf", &e, &x);
printf("cos(%.2f) = %.6f\n", x, funcos(e, x));
return 0;
}
这是主函数。
下面有两种写法,第一种是用函数求阶乘和乘方,然后相除,但是不对
double f(double n)
{
double i, p = 1;
for (i = 1;i <= n;++i)
p *= i;
return p;
}
double s(double x, double n)
{
double i, p = 1;
for (i = 1;i <= n;++i)
p *= x;
return p;
}
double funcos(double e, double x)
{
double m, sum = 0, n[30];n[0] = 1;int i;
for (i = 1;(m = s(x, 2 * i) / f(2 * i)) >= e;++i)
{
n[i] = m;sum += n[i];
}
n[i] = m;sum += n[i];
return sum;
}
还有一种是把阶乘和乘方直接运算,结果通过了
double funcos(double e, double x)
{
double sum=1;
int i,k=-1;
double m1 = 1, m2 = 1, m3 = 1;
for (i = 2;m1 > e;i=i+2)
{
m2 = m2 * x * x;
m3 = m3 * i * (i - 1);
sum += k*m2 / m3;
k = -k;
}
return sum;
}
为什么第一种不行,第二种可以呢?
你好,我是问答小助手,非常抱歉,本次您提出的有问必答问题,目前超出我们的服务范围,暂时无法为您解答。
首次提问人员可免费体验一次有问必答服务。目前首次提问的问题服务范围为:Java开发、数据库等领域,为您提供问题的解决思路和指导。不提供源码代写、项目文档代写、论文代写、安装包资源发送或安装指导等服务。
我们后续会持续优化,扩大我们的服务范围,为您带来更好地服务。
第一种没有注意加减,类似第二种的k = -k。
第一种还有个问题,超过30次运算会报错