C语言新手求助:Pi/2=1+1/3+(1/3)*(2/5)+(1/3)*(2/5)*(3/7)+...

Pi/2=1+1/3+(1/3)*(2/5)+(1/3)*(2/5)*(3/7)+... 求Pi值
用了一个do while 出不了结果
是不是while后面的条件设置的不对
如何控制i使循环能够做无限次

#include <stdio.h>

int main()
{
    double pi,a,b,i;
     a=1.0;
     b=1.0;
     i=1.0;
    pi=1.0;
 do
    {a=a*i;
    b=b*(2*i+1);
    pi+=a/b;
    i++;
    }while(i/(2*i+1)<0.5);
    printf("Pi的值为%lf\n",pi*2);
}

另,如何用for循环求解此题

//Pi/2=1+1/3+(1/3)*(2/5)+(1/3)*(2/5)*(3/7)+... 求Pi值,
#include
int main()
{
double pi,a,b,i;
a=1.0;
b=1.0;
i=1.0;
pi=1.0;
do
{a=a*i; //a=1*1=1
b=b*(2*i+1); //b=1*(2*1+1)=3
pi+=a/b; //pi=1/3+pi=1/3+1
i++; //i=2
}while(i/(2*i+1)<0.49); // 2/(4+1)=0.4
printf("Pi的值为%lf\n",pi*2);
}
这样应该就可以了,运行出的结果是3.14159
题主原来的while(i/(2*i+1)<0.5一直为真,所以他就一直循环,出不来结果

你好,你的代码中do-while语句里 i/2i+1< 0.5 这个条件恒成立,因此将不断循环,无法跳出到后面的printf语句。你可以将跳出条件设置为i>100,诸如此类。
C语言中循环是不能够做无数次的!
使用For循环的话,可以这样写:

#include <stdio.h>

int main()
{
    double pi,a,b,i;
    a=1.0;
    b=1.0;
    i=1.0;
    pi=1.0;

    for(i=1;i<100;i++){
        a=a*i;
        b=b*(2*i+1);
        pi+=a/b;
    }

    printf("Pi的值为%lf\n",pi*2);
}