用公式计算e=1+1/1!+1/2!+...+1/n!,精度为0.000001.编写程序求得e的近似值,用C++,不要用C

是e的精度为0.000001,不是1/n!的精度,
有谁能给我一个完整的程序吗

#include <iostream>
#include <vector>
#include <iomanip>   // ç²¾åº¦æŽ§åˆ¶
using namespace std;

int main(){
    double start = 1.0;
    double e = 1.0;
    // 8.0 ç²¾åº¦æŽ§åˆ¶
    for (double i = 1.0; start < pow(10.0, 8.0); i = i + 1){
start *= i;
e += 1.0/start;
    }
    // setprecision(7) ç²¾åº¦æŽ§åˆ¶
    cout << setprecision(7) << e << endl;
    
    system("pause");
    return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-01-09
//#include "stdafx.h"//vc++6.0加上这一行.
#include <iostream>
using namespace std;
int main(void){
    double e,tmp;
    int i;
    for(e=tmp=i=1;tmp>1.0e-6;e+=tmp/=i++);
    cout << "e = " << e << endl;
    return 0;
}

追问

e+=tmp/=i++ 这一句是什么意思啊

追答

tmp=tmp/i;
e=e+tmp;
i++;
的意思。

追问

为什么可以表示成e+=tmp/=i++,好神奇

追答

你看一下C的“自反运算符”或者叫复合运算符的内容。+=就是自反运算符之一,意义是将前变量与后变量(或常量或表达式)相加再将结果赋给前者。-=、/=、*=等都是自反运算符,运算意义由前面那个运算符决定,赋值作用由=决定。使用自反运算符不仅书写方便简练,而且生成的代码也比分立书写的效率高,当然功能是一样的。for(e=tmp=i=1;tmp>1.0e-6;e+=tmp/=i++);分开写就是这样:
for(e=tmp=i=1;tmp>1.0e-6;i++){
tmp=tmp/i;
e=e+tmp;
}

第2个回答  2015-01-08
有谁能给我一个完整
第3个回答  2015-01-09

class eClass{
public: double fune(double a){
int n=1,k=1;
double e1=1,e2=1;
do{
e2=e1;
k*=n;
n++;
e1+=1.0/k;
}while(e1-e2>a);
return e1;
}
};
主函数
eClass e0;
double a,e;
cout<<"输入精度:";
cin>>a;
e=e0.fune(a);
cout<<e<<"\n";
相似回答