Sy_Faker
2019-11-22 23:09
采纳率: 77.3%
浏览 818

PTA:7-33 近似求PI。出现了出乎意料的结果。

近似求PI

本题要求编写程序,根据下式求π的近似值,直到最后一项小于给定精度eps。

图片说明

输入格式:

输入在一行中给出精度eps,可以使用以下语句来读输入:

scanf("%le", &eps);

输出格式:

在一行内,按照以下格式输出π的近似值(保留小数点后5位):

PI = 近似值

输入样例:

1E-5

输出样例:

PI = 3.14158

程序清单:

#include<stdio.h>
int main()
{
    double eps;
    scanf("%le", &eps);
    int fz[100],fm[100],count,sum;
    fz[0]=1;fm[0]=1;count=0;
    for(int i=1,k=3;;i++,k+=2)      //建立分母和分子的数列 
    {
        fz[i]=fz[i-1]*i;
        fm[i]=fm[i-1]*k;
        count++;
        if(fz[i]/fm[i]<eps)break;
    }
    for(int i=0,sum=0;i<count;i++)
    {
        sum=sum+fm[i]/fm[i];
    }
    printf("PI = %.5f",2*sum);
}

结果图片说明**←**为什么还会输出none这种东西的?

请求大佬指出错误~还有就是数组的大小通常怎么确定?以前我都是

scanf("%d",&n);int a[n];且用了多次了,但被告知不能这样做??

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • blownewbee 2019-11-23 09:45
    已采纳
    #include<stdio.h>
    int main()
    {
        double eps;
        scanf("%le", &eps);
        double fz[100],fm[100],sum=0;
        int count;
        fz[0]=1;fm[0]=1;count=0;
        for(int i=1,k=3;;i++,k+=2)      //建立分母和分子的数列 
        {
            fz[i]=fz[i-1]*((double)i);
            fm[i]=fm[i-1]*((double)k);
            count++;
            if(fz[i]/fm[i]<eps || i > 99)break;
        }
        for(int i=0;i<count;i++)
        {
            sum=sum+fz[i]/fm[i];
        }
        printf("PI = %.5f",2*sum);
    }
    
    点赞 打赏 评论

相关推荐 更多相似问题