一个足以让你吐血的计算400位pi的C程序:
创新互联专注于嵩明企业网站建设,成都响应式网站建设公司,成都商城网站开发。嵩明网站建设公司,为嵩明等地区提供建站服务。全流程定制网站建设,专业设计,全程项目跟踪,创新互联专业和态度为您提供的服务
int a=10000, b, c=2800, d, e, f[2801], g;
main() {
for(; b-c; f[b++]=a/5);
for(; d=0,g=c*2; c -=14,printf("%.4d",e+d/a),e=d%a)
for(b=c; d+=f[b]*a,f[b]=d%--g,d/=g--,--b; d*=b);
}
理论上只要用大数算法扩了就能一直算下去。我在Palm上面实现的那个就是基于这个算法,没有扩,算到4680位(受到Palm平台32k数组的长度限制)。
这个程序的特点是:你抱着想看看算pi原理的希望来读这个程序,结果发现就是看了也还是看不懂~~
转的,但是百度知道不允许贴地址哦
第二种:
用C语言编程π*π/6=1/1*1+1/2*2+1/3*3+。。。+1/n*n
#includestdio.h
#includemath.h
main()
{
int n,i;
double s=0;
printf("输入n:");
scanf("%d",n);
for(i=1;i=n;i++)
{s=s+1.0/(i*i);
}
printf("pai=%f",sqrt(s*6));
}
第三种:
求pi=(1+1/(1*3))*(1+1/(3*5))*(1+1/(5*7))…………直到最后一项的分数小于10的负6次方为止。
#includestdio.h
#includemath.h
#includestdlib.h
void main()
{
double pi,i,j,sigh,term;
i=1,j=3,sigh=1,term=1;
while(sigh1e-6)
{
sigh=1/(i*j);
term=(1+sigh)*term;
i=i+2;
j=j+2;
}
pi=term;
printf("pi=%f\n",pi);
}
C 语言是一种编译型语言, 每个程式执行时都从 main 函数开始执行, 所以每个 C 语言程序都必须包含一个且只能包含一个 main 函数, C 语言的语句每条语句以 ";" 作为结束符, 程式的写法可以不拘泥与格式, 但是要想写出好程式, 需要尽可能的每条语句分开, 写出自己和别人都能看懂的程式, C 语言本身提供了一些标准的函数库, 用来简化 C 程序的编写, 例如: stdio.h, 是 Standard Input Output (标准输入输出库), math.h 是 Math (数学函数库), 函数库所有定义的函数都会在 head (头文件) ".h" 中声明, 在使用标准头文件时, 要使用 C 语言编译器预处理关键字 #include (包含), C 语言的程序会在编译自动加入根据头文件的声明连接你在编程中使用的库函数, C 语言提供五种不同类型的数据类型, int (integter 整数型), float (浮点型), char (character 字符型), void (无值型), bool (boolean 布尔型), 提供基本的判断语句 if ... else, 循环结构 for, while, do.. while 和多分枝结构 switch, C 语言还提供两种写给别人帮助理解方式注释方式, 第一种是使用 // (双斜杠) 后面加注释内容, 注释内容仅限于本行的结束, 第二种是 /* ... */ (省略号中间是注释的内容) (单斜杠加星号开始, 星号加单斜杠结束) 的块注释.
以上的给你大概了解, 下面是对你的程式的等价变化, 和注释
#include stdio.h // 包含标注输入输出头文件
#include math.h // 包含数学函数头文件
int main() // main 函数, 是函数执行进入点
{
int s = 1; // 定义一个整数型变量 s, 并赋值初始值 1
float n, t, pi; // 定义三个浮点型变量 n, t, pi, 多个相同的定义可以写在一起用逗号作为分隔符
t = 1; // 给浮点型变量 t 赋值初始值 1
pi = 0; // 给浮点型变量 pi 赋值初始值 0
n = 1.0; // 给浮点型变量 n 赋值初始值 1
/* 下面的 fabs(t) 是调用 math 函数库里面的去绝对值函数, 这个值和1e-6 (表示1.0乘以10负六次方), 表示一个很小的值, 浮点数比较时, 和很小的数相比, 表示近似等于 0, while 是循环语句, 是下面的大括号里面的是否执行的条件
*/
while (fabs(t) 1e-6)
{
pi = pi+t; // 将 pi 原来值加上 t, 所得值再赋值给 pi, 第一次执行, t 就是 1
n = n+2; // 和上面的相同的含义
s = -s; // 取 s 原值的相反数, 再赋值给 s
t = s / n; // t 取新的值, 作为下次循环的判断条件, 给下一次次执行 t 作预备
}
pi = pi * 4; // 以上计算的是π/4的值, 乘以4的得到π
printf("pi=%10.6f\n", pi); // 调用标准输出函数printf, 参数"pi=%10.6f\n" 是格式化输出的格式
return 0; // 表示程序执行成功
}
以上只是大概的解释, 在看看书, 了解吧
#include stdio.h
#include math.h
int main(){
double pi=0,result;
int i=1;
int s=-1;
do{
s*=-1;
result=1.0/i*s;
i+=2;
pi+=result;
}while(fabs(result)0.000001);
printf("pi=%10.4lf\n",pi*4);
return 0;
}
楼主这个方法应当用随机数来做。
思想:
在0到1之间取两个随机数,如果这两个随机数(x,y)在四分之一圆内,就加一。
最后用落在圆内的点数,除以总点数,就是PI了。
#include
stdio.h
#include
conio.h
#include
stdlib.h
#include
time.h
#define
N
300000
main()
{
long
i,n=0;
float
x,y,pi;
srand(time(NULL));
for
(i=0;iN;i++)
{
x=1.0*rand()/RAND_MAX;
y=1.0*rand()/RAND_MAX;
if
(x*x+y*y1)
n++;
}
pi=4.0*n/N;
printf("pi=%f\n",pi);
getch();
}
if (n0==0fabs(x-3.14)0.000001) //用绝对值函数 include"math.h"
不用的话,你那几个判断有问题,要改成下面这样
if (n0==0((x=3.14(x-3.14)0.000001 )||(x3.14(3.14-x)0.000001 )) ) //