编写程序:计算π的近似值,π的计算公式为

π=2×(2×2/1×3)×(4×4/3×5)×(6×6/5×7)×……[2n×2n/(2n-1)×(2n+1)]注:分别输出当n为10、100、1000时的计算结果,n... π=2×(2×2/1×3)×(4×4/3×5)×(6×6/5×7)×……[2n×2n/(2n-1)×(2n+1)]注:分别输出当 n 为10、100、1000时的计算结果,n值由键盘输入。问题补充: #include<stdio.h>main(){ int n,i,t; float sum; printf("请输入n的值\n"); scanf("%d",&n); sum=2; i=1; t=1; while(i<n) { t=t*(2*i)*(2*i)/(2*i-1)*(2*i+1); sum=sum*t; i=i+1; } printf("π的值=%f\n",sum);}这个程序计算出来的值为什么不对呀!!π的值离3.1415926差很远!! 展开
 我来答
博学小赵爱生活
高能答主

2019-10-30 · 专注于食品生活科技行业
博学小赵爱生活
采纳数:456 获赞数:111888

向TA提问 私信TA
展开全部

#include<stdio.h> 

main() 

{ int n,i; double t,

sum;/*1*/ 

printf("请输入n的值\n"); 

scanf("%d",&n); 

sum=2; i=1; t=2;/*2*/ 

while(i<n) { t=t*(2*i)*(2*i)/(2*i-1)/(2*i+1);

/*3*/ // sum=sum*t; i=i+1; } 

printf("π的值=%f\n",t);/*4*/ }

或。

写一个Java程序来实现蒙特卡洛法求π的近似值:

import java.io.BufferedReader;

import java.io.InputStreamReader;

public class MonteCarloPi {

public static void main(String[] args) throws Exception{

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

System.out.print("How many darts shoud I toss at the board?\n");

String s = br.readLine();

int numberOfDarts = Integer.parseInt(s.trim());

double radius = 1.0;

Dartboard d = new Dartboard(radius);

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

Toss t = Toss.getRandom(radius);

d.strike(t);

}

double fractionIn = d.getFractionIn();

double pi = 4.0 * fractionIn;

System.out.println("Pi is approximately "+pi);

}

}

 class Dartboard{

private double radius;

private int insideCircle, outsideCircle;

public Dartboard(double radius){

this.radius = radius;

insideCircle = 0;

outsideCircle = 0;

}

public void strike(Toss toss){

double x = toss.getX();

double y = toss.getY();

if(Math.sqrt(x*x + y*y) < radius)

insideCircle++;

else

outsideCircle++;

}

public double getFractionIn() {

double total = (double) (insideCircle + outsideCircle);

return (double) insideCircle/total;

}

}

class Toss{

private double x,y;

public Toss(double x, double y){

this.x = x;

this.y = y;

}

public double getX(){return x;}

public double getY(){return y;}

public static Toss getRandom(double radius){

double x,y;

double size = Math.random();

double sign = Math.random();

size = size * radius;

if(sign > 0.5)

x = size;

else

x = -size;

size = Math.random();

sign = Math.random();

size = size * radius;

if(sign > 0.5)

y = size;

else

y = -size;

return new Toss(x,y);

}

}

扩展资料:

C语言:用循环结构分别编写程序

#include

void main()

{

\x09int n=1;

\x09float temp;

\x09float sum=0;

\x09do

\x09{

\x09\x09temp=(float)1/(2*n-1);

\x09\x09if(n%2==1)

\x09\x09\x09sum+=temp;

\x09\x09else

\x09\x09\x09sum-=temp;

\x09\x09n++;

\x09}while(temp>=0.000001);

\x09printf("Pi=%f\n",sum*4);

}

匿名用户
推荐于2017-11-25
展开全部
公式没有问题,每项到最后会趋向1的,但是你的代码里错了好几处!现在这个代码运行没有问题了,你看看: #include<stdio.h>main()
{
int n,i;
float sum;
printf("请输入n的值\n");
scanf("%d",&n);
sum=2;
i=1;
while(i<n)
{ // 你的t是没有用的,而且你用了int肯定完蛋了,另外注意除法!!!
sum=sum*(2*i)*(2*i)/(2*i-1)/(2*i+1); i=i+1;
}
printf("π的值=%f\n",sum);
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-11-09
展开全部
这个公式有问题啊,我怎么看是非收敛的啊?越来越大啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式