标题:近似求PI
只看楼主
黑暗骑士5D
Rank: 1
等 级:新手上路
帖 子:89
专家分:0
注 册:2019-11-6
结帖率:100%
 问题点数:0 回复次数:4 
近似求PI
本题要求编写程序,根据下式求π的近似值,直到最后一项小于给定精度eps。

输入格式:
输入在一行中给出精度eps,可以使用以下语句来读输入:
scanf("%le", &eps);
输出格式:
在一行内,按照以下格式输出π的近似值(保留小数点后5位):
PI = 近似值
输入样例:
1E-5
输出样例:
PI = 3.14158

int main()
{
    int i,a=1,b=1,k,m;
    double z=1,n=1,eps;
    scanf("%le",&eps);
    for(i=1;z>=eps;i++)
      {
    for(k=1;k<=i;k++)
      a*=k;
    for(m=1;m<=2*i+1;m+=2)
      b*=m;
      z=a*1.0/b;
      n+=z;
     }
    printf("PI = %.5lf",2*n);
}
搜索更多相关主题的帖子: 近似 格式 输入 输出 for 
2019-12-05 22:06
黑暗骑士5D
Rank: 1
等 级:新手上路
帖 子:89
专家分:0
注 册:2019-11-6
得分:0 
我这个代码哪里错了
2019-12-05 22:06
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
以下是引用黑暗骑士5D在2019-12-5 22:06:43的发言:

我这个代码哪里错了
“哪里错了”应该是你告诉别人。很明显编译错了,因为缺少 #include <stdio.h>

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

int main( void )
{
    double eps;
    scanf( "%le", &eps );

    double pi = 1;
    double t = 1;
    for( unsigned i=1; eps<t; ++i )
    {
        t = t*i/(2*i+1);
        pi += t;
    }
    pi *= 2;

    printf( "PI = %.5f\n", pi );
}

2019-12-06 08:52
黑暗骑士5D
Rank: 1
等 级:新手上路
帖 子:89
专家分:0
注 册:2019-11-6
得分:0 
回复 3楼 rjsp
但是这个程序是结果错了啊,我想知道我写的步骤怎么错了
2019-12-06 12:27
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:554
专家分:3690
注 册:2019-7-29
得分:0 
程序代码:
#include<stdio.h>

int main()
{
    int i,k,m;
    unsigned long long int a=1,b=1;
    double z=1,n=1,eps;
    scanf("%le",&eps);

    for(i=1;z>=eps;i++)
    {
        for(k=1,a=1;k<=i;k++)
            a*=k;
        for(m=1,b=1;m<=2*i+1;m+=2)
            b*=m;
        z=a*1.0/b;
        n+=z;
    }
    printf("PI = %.5lf",2*n);

    return 0;
}

首先,你在每次for循环之前没有把a和b的值置1,其次int型的变量不足以支撑你1e-5的运算,要使用无符号长长整形的。

一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2019-12-06 20:27



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-498233-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.584977 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved