liwenhao96 发表于 2013-11-12 15:06:59

关于C语言的一道题

求大神!

22222雄 发表于 2013-11-12 20:06:44

目前还不会阿。:cry

flame123456 发表于 2013-11-12 21:47:53

#include<stdio.h>
void main()
{
        int n,i=1,b;
        float pi=0,t,a=1;
        printf("n=");
        scanf("%d",&n);
    while(i<=n)
        {
                pi=pi+a;
                ++i;
                b=1+2*(i-1);
                t=(i-1)*1.0/b;
                a=a*t;
        }
        printf("n=%dpi=%f\n",n,pi);
}

flame123456 发表于 2013-11-12 21:52:54

n是和的个数,越大越精确pi是π/2想得到π,再乘个2就行了

friendan 发表于 2013-11-13 00:09:08

效果截图:


程序代码如下:
#include <stdio.h>

//求圆周率近似值函数,n越大越准确
double CalPai(int n)
{
        double sum;
        if(n<2)
        {
                return 1*2;
        }
        if(n<3)
        {
                return (1+1.0/3)*2;
        }
        if(3==n)
        {
                return (1+1.0/3+(1.0/3)*(2.0/5))*2;
        }

        sum=1+1.0/3+(1.0/3)*(2.0/5);//前3项和
        double a=2;        //分子
        double b=5;        //分母
        double ab=(1.0/3)*(2.0/5);//第三项
        for(int i=3;i<n;i++)
        {
                ab*=(a+1)/(b+2);
                sum+=ab;
                a++;        //分子加1
                b+=2;        //分母加2
        }
        return sum*2;
}

void main ()
{

        printf("%-6d项和时,计算圆周率结果为:%f\n",1,CalPai(1));
        printf("%-6d项和时,计算圆周率结果为:%f\n",2,CalPai(2));
        printf("%-6d项和时,计算圆周率结果为:%f\n",3,CalPai(3));
        printf("%-6d项和时,计算圆周率结果为:%f\n",10,CalPai(10));
        printf("%-6d项和时,计算圆周率结果为:%f\n",10000,CalPai(10000));
        printf("%-6d项和时,计算圆周率结果为:%f\n",99999999,CalPai(99999999));

}

liwenhao96 发表于 2013-11-13 10:31:23

版主帮我选最佳答案吧:dizzy:

liufei_vip 发表于 2013-11-13 12:04:08

friendan 发表于 2013-11-13 00:09 static/image/common/back.gif
效果截图:




        printf("%-6d项和时,计算圆周率结果为:%.20f\n",1,CalPai(1));
        printf("%-6d项和时,计算圆周率结果为:%.20f\n",2,CalPai(2));
        printf("%-6d项和时,计算圆周率结果为:%.20f\n",3,CalPai(3));
        printf("%-6d项和时,计算圆周率结果为:%.20f\n",10,CalPai(10));
        printf("%-6d项和时,计算圆周率结果为:%.20f\n",10000,CalPai(10000));
        printf("%-6d项和时,计算圆周率结果为:%.20f\n",99999999,CalPai(99999999));

18326638710 发表于 2013-11-13 15:44:23

void main()
{
      int a = 1.0, b = 3.0,
         j = 1.0\3.0, pi = 2.0;
         printf("输入一个数");
    scanf("%d", &n);
    float p (int n);
    pir= p(n);
   printf("pi = %f",pir);
}
if (n = 1)
{
   pir= pi;
}
float p (int n)
{
   for(int i = 2; i<=n;++i)
      {
               j *= a\b;
                pir += 2*j;
                ++a, b += 2;
               return pir;
      }
       retrun p;
}我身边占时还没有编译器,也不知道对不对,请哪位大神帮忙看看哪个地方错了。

cainiao367 发表于 2013-11-13 17:24:57

我的求助里面有道类似的题,你可以去参考一下,

夏七夕 发表于 2013-11-13 21:22:48

顶一个{:1_1:}{:1_1:}{:1_1:}{:1_1:}

maverick 发表于 2013-11-14 21:06:56

此题好像可以用一个递归函数来实现,这样代码量或许就会少点。

cyshhm 发表于 2013-11-16 15:08:44

本帖最后由 cyshhm 于 2013-11-16 15:15 编辑

楼主你的题是错的 你的分子增加 明显快于 分母 后面加的数字会不断怎大

你这个计算π的公司是错的
你这个书上的题印错了 是盗版的吧

我记得以前我做题的时候 计算π 是一个加一个减

分子所乘的数是1 1 2 3 5 8 13 21这样增长
分母是1 3 5 7 9 这样增长的

所以你这个题是错误的

liwenhao96 发表于 2013-11-23 18:53:39

#include<stdio.h>
void main()
{
      int n,i=1;
      double pi=0,t,a=1,b;
      printf("n=");
      scanf("%d",&n);
    while(i<=n)
      {
                pi=pi+a;
                b=1+2*i;
                t=i/b;
                a=a*t;
                                i+=1;
      }
      printf("pi=%lf\n",pi);
}

清秋 发表于 2013-12-1 12:46:01

怎么感觉跟高数课本上的有道题很像呢
页: [1]
查看完整版本: 关于C语言的一道题