用C语言编个程序,求π(派)

一定要快啊,急用
本人没有学过C语言,但是现在特殊情况,必需用C语言完成,希望能把步骤写出来,让我能直接抄到电脑上去!
有追加的哦

利用“正多边形逼近”的方法求出π的近似值

*程序说明与注释
#include<stdio.h>
#include<math.h>
int main()
{
double e=0.1,b=0.5,c,d;
long int i; /*i: 正多边形边数*/
for(i=6;;i*=2) /*正多边形边数加倍*/
{
d=1.0-sqrt(1.0-b*b); /*计算圆内接正多边形的边长*/
b=0.5*sqrt(b*b+d*d);
if(2*i*b-i*e<1e-15) break; /*精度达1e-15则停止计算*/
e=b; /*保存本次正多边形的边长作为下一次精度控制的依据*/
}
printf("pai=%.15lf\n",2*i*b); /*输出π值和正多边形的边数*/
printf("The number of edges of required polygon:%ld\n",i);
}

*问题分析与算法设计
利用“正多边形逼近”的方法求出π值在很早以前就存在,我们的先人祖冲之就是用这种方法在世界上第一个得到精确度达小数点后第6位的π值的。
利用圆内接正六边形边长等于半径的特点将边数翻番,作出正十二边形,求出边长,重复这一过程,就可获得所需精度的π的近似值。
假设单位圆内接多边形的边长为2b,边数为i,则边数加倍后新的正多边形的边长为:
x=√——————
2-2*√———
1-b*b
——————
2
周长为:
y=2 * i * x i:为加倍前的正多边形的边数
温馨提示:答案为网友推荐,仅供参考
第1个回答  2007-11-24
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include <stdio.h>
main ()
{
int x,y;
long i,m=0;
double d,r=32767;
float pi,n=5000000;
srand (time(0));
for(i=0;i<n;i++)
{x=rand();
y=rand();
d=sqrt(x*x+y*y);
if (d<r)
{m=m+1;}
}
printf("m=%d\n",m);
pi=4*m/n;
printf("pi=%f\n",pi);
}
蒙特卡罗方法求圆周率,刚做的。改变n的值可提高精度。程序上算了500万次,得到3.14142本回答被提问者采纳
第2个回答  2007-11-24
楼上的几位程序实在看不懂/
小弟佩服
第3个回答  2007-11-24
百科上搜到的:

#include <cstdlib>
#include <iostream>
#include <fstream>
#define N 20010
using namespace std;
void mult (int *a,int b,int *s)
{
for (int i=N,c=0;i>=0;i--)
{
int y=(*(a+i))*b+c;
c=y/10;
*(s+i)=y%10;
}
}
void divi (int *a,int b,int *s)
{
for (int i=0,c=0;i<=N;i++)
{
int y=(*(a+i))+c*10;
c=y%b;
*(s+i)=y/b;
}
}
void incr(int *a,int *b,int *s)
{
for (int i=N,c=0;i>=0;i--)
{
int y=(*(a+i))+(*(b+i))+c;
c=y/10;
*(s+i)=y%10;
}
}
bool eqs(int *a,int *b)
{
int i=0;
while (((*(a+i))==(*(b+i)))&&(i<=N)) i++;
return i>N;
}
int main(int argc, char *argv[])
{
int lpi[N+1],lls[N+1],lsl[N+1],lp[N+1];

int *pi=lpi,*ls=lls,*sl=lsl,*p=lp;
for (int i=0;i<=N;i++)*(pi+i)=*(ls+i)=*(sl+i)=*(p+i)=0;
memset(pi,0,sizeof(pi));
memset(ls,0,sizeof(ls));
memset(sl,0,sizeof(sl));
memset(p,0,sizeof(p));
*pi=*ls=*sl=1;
for (int i=1;true;i++)
{
mult(ls,i,sl);
divi(sl,2*i+1,ls);
incr(pi,ls,p);
if (eqs(pi,p)) break;
int *t;
t=p;
p=pi;
pi=t;
if (i%50==0) cout << i << " ";
}
cout << endl;
mult(p,2,pi);
ofstream fout("pi.txt");
fout << *pi << ".";
for (int i=1;i<=N;i++)
{
fout << *(pi+i);
if (i%10==0) fout << " ";
if (i%80==0) fout << endl;
}
return EXIT_SUCCESS;
}

参考资料:百度百科

第4个回答  2007-11-24
查高数书 pi有一种利用阶乘计算的方法 用那种方法很容易通过编程实现

相关了解……

你可能感兴趣的内容

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