C语言编程求圆周率

C语言编程求圆周率,第1张

用的是如图的公式,下面是arctg展开的级数。

这个输出没有写好,一组是10位,如果前面是“0”就会少了,要完善一下。

N是定义 算多少组的,N=1000 时 N10就是10000组,要算到100万位这种算法要好长时间,但是这是最简单的算法之一。

下面分成三个部分,第一是定义数组和

#define N 1000

#include  "mathh"

#include "stringh"

main()

{

auto double a1,b1,b2,c1,d,i=10,q=-10;

auto double n,g,r=100000000000;

static double a[N+1],b[N+1],c[N+1];

auto char str3,str1[15],strs1[11N],p_strs1;

auto long p,j,k=1,m=1;

do {

printf("input p= ");

scanf("%ld",&p);

} while(p<=0 && p>100);

p = p + 1;

b[1]=r200,c[1]=239r;

do

{ q=-q,a1=0,b1=0,c1=0;

for(j=m;j<=p;j++){c1=c[j]+c1r,c[j]=floor(c1/57121),c1=c1-c[j]57121;}

if (c[m]<1e-5) m++;

for(j=k;j<=p;j++){

a1=b[j]+a1r,b[j]=floor(a1/250),a1=a1-b[j]250;

d=b1r+b[j]-c[j],b1=floor(d/i),a[j]=4qb1+a[j];

b1=d-b1i;

}

if (b[k]<=1e-5) {

k++ ;

printf("k=%ld ",k);}

i = i + 2;

}while(m<=p);

do

{ q = -q, a1 = 0,b1 = 0;

for(j=k;j<=p;j++) {

a1=b[j]+a1r,b2=floor(a1/25),b[j]=b2;

a1=a1-b225,d=b2+b1r;

b1=floor(d/i),a[j]=a[j]+4qb1;

b1=d-b1i;

}

if (b[k]<=1e-5) { k++;printf(" k= %ld",k);}

i = i + 2;

}while(k<=p);

printf("\n");

for(j=p;j>=1;j--){g=a[j]+n,n=floor(g/r),a[j]=g-rn;}

for(j=1;j<p;j++) printf("%100f ",a[j]);

str3=strs1;

}

#include<iostream>

#include<cmath>

using namespace std;

int main()

{

int Decimal_Digits = 0;//小数点位数;

const int Side_Length = 1;// 代表我们 设定 圆的半径为1

double TT = 0; //初始化TT;

int Side_Number =9999; // 这是 我通过观察 设定的 初始化为10000边时候 得到的结果 很精确了

const double PI = 3141592654;

double Degree = 0;

double S = 0;

cout<<"请输入小数点位数:"<<endl;

cin>>Decimal_Digits;

for (int i = 0 ; i <=100 ; i ++ ,Side_Number++)

{

Degree = (3600/ Side_Number) / 180 PI;

S = 05 Side_Length Side_Length sin(Degree) Side_Number;

TT = S / (Side_Length Side_Length );

coutprecision(Decimal_Digits);

cout<<"利用割圆法计算TT"<<endl;

cout<<"当多边形边数为"<<Side_Number<<"时"<<" "

"计算的TT值为:"<<endl<<TT<<endl;

}

return 0 ;

}

说实话 如果不知道PI 的值 是 无法利用此方法计算的 这种方法只是来验证,

因为C ++ 中 sin cos 函数 所需要的变量 是 弧度 而不是度数;

我用的是割圆法:

版本 2

程序集 窗口程序集1

子程序 _时钟1_周期事件

局部变量 派, 双精度小数型

局部变量 单位面积, 双精度小数型

局部变量 原面积, 双精度小数型

局部变量 原边长, 双精度小数型

局部变量 边数, 双精度小数型

局部变量 多的面积, 双精度小数型

边数 = 边数 × 2

原边长 = 求次方 (求次方 (原边长 ÷ 2, 2) + 求次方 (1 - 求次方 (1 - 求次方 (原边长 ÷ 2, 2), 05), 2), 05)

原面积 = 原边长 × 求次方 (1 - 求次方 (原边长 ÷ 2, 2), 05) ÷ 2

多的面积 = (1 - 求次方 (1 - 求次方 (原边长 ÷ 2, 2), 05)) × 原边长 ÷ 2

单位面积 = 原面积 + 多的面积

派 = 边数 × 单位面积

编辑框1内容 = 到文本 (派)

编辑框2内容 = 到文本 (边数)

判断开始 (编辑框1内容 = “314159265359”)

时钟1时钟周期 = 0

默认

判断结束

子程序 __启动窗口_创建完毕

原边长 = 1

边数 = 6

时钟1时钟周期 = 10

这个程序只能算到小数点后11位,因为它的双精度小数型变量只能容纳15个半角字符。

算出来后编辑框显示314159265359,这是π的精确到小数点后11位的近似值。此外还能看算到多少边形了(在编辑框2里)。

这个比较出名的程序,三行语句求PI

按公式PI/2 = ∑ (n! / (2n+1)!!) 计算Pi

计算2800项就可以精确到小数点后800位

正常的写法

#include "stdioh"

long b,c,d,e,f[2801];

void main()

{

  for (int i = 0; i < 2800; i++) f[i] = 2000;

  f[2800] = 0;

  for (c = 2800; c > 0; c -= 14) 

  {

    d = 0;

    for (b = c; b > 0; b--) 

    {

      d += f[b]  10000;

      f[b] = d % (2b-1);

      d /= (2b-1);

      if (b > 1)

      d = (b-1);

    }

    printf("%4d", e + d / 10000);

    e = d % 10000;

  }

}

#include<stdioh>

#include<mathh>

int main()

{double pi=1,t=0;

for(;t<19999999;)

{t=sqrt(2+t);

pi=2/t;

}

printf("%lf\n",pi2);

return 0;

}

sub form_load()

dim a,x as integer

dim pi as single

pi=0

for i=1 to 30000

x=((-1)^(i+1))(2i-1)

pi=1/x+pi

next i

print 4pi

end sub

“一定要能算到上千万位!”

你疯了吗?你学过计算机吗?怎么也不可能吧,一个32位pc机,用vb算? 用这个公式?

用牛顿迭代,vb仅能算到精确14位,速度还行,你这算法算6位电脑就卡爆了。c语言能好些,但也好不到哪去。

double s = 0;//面积

double pi = 0;//圆周率

double d=200;//直径(值越大圆周率越精确)

double r = d/2;//半径

for(int i=1;i<=d;i++){

for(int j=1;j<=d;j++){

if((i-r)(i-r)+(j-r)(j-r)<=rr){

s++;

}

}

}

pi = s/(rr);

以上就是关于C语言编程求圆周率全部的内容,包括:C语言编程求圆周率、求用割圆法求圆周率的C++程序源代码圆周率的位数由输入变量的值来确定。、用易语言怎么写算圆周率的代码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/zz/9433464.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存