展开式求和:s=(x^0)/0!+(x^1)/1!(x^2)/2!+.到最后一项的绝对值小于0.00001,结果保留四位小数。
#include
#include
int fact(int n)
{
double result;
if(n==1||n==0)
{
result=1;
}else
{
result=n*fact(n-1);
}
return result;
}
int main(void)
{
int i=0;
double k,sum=0,x;
printf("Enter x:");
scanf("%d",&x);
k=(pow(x,i))/fact(i);
while(fabs(k)>=0.00001)
{
sum+=k;
i++;
k=(pow(x,i))/fact(i);
}
printf("s=1+x+x^2/2!+....=%.4lf\n",sum);
return 0;
}
不管输什么x,结果都不变,大家帮我看看那出错了
应该是因为scanf()函数的格式转换符不对和fact函数的返回值的数据类型不对,理由如下:
因为x为double类型,所以需要把scanf()函数里的格式转换符%d改为%lf;
然后把fact函数的返回值换为double类型的原因是,因为阶乘的结果会很大,可能会超过int类型的取值范围,所以改为double更合适。
修改如下:
#include<stdio.h>
#include<math.h>
double fact(int n)
{
double result;
if(n==1||n==0)
{
result=1;
}else
{
result=n*fact(n-1);
}
return result;
}
int main(void)
{
int i=0;
double k,sum=0,x;
printf("Enter x:");
scanf("%lf",&x);
k=(pow(x,i))/fact(i);
// printf("x=%d,pow(10,1)=%f\n ",x,pow(10,1));
//printf("first,pow(%d,%d)=%f,fact(%d)=%f, k=%f\n",x,i,pow(x,i),i,fact(i),k);
while(fabs(k)>=0.00001)
{
sum+=k;
i++;
k=(pow(x,i))/fact(i);
// printf("pow(x,i)=%f\n",pow(x,i));
// printf("第%d次, k=%f\n",i+1,k);
}
printf("s=1+x+x^2/2!+....=%.4lf\n",sum);
return 0;
}
#include<stdio.h>
#include<math.h>
int fact(int n)
{
double result;
if(n==1||n==0)
{
return result=1; // 加 return
}else
{
result=n*fact(n-1);
}
// return result;不需要,if 和 else 已经有了
}
int main(void)
{
int i=0;
double k,sum=0,x;
printf("Enter x:");
scanf("%d",&x);
k=(pow(x,i))/fact(i);
while(fabs(k)>=0.00001)
{
sum+=k;
i++;
k=(pow(x,i))/fact(i);
}
printf("s=1+x+x^2/2!+....=%.4f\n",sum);//输出用 %.4f
// return 0; int main(void) 就不需要了 ,如果是 int main() 就需要返回值
}
要改的太多了,你先看看这个吧
#include<stdio.h>
#include<math.h>
double fact(int n)//定义fact()即阶乘,看起来更方便清楚
{
double sum=1;//叠乘设一,叠加设零
if(n==0){
return sum=0;
}
else{
while(n>0){//循环成立条件
sum=sum*n;
n--;
}//从n开始叠乘,n!=n*(n-1)*(n-2)*。。。。*1
return sum;//返回到原值,刚才设什么返回什么,这边不能return 0
}
}
void main()
{
double fact(int n);
int i;
double x,s;
while(scanf("%lf",&x)!=EOF)
{
i=1;
s=0;
while(pow(x,i)*1.0/fact(i)>=0.00001)//满足成立条件,前提
{
s+=pow(x,i)*1.0/fact(i);//即s=s+pow(x,i)*1.0/fact(i)
i++;//1,2,3数字不断增大
}//本次循环结束,要输出s的值
printf("%.4f",s);
}
}