猿问

为什么会输不出结果,求帮助!

用余弦函数(cosx)的幂级数展开式编写程序:
(1) 要求从控制台输入x的值,依据上述cosx的幂级数展开式,输出cosx的近似值;
(2) 要求计算结果精确到小数点后8位。
(3) 注意:不允许使用C标准函数库(math.h)中的余弦函数。

#include<stdio.h>
#include<math.h>
int main()
{
int n=0;
double x,sum=0;
printf("please enter x:");
scanf("%f",&x);
double cosx(double x,int n);
do
{
sum=sum+cosx(x,n);
n=n+1;
}
while(fabs(cosx(x,n))>1e-8);
printf("%9.8f\n",sum);
return 0;
}
double cosx(double x,int n)
{
double p;
int q;
p=pow(x,2*n);
int fact(int n);
q=fact(2*n);
if(n%2)
return(-p/q);
else
return(p/q);
}
int fact(int n)
{
int ans=1,i;
if(n<=1)  
return 1;
for(i=1;i<=n; ++i)
ans*=i;
return ans;
}

一只名叫tom的猫
浏览 128回答 2
2回答

慕桂英3389331

cosx函数  #include<stdio.h>  #include<math.h>  int main()  {  int n=0;  double x,sum=0;  printf("please enter x:");  scanf("%lf",&x);//  double cosx(double x,int n);  do  {  sum=sum+cosx(x,n);  n=n+1;  }  while(fabs(cosx(x,n))>1e-8);  printf("%9.8f\n",sum);  return 0;  }  double cosx(double x,int n)  {  double p,q;//  p=pow(x,2*n);  double fact(int n);//  q=fact(2*n);  if(n%2)  return(-p/q);  else  return(p/q);  }  double fact(int n)//  {  double ans=1; int i;  if(n<=1)  return 1;  for(i=1;i<=n; ++i)  ans*=i;  return ans;  }  cosx函数即反余弦函数  函数y=cosx(x∈[0,π])的反函数叫做反余弦函数,  记作y=arccosx(x∈[-1,1]).&nbsp;

慕码人2483693

错误有两类:1. scanf("%f",&x);由于x是double型,所以应改成scanf("%lf",&x);2. fact()和cosx()中用int型来计算n!会很快溢出,应改为double型改后如下,运行正确。#include<stdio.h>#include<math.h>int main(){int n=0;double x,sum=0;printf("please enter x:");scanf("%lf",&x);//double cosx(double x,int n);do{sum=sum+cosx(x,n);n=n+1;}while(fabs(cosx(x,n))>1e-8);printf("%9.8f\n",sum);return 0;}double cosx(double x,int n){double p,q;//p=pow(x,2*n);double fact(int n);//q=fact(2*n);if(n%2)return(-p/q);elsereturn(p/q);}double fact(int n)//{double ans=1; int i;if(n<=1)&nbsp;&nbsp;return 1;for(i=1;i<=n; ++i)ans*=i;return ans;}
随时随地看视频慕课网APP
我要回答