c语言题题的中的疑问

我用的for循环为什么实现出来结果跟答案不一样,下面是我的代码,注释部分是答案的代码。

img



#include
#include
int main()
{
    int i;
    double pi,sum=0.0;
    for(i=1;1/(i*i)>=1e-5;i++)
    {
        sum+=1/(i*i);
    }
    pi=sqrt(sum*6);
    printf("%lf",pi);
}
/*
#include 
#include "math.h"
int main()
{
    double pi,sum=0.0;
    int  i=1;
    while(1.0/(i*i)>=1e-5)
    {
        sum = sum + 1.0/(i*i);
        i++;
    }
    pi = sqrt(sum*6);
    printf("近似值为%lf",pi);
    return 0;
}*/

由于int型与int型运算还是int型,所以sum+=1/(ii);当i>=2时,1/(ii)就是0了,所以最终sum=1,而你最终的答案是sqrt(1*6)

img

题目要求某项的值小于10的-5次方为止,但你的for循环要求所有项都大于10的-5次方,所以你的少了最后一项

int main(void)
{

    int i=1;
    double pi,sum=0.0,item=0;
    do
    {
        item = 1.0/(i*i);
        sum += item;
        i++;
    }while(item >= 1e-5);

    pi=sqrt(sum*6);
    printf("%lf",pi);

    return 0;
}

for循环运行出来得2.4多,while 循环出来是3.13

你这代码明显不对呀
for循环里,i是int型,除法也是int型的除法,i=2的时候1/(i*i)就是0了,
最终sum=1
sum*6=6
根号6不是2.45吗