标题:用公式π/4≈1-1/3+1/5……求π的近似值,要求直到最后一项的绝对值小于0.0 ...
只看楼主
li1346819486
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2019-11-6
结帖率:100%
 问题点数:0 回复次数:7 
用公式π/4≈1-1/3+1/5……求π的近似值,要求直到最后一项的绝对值小于0.000001为止。
这个那里错了? 求助

#include<stdio.h>
#include<math.h>
int main()
{
    int i,n,t;
    float sum;
    i=2;
    n=1;
    sum=0.0;
    for(;fabs(sum)>=1e-6;i++,n=n+2)
    {
        t=pow(-1,i)*n ;
        sum=sum+1.0/t;
    }
    sum=4*sum;
    printf("%f",sum);
    return 0;
}
搜索更多相关主题的帖子: 绝对值 π 要求 sum 小于 
2019-12-12 15:35
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
#include <stdio.h>

int main( void )
{
    double piq = 0;
    for( unsigned i=1; i<=1000001; i+=2 )
        piq += (2.0-i%4)/i;
    printf( "%f\n", 4*piq );
}
收到的鲜花
  • 纯蓝之刃2019-12-12 18:24 送鲜花  2朵   附言:极简主义
2019-12-12 17:02
D2284581470
Rank: 3Rank: 3
来 自:沈阳
等 级:论坛游侠
威 望:2
帖 子:169
专家分:147
注 册:2019-12-8
得分:0 
/*可以这样试一下谢谢采纳*/
#include<stdio.h>
#include<math.h>
int main()
{
    double sum = 1;
    int i, j;
    int k = 1;
    i = 1;
    j = 3;
    while (i*1.0/j > 1e-6)
    {
        sum += pow(-1, k) * i * 1.0 / j;
        j = j + 2;
        k++;
    }
    printf("%lf", sum * 4);
    getchar();
    return 0;
}
2019-12-12 23:12
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
得分:0 
#include <iostream>
#include<iomanip>//控制浮
#include <cmath>

using namespace std;
int main() {
   
    double pi=0;
    for(int i=0.0; i<1000000; ++i) {
        cout<<fixed;//固定
        cout<<setprecision(6);//小数点后六位
        pi=pi+(4.0/(4.0*i+1.0))-(4.0/(4.0*i+3.0));
    }
    cout << pi<< endl;
}
先说下,我用的是C++给你解答的这一题,思维和你的题目一致

把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2019-12-13 01:52
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
得分:0 
for(;fabs(sum)>=1e-6;i++,n=n+2)
    这一句话好乱啊,;号要去掉吧
     ,本人也是小白可以一起学习。

把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2019-12-13 02:04
a1602388940
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2020-3-9
得分:0 
回复 3楼 D2284581470
我简化了下
#include<stdio.h>
#include<math.h>
int main()
{
    double sum = 0;
    int i = 1, j = 1,k = 0;
    while (i*1.0/j > 1E-6)
    {
        sum += pow(-1, k) * 4.0 / j;
        j = j + 2;
        k++;
    }
    printf("%lf\n", sum);
}
2020-04-02 21:06
卡卡3315
Rank: 1
等 级:新手上路
帖 子:11
专家分:8
注 册:2019-6-24
得分:0 
你这个循环就没有进去吧,第一次给sum赋值是0,然后不满足fabs(sum)>=1e-6这个循环的条件,所以没有进循环,答案肯定是0*4=0.
按照你的思路这个循环的条件应该改成fabs(1.0/t)>1e-6      {这里fabs里面用1.0是因为fabs参数是double型的}
另外简化一下可以这样
#include<stdio.h>
#include<math.h>
int main(int argc,const char *argv[]) {
    double sum = 0;
    for(int i = 1; 1/(2.0*i-1)>=1e-6; i++) {
        sum += pow(-1,i+1)/(2.0*i-1);
    }
    sum *= 4;
    printf("%lf",sum);
    return 0;
}
sum = sum*4可以改成sum*=4       n = n+2 可以简化为n+=2 之类的最好简化一下
2020-04-02 23:00
卡卡3315
Rank: 1
等 级:新手上路
帖 子:11
专家分:8
注 册:2019-6-24
得分:0 
循环的条件在写的时候思路错了,不应该用sum
2020-04-02 23:01



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-498350-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014486 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved