编写程序,用公式π/4=1-1/3+1/5-1/7+…求π的近似值,直到最后一项的绝对值小于10^-4为止。(计算结果为什么不是3.14?哪里不对?)

时间:2023-01-09 11:13:57
编写程序,用公式π/4=1-1/3+1/5-1/7+…求π的近似值,直到最后一项的绝对值小于10^-4为止。(计算结果为什么不是3.14?哪里不对?)

#include<stdio.h>
#include<math.h>
main()
{
int sign=1,i=0;
float sum=0.0,j=0.0;
for(i=1;fabs(j)>1e-4;i=i+2)
{
j=sign/(i*1.0);

sum=sum+j;
sign=-sign;
}
sum=sum*4;
printf("sum=%f\n",sum);
}

8 个解决方案

#1


应为你的 j 初始值为 0, 不满足 fabs(j)>1e-4 ,根本就不会进循环。

#2


sign =-sign;

这句能编译过去?
sign = sign *(-1);

#3


for循环不执行了,因为一到for判断的时候j=0了,改一下,初始化j = 1.0,另外,最好还是用double类型


#include <stdio.h> 
#include <math.h> 
main() 

int sign=1,i=0; 
double sum=0.0,j=1.0; 
for(i=1;fabs(j)>1e-4;i=i+2) 

j=sign/(i*1.0); 

sum=sum+j; 
sign=-sign; 

sum=sum*4; 
printf("sum=%f\n",sum); 


#4


1楼讲的是

#5


fabs(j)>1e-4
没有进循环啦
j的初值改下

#6


for循环里面的语句没执行

#7



#include <stdio.h>
#include <math.h>
main()
{
    int sign=1, i=0;
    float sum=0.0, j=0.0;
    j = sign / (1 * 1.0);
    for(i = 3; fabs(j) > 1e-4; i = i + 2)
    {
        sum += j;
        sign = -sign;
        j=sign/(i*1.0);
    }
    sum *= 4;
    printf("sum=%f\n",sum);

#8


public class test2 {

    public static void main(String[] args) {
        int i = 1;
        double e = 0.0, t = 1.0;
        double pi = 0.0;
        while (1 / t >= Math.pow(10, -6)) {
            t = 2 * i - 1;
            if (i % 2 != 0) {
                e += 1 / t;
            } else {
                e -= 1 / t;
            }
            i++;
        }
        pi = 4 * e;
        System.out.println(pi);
    }
}

#1


应为你的 j 初始值为 0, 不满足 fabs(j)>1e-4 ,根本就不会进循环。

#2


sign =-sign;

这句能编译过去?
sign = sign *(-1);

#3


for循环不执行了,因为一到for判断的时候j=0了,改一下,初始化j = 1.0,另外,最好还是用double类型


#include <stdio.h> 
#include <math.h> 
main() 

int sign=1,i=0; 
double sum=0.0,j=1.0; 
for(i=1;fabs(j)>1e-4;i=i+2) 

j=sign/(i*1.0); 

sum=sum+j; 
sign=-sign; 

sum=sum*4; 
printf("sum=%f\n",sum); 


#4


1楼讲的是

#5


fabs(j)>1e-4
没有进循环啦
j的初值改下

#6


for循环里面的语句没执行

#7



#include <stdio.h>
#include <math.h>
main()
{
    int sign=1, i=0;
    float sum=0.0, j=0.0;
    j = sign / (1 * 1.0);
    for(i = 3; fabs(j) > 1e-4; i = i + 2)
    {
        sum += j;
        sign = -sign;
        j=sign/(i*1.0);
    }
    sum *= 4;
    printf("sum=%f\n",sum);

#8


public class test2 {

    public static void main(String[] args) {
        int i = 1;
        double e = 0.0, t = 1.0;
        double pi = 0.0;
        while (1 / t >= Math.pow(10, -6)) {
            t = 2 * i - 1;
            if (i % 2 != 0) {
                e += 1 / t;
            } else {
                e -= 1 / t;
            }
            i++;
        }
        pi = 4 * e;
        System.out.println(pi);
    }
}