求问C语言的一道题,急求!!!

#include<stdio.h>main(){longinti=1;doublePI=0;while(1/(2*i-1)>=1e-7){if(i%2!=0)PI=PI+... #include <stdio.h>

main()
{
long int i=1;
double PI=0;
while(1/(2*i-1)>=1e-7)
{
if(i%2!=0)
PI=PI+1/(2*i-1);
else
PI=PI-1/(2*i-1);
i++;

}
printf("PI=%.25lf",PI*4);
getch();

}
上面是我的程序,我知道是这句 PI=PI+1/(2*i-1);
else
PI=PI-1/(2*i-1); 出的问题,但是不知道问什么,一定要有详细解释啊~
展开
 我来答
AS张康健
2013-06-19
知道答主
回答量:52
采纳率:0%
帮助的人:21.2万
展开全部
程序没错,只需要把1/(2*i-1)改成1.0/(2*i-1)就行了,
如果不改的话,那么这个式子从第二项开始就一直为0, 最后变成了1-0+0-0+0-0.......

为什么要将1改成1.0呢
因为(int)/(int)结果仍为int,后面不带小数位,而你的这个题目从第二项开始都有小数位,所以,你不能两个都是int,
只有(float)/(int)或(double)/(int)时结果遵循高位为标准,
所以这个题你也可以1/(float)(2*i-1)
菊隐逸者也
2013-06-19 · TA获得超过832个赞
知道小有建树答主
回答量:536
采纳率:0%
帮助的人:527万
展开全部

你的程序1是整型,做除法以后得到的是整型。比如1/2=0.而1.0/2=0.5,所以你把1改为1.0就对了。程序如下,错误处以标志:

main() 

    long int i=1; 
    double PI=0; 
    while(1.0/(2*i-1)>=1e-7) //
    { 
        if(i%2!=0) 
        PI=PI+1.0/(2*i-1);//
        else 
        PI=PI-1.0/(2*i-1); //
        i++; 

        } 
        printf("PI=%.25lf",PI*4); 
        getch(); 

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
操羽40
2013-06-19 · TA获得超过430个赞
知道小有建树答主
回答量:374
采纳率:100%
帮助的人:234万
展开全部
#include <stdio.h> 
#include<ctype.h>
main() 

    long int i=1; 
    double PI=0; 
    while(1.0/(2*i-1)>=1e-7) //如果这里不是1.0的话那么在i=2之后1.0/(2*i-1)等于0了,楼主可能
                            //这个不理解在C语言中/代表的是整除的意思,比如说1/2,1/3 我们
                            //理解为0.5,实际上只取了整数部分,所以要想得到0.5就得让其为
                            //浮点表示方式1.0就ok了
    { 
        if(i%2!=0) 
            PI=PI+1.0/(2*i-1); //同理
        else 
            PI=PI-1.0/(2*i-1); //同理
        i++; 

      } 
        printf("PI=%.25lf",PI*4); 
        getchar(); 

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
梦的城0
2013-06-19
知道答主
回答量:3
采纳率:0%
帮助的人:4216
展开全部
PI=PI-1/(2*i-1); 中 (2*i-1) 可能为 0 ; 这样自然就错了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-06-19
展开全部
你这个是什么错误啊?你这个程序没法运行,我给main()前面加了int后可以运行啊??
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式