C语言编一个计算e的值的程序要求为最后一项的值时为止,小于0.0000001,我编的程序是这样的,但是不对,求分析与修改.#include#include#define EPSILON 1e-6int main(){double s,e,n,z,m,t,i;t=0.000000;m=1.000000;s=1.00000
来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/28 11:14:13
C语言编一个计算e的值的程序要求为最后一项的值时为止,小于0.0000001,我编的程序是这样的,但是不对,求分析与修改.#include#include#define EPSILON 1e-6int main(){double s,e,n,z,m,t,i;t=0.000000;m=1.000000;s=1.00000
C语言编一个计算e的值的程序
要求为最后一项的值时为止,小于0.0000001,我编的程序是这样的,但是不对,求分析与修改.
#include
#include
#define EPSILON 1e-6
int main()
{
double s,e,n,z,m,t,i;
t=0.000000;
m=1.000000;
s=1.000000;
z=1.000000;
for(i=1.000000;n>=EPSILON;++i)
{
z=z*i;
n=m/z;
t=t+n;
}
e=t+1.000000;
printf("e=%.6lf",e);
return 0;
}
再问一个问题,就是最后输出时用%f与%lf的区别,都是对应double型的.
C语言编一个计算e的值的程序要求为最后一项的值时为止,小于0.0000001,我编的程序是这样的,但是不对,求分析与修改.#include#include#define EPSILON 1e-6int main(){double s,e,n,z,m,t,i;t=0.000000;m=1.000000;s=1.00000
// double ?
for(i=1.000000;n>=EPSILON;++i)
{
z=z*i; // 阶乘
n=m/z; // 求反
t=t+n; // 求和
}
你是想表达这个意思吧
double s,e,n,z,m,t,i; // 1. 不需要全部使用double的// double是处理小数位数多的时候进行使用的
// double和float都是一个相似值
t=0.000000;
m=1.000000;
s=1.000000;
z=1.000000;
for(i=1.000000;n>=EPSILON;++i) // n的初始化呢? n什么时候才能够 >= EPSILON
// 所以你这里应该使用do while的结构,而不是 for
{
z=z*i; // 这里的问题,就是我前面标示的,
//long long会更精确一点,而1.0000001 * 1.0000002的结果会对下面有影响的
n=m/z; // m 始终没有改变过,没有必要使用一个变量:)
// n = double(1) / z;
t=t+n; // t += n; 个人习惯
}
e=t+1.000000;
printf("e=%.6lf",e);
return 0;