注册 登录
编程论坛 C语言论坛

近似求PI

黑暗骑士5D 发布于 2019-12-05 22:06, 1351 次点击
本题要求编写程序,根据下式求π的近似值,直到最后一项小于给定精度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);
}
4 回复
#2
黑暗骑士5D2019-12-05 22:06
我这个代码哪里错了
#3
rjsp2019-12-06 08:52
以下是引用黑暗骑士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 );
}

#4
黑暗骑士5D2019-12-06 12:27
回复 3楼 rjsp
但是这个程序是结果错了啊,我想知道我写的步骤怎么错了
#5
纯蓝之刃2019-12-06 20:27
程序代码:
#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的运算,要使用无符号长长整形的。
1