百度知道 - 信息提示

日期:2025-01-13 07:41:10 人气:1

百度知道 - 信息提示

    A+
热门评论

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

楼主你好 改动比较多,修改后的代码如下: #include #include double fun(double x,double e);//我把声明都放外面了 double fun2(double i); //多声明了一个fun2,用于计算阶乘 int main(void) { double x,e,cosx; scanf("%lf %lf",&x,&e); //这里改成一个scanf函数输入两个,中间用空格或者回车隔开就可以 cosx=fun(x,e); //这里楼主原来的x和e的位置放反了 printf("%.3f",cosx); return 0; } double fun(double x,double e) { double sum=1.0,item=0,a=0,temp=1,flag=-1,i; //sum初始值改成了1 for(i=2;i<=1000;i=i+2) //这里原来是i从0开始,i<a=为条件,但a你初始化是0,只判断初始的a { temp=fun2(i);//原式因为i从0开始,所以原式temp从相乘第一次后就一直为0了 item=pow(x,i)/temp; sum=item*flag+sum;//由于第一个数是x^0/0!,就是1,所以初始化sum为1,直接从第二个开始 flag=-flag; if(fabs(item)<e) //那个do..while换成了for循环里的一个判断语句就可以了,不必双循环 break; } return sum; } double fun2(double i) //用来计算阶乘的函数fun2 { int j; double sum=1; for(j=1;j<=i;j++) { sum=sum*j; } return sum; } 输入1和0.001,输出为0.540~ 至于循环那里,我采用了for循环,其实可以用你原来的循环的,不过考虑到变量的范围问题,还是尽量计算小一点的数,毕竟如果角度是50 60之后,高次方多几次就不是小数字了~~所以适用范围还是小角度的好。如果不符合楼主你的意思,你可以在此基础上再改进~~ 希望楼主能看明白~祝楼主学习进步~~

阅读全文

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

#include //头文件置顶 #include double fact(int n) { double s = 1; for(int i = 1; i <= n; i++) { s *= i; } return s; } double funcos(double e,int x) { //运算次序要理清 double cos = 0; double item = 1; int i = 0; int flag = 1; while(abs(item) >= e) { item = flag * pow(double (x), 2 * i) / fact(2 * i); cos += item; flag *= -1; i++; } return cos; } int main() { int x = 0; double e = 0; printf("e: "); scanf("%lf",&e); printf("x: "); scanf("%d",&x); printf("cos(x) = %.3lf\n",funcos(e, x)); //唯一的缺陷就是3必须随e的变化手动改写 return 0; } 运行结果:

阅读全文