c语言求e=1+1/1!+1/2!+1/3!+1/4!+......
2个回答
展开全部
问题没说清楚是怎么求,所以这里我决定求第n项的e(n通过控制台输入获取,例如n=3,则e=1+1/1!+1/2!。)。这是我的代码:
#include <stdio.h>
int jiecheng(int n) //阶乘函数(利用递归方式计算)
{
if (n == 1) //递归结束条件,如果n等于1
{
return 1; //返回终值
}
return n * jiecheng(n - 1); //否则继续递归计算
}
int main() //main函数
{
int n, i; //n为第几项,i为for循环的控制变量
scanf("%d", &n); //输入n
double e = 1.0; //声明变量e并初始化
for (i = 2; i <= n; i++) //声明for循环
{
e += 1.0 / jiecheng(i); //e加上当前计算结果(即1/1!,1/2!等)
}
printf("%f", e); //输出e
return 0; //结束程序
}
大部分代码我都做了注释,希望你能理解这个程序。
希望能帮到您。
#include <stdio.h>
int jiecheng(int n) //阶乘函数(利用递归方式计算)
{
if (n == 1) //递归结束条件,如果n等于1
{
return 1; //返回终值
}
return n * jiecheng(n - 1); //否则继续递归计算
}
int main() //main函数
{
int n, i; //n为第几项,i为for循环的控制变量
scanf("%d", &n); //输入n
double e = 1.0; //声明变量e并初始化
for (i = 2; i <= n; i++) //声明for循环
{
e += 1.0 / jiecheng(i); //e加上当前计算结果(即1/1!,1/2!等)
}
printf("%f", e); //输出e
return 0; //结束程序
}
大部分代码我都做了注释,希望你能理解这个程序。
希望能帮到您。
追问
#include
main()
{ int s=1,i=1;
float k=1.0,e=0,n=0;
for(i=1;i9e-100)
n+=k;
else break;
}
e=n+1;
printf("e=%f\n",e);
return 0;
}
追答
第9行有问题。
这里 1/s 是整型运算,因为1和s都为整型,所以这里进行的是整型运算而不是浮点运算。这意味着,返回的也是整型数值(整形运算中,不包含小数,比如1/2=0,3/2=1)。如果想改成浮点运算,就要运用到类型转换。可以这么改:
k=1.0/s;
这样就OK了,因为1.0是double类型,会隐式转换s的值为double类型,这样就进行了浮点运算。顺带一说,我觉得最好这样写:
k=1.0f/s;
就是在1.0后面加一个f,因为k是float类型,所以运算返回最好为float类型而不是double类型。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询