作业帮 > 综合 > 作业

C语言 输入精度e 和实数x,用下列公式求cos x 的近似值,精确到最后一项的绝对值小于e。

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/13 14:19:59
C语言 输入精度e 和实数x,用下列公式求cos x 的近似值,精确到最后一项的绝对值小于e。
输入精度e 和实数x,用下列公式求cos x 的近似值,精确到最后一项的绝对值小于e。要求定义和调用函数funcos(e,x)求余弦函数的近似值。
【输入形式】
输入两个浮点数:精度e和实数x
【输入输出样例1】(下划线部分表示输入)
e: 0.001
x: 1
cos(x)=0.540
-----------------------------------------
为什么出来的都是0,
逐步调试后,发现while那里,明明item=1.800>e的,却直接跳出循环了,为什么,该怎么改.
#include
double fact(int n)
{
\x05int i;
\x05double s=1;
\x05for(i=1;i=e){
\x05\x05item=flag*pow(x,2i)/fact(2i);
\x05\x05flag=-flag;
\x05\x05i++;
\x05\x05cos=cos+item;
\x05}
\x05return cos;
}
#include
int main()
{
\x05int x;
\x05double e;
\x05printf("e: ");
\x05scanf("%lf",&e);
\x05printf("x: ");
\x05scanf("%d",&x);
\x05printf("cos(x)=%.3lf",funcos(e,x));
\x05return 0;
}

#include <stdio.h> //头文件置顶#include <math.h>double fact(int n){\x09double s = 1;\x09for(int i = 1; i <= n; i++)\x09{\x09\x09s *= i;\x09}\x09return s;}double funcos(double e,int x){\x09//运算次序要理清\x09double cos  = 0;\x09double item = 1;\x09int       i = 0;\x09int    flag = 1;\x09while(abs(item) >= e)\x09{\x09\x09item = flag * pow(double (x), 2 * i) / fact(2 * i);\x09\x09cos += item;\x09\x09flag *= -1;\x09\x09i++;\x09}\x09return cos;}int main(){\x09int    x = 0;\x09double e = 0;\x09printf("e: ");\x09scanf("%lf",&e);\x09printf("x: ");\x09scanf("%d",&x);\x09printf("cos(x) = %.3lf\n",funcos(e, x)); //唯一的缺陷就是3必须随e的变化手动改写\x09return 0;} 运行结果: