C语言程序设计,计算π的近似值
公式是2*(2^2/1*3)*......*(2n)^2/(2n+1)(2n-1)#include<stdio.h>main(){intn=1,t=2;floata=1;...
公式是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);
}
这是我的程序,在进去循环体一次后就退出了,求指点 展开
#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);
}
这是我的程序,在进去循环体一次后就退出了,求指点 展开
6个回答
展开全部
fabs=(1/(i+i+2)); 这里应该是*号
另缺御外这举扮州里涉及到整形数字,最好还是把其中所有正蔽的1,2都写成1.0, 2.0
另缺御外这举扮州里涉及到整形数字,最好还是把其中所有正蔽的1,2都写成1.0, 2.0
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int n=1, t=2 应毕袜该改为float n=1, t=2。早拍整手睁激型时t-(4*n*n)/(4*n*n-1)的结果为整形。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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
#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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼主你好!
错误一: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精确到小数后六位,上面的多次循环,导致最后偏差有点大,我是这样想的!
求大家指正!
错误一: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精确到小数后六位,上面的多次循环,导致最后偏差有点大,我是这样想的!
求大家指正!
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询