灯火阑珊201 发表于 2022-10-3 16:52:46

求助求Π的问题

我的代码如下:

#include<stdio.h>
#include<math.h>
int main()
{
        int acc,times;
        int sign=1;
        double pi,i,temp;
        printf("请输入想要计算到pi的小数点后的位数:");
        scanf("%d",&acc);
        pi=0.0;
        i=1.0;
        while(fabs(temp)>=pow(10,-acc))
        {
                pi+=temp;
                i+=2;
                temp=sign/i;
                sign=-sign;
        }
        pi = pi*4;
        printf("%lf\n",pi);
        return 0;
}


不知道为啥输入之后打印出的pi值是0

aaron0919 发表于 2022-10-3 17:21:52

c++的算六位小数

#include<bits/stdc++.h>
using namespace std;
double arctanx(double x)
{
      double sum=0;
      for(double i=1;i<99;i+=2)
      {
                if(pow(x,int(i))/i<=0.000001)break;//改这
                if(int(i)%4==1)
                {
                        sum+=1.0*pow(x,int(i))/i;
                }
                if(int(i)%4==3)
                {
                        sum-=1.0*pow(x,int(i))/i;
                }
      }
      return sum;
}
int main()
{
      double a=6.0*arctanx(1.0/sqrt(3));
      printf("%.10lf",a);
      return 0;
}

jackz007 发表于 2022-10-12 00:19:02

本帖最后由 jackz007 于 2022-10-12 10:30 编辑

      这一句
      while(fabs(temp)>=pow(10,-acc))
      在进入循环前,temp 没有被赋值。
      下面是我修修改的代码:
#include<stdio.h>
#include<math.h>

int main(void)
{
      int acc,times                     ;
      int sign                        ;
      double d , pi , i , temp          ;
      printf("请输入想要计算到pi的小数点后的位数:");
      scanf("%d", & acc)                ;
      d = pow(10 , -acc)                ;
      pi = 0.0                        ;
      i = 1.0                           ;
      sign = 1                        ;
      temp = 1.0 / i                  ; // 进入循环前,需要先计算出循环变量 temp 的初值
      while(temp >= d) {
                pi += 1.0 * sign * temp   ;
                i += 2.0                  ;
                temp = 1.0 / i            ;
                sign = -sign            ;
      }                                 ;
      pi = pi * 4                     ;
      printf("%lf\n",pi)                ;
      return 0                        ;
}
      下面是我写的代码
#include <stdio.h>
#include <string.h>

int main(void)
{
      unsigned long long i , k , n                                             ;
      double b , s , PI                                                          ;
      char x                                                                ;
      printf("请输入想要计算到 pi 的小数点后的位数:")                           ;
      scanf("%I64d" , & n)                                                       ;
      if(n < 3 || n > 7) n = 7                                                   ;
      for(k = 10 , i = 0 ; i < n ; i ++) k *= 10                                 ;
      for(PI = 1.0 , b = 3.0 , s = -1.0 ; b < k ; b += 2.0 , s = -s) PI += s / b ;
      sprintf(x , "PI = %%.%dlf\n" , n)                                          ;
      printf(x , PI * 4.0 )                                                      ;
}
      编译、运行实况:
D:\\C>g++ -o x x.c

D:\\C>x
请输入想要计算到 pi 的小数点后的位数:4
PI = 3.1416

D:\\C>x
请输入想要计算到 pi 的小数点后的位数:7
PI = 3.1415926

D:\\C>
页: [1]
查看完整版本: 求助求Π的问题