lsdsg 发表于 2021-10-22 15:16:49

填空题2

【问题描述】

输入精度值e,按照公式π/4=1-1/3+1/5-1/7+⋯计算π的近似值,要求精确到最后一项的绝对值小于e(此时,这一项不应该加入到π的近似值中),结果保留6位小数。



【输入形式】

从键盘输入精度值e


【输出形式】

pi=值



【样例输入】

0.0001



【样例输出】

pi=3.141397



#include"stdio.h"
#include"math.h"
intmain()
{
      intflag,s;
      floatitem,pi,e;
      scanf("%f",&e);
      flag=s=1;
      item=1;
      pi=0;      
      while(fabs(item=flag*1.0/s)>e)
      {
                空空空空

      }
      pi=pi*4;
      printf("pi=%f",pi);
      return0;
}

番杰 发表于 2021-10-22 15:42:54

本帖最后由 番杰 于 2021-10-22 15:51 编辑

pi += item;       // pi相当于总和;
flag = ~ flag;   // flag相当于每一项前面的正负号;~是取反,即:1 取反为-1,-1取反为1.
s += 2 ;         // s 相当于题中的分母,每一项比前一项多2;
不太清楚,空空空空是指的需要填四个空嘛?

要是四个空,这样写:
pi += item;
flag = ~ flag;//这句也可以写成:flag *= -1 ;   都是一个效果
s++;
s++;

傻眼貓咪 发表于 2021-10-22 16:18:26

本帖最后由 傻眼貓咪 于 2021-10-22 16:20 编辑

不知道为什么,用你的代码输出不正确,我重新写了代码:#include <stdio.h>
#define true 1
#define false (!true)

int main()
{
    int n = 1, flag = 1;
    double e, pi = 0;
    scanf_s("%lf", &e);
    while (true) {
      if ((1.0 / n) < e) break;
      pi += flag * (1.0 / n);
      flag *= -1;
      n += 2;
    }
    pi *= 4;
    printf("pi = %lf", pi);
    return 0;
}0.00001
pi = 3.141573
页: [1]
查看完整版本: 填空题2