C语言求圆周率pi、求自然对数e

第二问无法输出
求近似值,菜单包括:求圆周率pi、求自然对数e。
①用p/4»1-1/3+1/5-1/7+……的公式求p的近似值,直到最后一项的绝对值小于10-6为止。
②用e=1+1/1!+1/2!+1/3!+ ……的公式求e的近似值,直到最后一项的绝对值小于10-6为止。

#include <stdio.h>
float x()
{
double pai,m,n;
pai=1-1/3.0+1/5.0;
for(m=7,n=9;m<1000000||n<1000000;m+=4,n+=4)
pai=pai-1/m+1/n;
pai=4*pai;
printf("%f\n",pai);
}
float y(long i)
{
float e;
if(i==0||i==1) e=1;
else e=y(i-1)*i;
return (e);
}
float z()
{
long j;
double f;
f=1+1/y(1);
for(j=2;j<10000;j++)
f=f+1/y(j);
printf("%f\n",f);
}
main()
{
x();
z();
}

第1个回答  2013-01-04
这两个计算,类型差不多,一个循环搞定,判断循环跳出的条件就是计算的哪一项小于1e-6
第一个涉及到一个正负号的问题,用一个flag每次乘以-1来做
第二个涉及到一个阶乘,上一个阶乘再乘以这次循环的变量i刚好是这一次的阶乘,那么用一个变量s来存储每次的阶乘,

只给你写出中心代码

int flag=1;
float p=1;
for(i=3;1.0/i>0.000001;i+=2)
{
flag*=-1; //这里变化正负号
p+=flag*1.0/i;

}

int s=1;
int i;
float e=1;
for(i=1;1.0/s>0.000001;i++)
{
s*=i; //这个就是计算阶乘的
e+=1.0/s;
}
第2个回答  2013-01-04
我给你写了个程序,请参考:
#include <stdio.h>
float x(){ //求π的近似值
float pai=0.0;
float i=1,d=1;
while(1/i>=1e-6)
{
pai=pai+d/i;
d=d*(-1);
i=i+2;
}
pai=pai*4;
printf("%10.8f\n",pai);
return 0;
}
long long fact(int n) //求阶乘
{
int i;
long long s = 1;
for(i=1;i<=n;i++)
s = s*i;
return s;
}

float z(){ //求e的近似值
int n=1;
double s = 1.0 , s1 = 1.0;
while(s1 > 1s-6)
{
s1 = s1 / fun(n);
n++;
s += s1;
}
printf("%lf\n", s);
return 0;
}
main(){
x();
z();
}
第3个回答  2013-01-04
//先求阶乘
int fun(int m)
{
int i , n = 1;
for(i = 1 ; i <= m ; i++);
n = n * i;
return n;
}
//再求和
double e()
{
int i = 1 , j ;
double e = 1.0 , m = 1.0;
while(m > 1e-6)
{
m = m / fun(i);
i++;
e += m;
}
return e;
}

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网