鱼C论坛

 找回密码
 立即注册
查看: 3736|回复: 13

关于C语言的一道题

[复制链接]
发表于 2013-11-12 15:06:59 | 显示全部楼层 |阅读模式
1鱼币
4.jpg 求大神!

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-11-12 20:06:44 | 显示全部楼层
目前还不会阿。:cry
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 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=%d  pi=%f\n",n,pi);
}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-11-12 21:52:54 | 显示全部楼层
n是和的个数,越大越精确  pi是π/2  想得到π,再乘个2就行了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-11-13 00:09:08 | 显示全部楼层
效果截图:
1.png

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

  2. //求圆周率近似值函数,n越大越准确
  3. double CalPai(int n)
  4. {
  5.         double sum;
  6.         if(n<2)
  7.         {
  8.                 return 1*2;
  9.         }
  10.         if(n<3)
  11.         {
  12.                 return (1+1.0/3)*2;
  13.         }
  14.         if(3==n)
  15.         {
  16.                 return (1+1.0/3+(1.0/3)*(2.0/5))*2;
  17.         }

  18.         sum=1+1.0/3+(1.0/3)*(2.0/5);//前3项和
  19.         double a=2;        //分子
  20.         double b=5;        //分母
  21.         double ab=(1.0/3)*(2.0/5);//第三项
  22.         for(int i=3;i<n;i++)
  23.         {
  24.                 ab*=(a+1)/(b+2);
  25.                 sum+=ab;
  26.                 a++;        //分子加1
  27.                 b+=2;        //分母加2
  28.         }
  29.         return sum*2;
  30. }

  31. void main ()
  32. {

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

  39. }
复制代码


小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-11-13 10:31:23 | 显示全部楼层
版主帮我选最佳答案吧:dizzy:
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-11-13 12:04:08 | 显示全部楼层
  1.         printf("%-6d项和时,计算圆周率结果为:%.20f\n",1,CalPai(1));
  2.         printf("%-6d项和时,计算圆周率结果为:%.20f\n",2,CalPai(2));
  3.         printf("%-6d项和时,计算圆周率结果为:%.20f\n",3,CalPai(3));
  4.         printf("%-6d项和时,计算圆周率结果为:%.20f\n",10,CalPai(10));
  5.         printf("%-6d项和时,计算圆周率结果为:%.20f\n",10000,CalPai(10000));
  6.         printf("%-6d项和时,计算圆周率结果为:%.20f\n",99999999,CalPai(99999999));
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-11-13 15:44:23 | 显示全部楼层
  1. void main()
  2. {
  3.       int a = 1.0, b = 3.0,
  4.            j = 1.0\3.0, pi = 2.0;
  5.          printf("输入一个数");
  6.     scanf("%d", &n);
  7.     float p (int n);
  8.     pir= p(n);
  9.    printf("pi = %f",pir);
  10. }
  11. if (n = 1)
  12. {
  13.      pir= pi;
  14. }
  15. float p (int n)
  16. {
  17.      for(int i = 2; i<=n;++i)
  18.         {
  19.                  j *= a\b;
  20.                 pir += 2*j;
  21.                 ++a, b += 2;
  22.                return pir;
  23.         }
  24.        retrun p;
  25. }我身边占时还没有编译器,也不知道对不对,请哪位大神帮忙看看哪个地方错了。
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-11-13 17:24:57 | 显示全部楼层
我的求助里面有道类似的题,你可以去参考一下,
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-11-13 21:22:48 | 显示全部楼层
顶一个{:1_1:}{:1_1:}{:1_1:}{:1_1:}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-11-14 21:06:56 | 显示全部楼层
此题好像可以用一个递归函数来实现,这样代码量或许就会少点。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 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 这样增长的

所以你这个题是错误的
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 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);
}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-12-1 12:46:01 | 显示全部楼层
怎么感觉跟高数课本上的有道题很像呢
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-4 04:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表