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

报告相同问题?

悬赏问题

  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况