鱼C论坛

 找回密码
 立即注册
查看: 3103|回复: 2

求助求Π的问题

[复制链接]
发表于 2022-10-3 16:52:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我的代码如下:

#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
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-10-3 17:21:52 | 显示全部楼层
c++的算六位小数

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. double arctanx(double x)
  4. {
  5.         double sum=0;
  6.         for(double i=1;i<99;i+=2)
  7.         {
  8.                 if(pow(x,int(i))/i<=0.000001)break;//改这
  9.                 if(int(i)%4==1)
  10.                 {
  11.                         sum+=1.0*pow(x,int(i))/i;
  12.                 }
  13.                 if(int(i)%4==3)
  14.                 {
  15.                         sum-=1.0*pow(x,int(i))/i;
  16.                 }
  17.         }
  18.         return sum;
  19. }
  20. int main()
  21. {
  22.         double a=6.0*arctanx(1.0/sqrt(3));
  23.         printf("%.10lf",a);
  24.         return 0;
  25. }
复制代码
下载.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-12 00:19:02 | 显示全部楼层
本帖最后由 jackz007 于 2022-10-12 10:30 编辑

        这一句
  1.         while(fabs(temp)>=pow(10,-acc))
复制代码

        在进入循环前,temp 没有被赋值。
        下面是我修修改的代码:
  1. #include<stdio.h>
  2. #include<math.h>

  3. int main(void)
  4. {
  5.         int acc,times                     ;
  6.         int sign                          ;
  7.         double d , pi , i , temp          ;
  8.         printf("请输入想要计算到pi的小数点后的位数:");
  9.         scanf("%d", & acc)                ;
  10.         d = pow(10 , -acc)                ;
  11.         pi = 0.0                          ;
  12.         i = 1.0                           ;
  13.         sign = 1                          ;
  14.         temp = 1.0 / i                    ; // 进入循环前,需要先计算出循环变量 temp 的初值
  15.         while(temp >= d) {
  16.                 pi += 1.0 * sign * temp   ;
  17.                 i += 2.0                  ;
  18.                 temp = 1.0 / i            ;
  19.                 sign = -sign              ;
  20.         }                                 ;
  21.         pi = pi * 4                       ;
  22.         printf("%lf\n",pi)                ;
  23.         return 0                          ;
  24. }
复制代码

        下面是我写的代码
  1. #include <stdio.h>
  2. #include <string.h>

  3. int main(void)
  4. {
  5.         unsigned long long i , k , n                                               ;
  6.         double b , s , PI                                                          ;
  7.         char x[256]                                                                ;
  8.         printf("请输入想要计算到 pi 的小数点后的位数:")                           ;
  9.         scanf("%I64d" , & n)                                                       ;
  10.         if(n < 3 || n > 7) n = 7                                                   ;
  11.         for(k = 10 , i = 0 ; i < n ; i ++) k *= 10                                 ;
  12.         for(PI = 1.0 , b = 3.0 , s = -1.0 ; b < k ; b += 2.0 , s = -s) PI += s / b ;
  13.         sprintf(x , "PI = %%.%dlf\n" , n)                                          ;
  14.         printf(x , PI * 4.0 )                                                      ;
  15. }
复制代码

        编译、运行实况:
  1. D:\[00.Exerciese.2022]\C>g++ -o x x.c

  2. D:\[00.Exerciese.2022]\C>x
  3. 请输入想要计算到 pi 的小数点后的位数:4
  4. PI = 3.1416

  5. D:\[00.Exerciese.2022]\C>x
  6. 请输入想要计算到 pi 的小数点后的位数:7
  7. PI = 3.1415926

  8. D:\[00.Exerciese.2022]\C>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-23 20:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表