注册 登录
编程论坛 C语言论坛

用公式π/4≈1-1/3+1/5……求π的近似值,要求直到最后一项的绝对值小于0.000001为止。

li1346819486 发布于 2019-12-12 15:35, 6292 次点击
这个那里错了? 求助

#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;
}
7 回复
#2
rjsp2019-12-12 17:02
#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 );
}
#3
D22845814702019-12-12 23:12
/*可以这样试一下谢谢采纳*/
#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;
}
#4
叶纤2019-12-13 01:52
#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++给你解答的这一题,思维和你的题目一致
#5
叶纤2019-12-13 02:04
for(;fabs(sum)>=1e-6;i++,n=n+2)
    这一句话好乱啊,;号要去掉吧
     ,本人也是小白可以一起学习。
#6
a16023889402020-04-02 21:06
回复 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);
}
#7
卡卡33152020-04-02 23:00
你这个循环就没有进去吧,第一次给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 之类的最好简化一下
#8
卡卡33152020-04-02 23:01
循环的条件在写的时候思路错了,不应该用sum
1