百度知道 - 信息提示

日期:2025-01-13 03:08:46 人气:1

百度知道 - 信息提示

    A+
热门评论

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

#include #include int main(void) { double x, e,cosx; double funcos(double e,int x); printf("e: "); scanf("%lf",&e); printf("x: "); scanf("%lf",&x); //这里是%lf cosx=funcos(e,x); printf("cos(x)=%.3f\n",cosx); return 0; } double funcos(double e,int x) { int flag,a,i; double sum,item; double fact(int n); item=1; //这个初始化要大于e,否则不执行下面 flag=1; a=0; i=0; sum=0; while(fabs(item)>=e){ item=(flag*pow(x,a))/fact(i); sum=sum+item; flag=-flag; a=a+2; i=i+2; } return sum; } double fact(int n) { int i; double result; result=1; for(i=1;i<=n;i++){ result=result*i; } return result; }

阅读全文

。。输入精度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之后,高次方多几次就不是小数字了~~所以适用范围还是小角度的好。如果不符合楼主你的意思,你可以在此基础上再改进~~ 希望楼主能看明白~祝楼主学习进步~~

阅读全文