Sy_Faker 2019-11-22 23:09 采纳率: 25%
浏览 1135
已采纳

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条回答 默认 最新

  • threenewbee 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);
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog