C语言程序设计,计算π的近似值

公式是2*(2^2/1*3)*......*(2n)^2/(2n+1)(2n-1)
#include<stdio.h>
main()
{
int n=1,t=2; float a=1;
while(t-(4*n*n)/(4*n*n-1))>=1e-6)
{ a=a*t;
t=(4*n*n)/(4*n*n-1);
n++; }
printf("%f ",a);
}
这是我的程序,在进去循环体一次后就退出了,求指点

算法错误。程序思路非常混乱。n++只一次,并没有循环,那么一开始计算x0时n=1,以后每次计算x0的值时n都等于2。而计算公式是要对n进行累加循环的。

#include <stdio.h>
void main(){
double i,k=1;
for(i=1;k*(i*2*i*2/((i*2-1)*(i*2+1))-1)>=1e-6;i++)
k*=i*2*i*2/((i*2-1)*(i*2+1));
printf("PI=%.2lf",k*2);
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-12-09
fabs=(1/(i+i+2)); 这里应该是*号

另外这里涉及到整形数字,最好还是把其中所有的1,2都写成1.0, 2.0
第2个回答  2013-10-24
int n=1, t=2 应该改为float n=1, t=2。整型时t-(4*n*n)/(4*n*n-1)的结果为整形。
第3个回答  2011-11-14
#include <stdio.h>
#include <stdlib.h>
int main()
{ float sum=0.0;float i=1,d=1;
while(1/i>=1e-6)
{
sum=sum+d/i;
d=d*(-1);
i=i+2;
}
sum=sum*4;
printf("%10.8f\n",sum);

system("pause");
return 0;
}

输出结果为:3.14159369
第4个回答  推荐于2017-10-06
楼主你好!
错误一:while(t-(4*n*n)/(4*n*n-1))>=1e-6)里面少了一个左括号;
错误二:主要你是float和int混合在一起计算,特别你到了t-(4*n*n)/(4*n*n-1)和 t=(4*n*n)/(4*n*n-1);这两步,相当有问题,结果并不是你想象那样是个带6位的小数,而是得到整数!第一次n=1时候;t-(4*n*n)/(4*n*n-1)=1条件成立,所以进入循环,a=2.000000,当t=(4*n*n)/(4*n*n-1),计算后t为1,,n++为2;第二次到t-(4*n*n)/(4*n*n-1)=0,条件不成立,跳出循环,所以为什么a为2.000000原因!
下面是我改了的!
#include<stdio.h>
int main()
{
int n=1;
float a=1.0,t=2.0;
while((t-(4.0*n*n)/(4.0*n*n-1.0))>=1e-6)
{
a=a*t;
t=(4.0*n*n)/(4.0*n*n-1.0);
n++; }
printf("%f ",a);
}
结果为3.131604
算是接近π吧,偏差的原因,我估计是float精确到小数后六位,上面的多次循环,导致最后偏差有点大,我是这样想的!
求大家指正!本回答被提问者采纳

C语言怎么求π近似值?
C代码和运行结果如下:可见在给定精度下,输出π的近似值为3.141393,望采纳~附源码:include <stdio.h> define E 1e-4 int main() { double pi = 0;int i, sign = 1; \/\/ sign表示正负号 for (i = 1; 1.0 \/ i >= E; i += 2) { pi += sign * 1.0 \/ i;sign = -si...

C语言编程有公式 可以计算π的近似值。求前后两次迭代结果π 之差的...
int n = 1;double pi = 2.0 * 2 * 2\/3; \/\/ n=1时pi的初值 double e; \/\/ 精度 scanf("%lf", &e);while (1) { ++n;int m = 2 * n;double pn = pi * m \/ (m - 1) * m \/ (m + 1);if (pn - pi < e) { pi = pn;break;} pi = pn;} printf("n=%d...

c语言面试题-求π的近似值
编写一个C程序,用来求出π的近似值。题目分析:求π的方法很多,这里两种最为常用的求π的方法。方法:利用“正多边形逼近”法求π。“正多边形逼近” 法求π的核心思想是极限的思想。假设一个直径d为1的圆,只要求出该圆的周长C,就可以通过π=C\/d的方法求出π的值。所以关键是求出该圆的周长...

C语言程序设计,计算π的近似值
算法错误。程序思路非常混乱。n++只一次,并没有循环,那么一开始计算x0时n=1,以后每次计算x0的值时n都等于2。而计算公式是要对n进行累加循环的。include <stdio.h>void main(){double i,k=1;for(i=1;k*(i*2*i*2\/((i*2-1)*(i*2+1))-1)>=1e-6;i++)k*=i*2*i*2\/((i...

用C语言求π的近似值
循环体里面的公式有点问题,我重新写了一下,代码如下:void main(){ double i, pi;i=1.0,pi=0.0;while (fabs(1.0\/i) >= 1e-6){ pi=(pi + pow(-1.0,i+1)\/(2*i-1));i++;} printf("pi=%f\\n",pi* 4);system("pause");} 注意输出的结果是pi*4,望采纳!

C语言编程计算出π的值 最好有三种方法!! 急求 好人一生平安啊_百度知 ...
我只说说π是怎么近似计算出来的,大一应该学过高数,可以知道:tan π\/ 4 =1,从而π=4*arctan1,应用泰勒公式将arctan(x)展开,就可以得到 代入x=1得 把这展开式展开,直到最后一项的绝对值小于1e-6为止。下面是C语言递归实现:include<stdio.h> include<math.h> void main(){ float fuc(...

用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=...

C语言程序设计,计算π的近似值
0;while((t-(4.0*n*n)\/(4.0*n*n-1.0))>=1e-6){ a=a*t;t=(4.0*n*n)\/(4.0*n*n-1.0);n++; } printf("%f ",a);} 结果为3.131604 算是接近π吧,偏差的原因,我估计是float精确到小数后六位,上面的多次循环,导致最后偏差有点大,我是这样想的!求大家指正!

c语言编程,求π的近似值
include <stdio.h> include <math.h> int main(){ int x,z;float y;y=0;z=0;for(x=1;fabs(1.0\/x)>1e-6;x+=2){ z=z+1;if(z%2!=0){ y=y+1.0\/x;} else { y=y-1.0\/x;} } y=y*4;printf("π=%10.6f\\n",y);return 0;} ...

c语言 计算π的近似值
include <stdio.h> include <stdlib.h> int main(){ float sum=0.0;float i=1,d=1;while(1\/i>=1e-6){ sum=sum+d\/i;d=d*(-1);i=i+2;} sum=sum*4;printf("%10.8f\\n",sum);system("pause");return 0;} 输出结果为:3.14159369 ...

相似回答