概述
本题要求实现一个函数,用下列公式求cos(x)的近似值,精确到最后一项的绝对值小于e:
cos(x)=x0/0!−x2/2!+x4/4!−x6/6!+⋯
函数接口定义:
double funcos( double e, double x );
其中用户传入的参数为误差上限e和自变量x;函数funcos应返回用给定公式计算出来、并且满足误差要求的cos(x)的近似值。输入输出均在双精度范围内。
裁判测试程序样例:
#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) = %.6fn", x, funcos(e, x));
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
0.01 -3.14
结尾无空行
输出样例:
cos(-3.14) = -0.999899
#include <stdio.h>
#include <math.h>
double factorial(int z) {
double sum1 = 1;
for (int i = 1; i <= z; i++) {
sum1 *= i;
}
return sum1;
}//阶乘
double funcos(double e, double x) {
double sum = 0;
int cnt = 0;
int p = 1; //判断该加还是减
for (int i = 0; ; i += 2) {
double a = pow(x, i);
double b = factorial(i);
double c = a / b;
if (p == 1) {
sum += a / b;
p = -p; //取反
cnt++;
}
else if (p == -1) {
sum -= a / b;
p = -p;
cnt++;
}
if (pow(x, i+2) / factorial(i+2) < e) { //判断for循环是否退出语句,如果直接写for循环里会少一项
if (p == 1) {
sum += pow(x, i + 2) / factorial(i + 2);
}
else if (p == -1) {
sum -= pow(x, i + 2) / factorial(i + 2);
}
break;
}
}
return sum;
}
这题的坑就是条件中的"精确到最后一项的绝对值小于e",如果用for循环 条件为Xn次方/6! 很容易丢失最后一项,因为他判断小于e之后就跳出了 小于e的第一项没算进去导致错误
最后
以上就是寂寞含羞草为你收集整理的习题5-7 使用函数求余弦函数的近似值的全部内容,希望文章能够帮你解决习题5-7 使用函数求余弦函数的近似值所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复