老牛来学习 发表于 2020-3-29 16:51:21

C语言

题目要求:
使用格雷戈里公式求pi的近似值,要求精确到最后一项的绝对值小于10^-4。

大家觉得哪个对,为什么。感谢。

代码1:

#include<stdio.h>
#include<stdio.h>

int main()
{
    int flag = 1;
    double item = 1,PI = 0,e,denominator = 1;

    printf("请输入精度:");
    scanf("%lf",&e);
    while(fabs(item) >= e)
    {
      item = flag * (1/denominator);                //两句中的这一行代码换了位置
      PI += item;
      denominator += 2;
      flag = -flag;
    }
    PI = PI * 4;
    printf("PI的值为%.4f",PI);
}


代码二:

#include<stdio.h>
#include<stdio.h>

int main()
{
    int flag = 1;
    double item = 1,PI = 0,e,denominator = 1;

    printf("请输入精度:");
    scanf("%lf",&e);
    while(fabs(item) >= e)
    {
      PI += item;
      denominator += 2;
      flag = -flag;
      item = flag * (1/denominator);                //两句中的这一行代码换了位置
    }
    PI = PI * 4;
    printf("PI的值为%.4f",PI);
}

BngThea 发表于 2020-3-29 17:18:37

代码2,因为pi的求法中第一项就是1

墨羽岚 发表于 2020-3-29 17:29:21

本帖最后由 墨羽岚 于 2020-3-29 17:37 编辑

都不对
你为啥两个都调用了两次stdio.h库函数?第二个#应该是math.h
还有变量名称尽量短小简洁,不然容易打错
最后int main()要返回一个值
更正后的话楼上就是对的
#include<stdio.h>
#include<math.h>

int main()
{
      double PI=1.0,i=3.0;
      int k=-1;
      do
      {
                PI+=k/i;
                i+=2;
                k=-k;
      }while(fabs(k/i)>=1e-4);
      PI=PI*4;
      printf("%.6f",PI);
      return 0;
}
采用do……while还是while随个人喜好来(我做的题里面答案大多是do……while)
页: [1]
查看完整版本: C语言