| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 581 人关注过本帖
标题:自己写的程序,不知道错在哪里
只看楼主 加入收藏
初出茅庐MM
Rank: 2
等 级:论坛游民
帖 子:62
专家分:11
注 册:2013-9-28
结帖率:93.75%
收藏
已结贴  问题点数:20 回复次数:8 
自己写的程序,不知道错在哪里
题目:用公式π/4=1-1/3+1/5-1/7+…,求π的近似值,直到最后一项的绝对值小于10^-6为止。

#include<stdio.h>
void main()
{int i,j;
float pi,s=0,m=0;
for(i=1;i<=1e+6;i+=4)
s+=1/i;
for(j=3;j<=1e+6;j+=4)
{j=-j;  m+=1/j;}
pi=4*(s+m);
printf("pi=%10.8f",pi);
}

 这是我写的程序,个人觉得应该是算法上的错误。  求各位好人答疑解难!!
搜索更多相关主题的帖子: 绝对值 
2013-10-05 00:26
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:15 
j = -j; 去掉
pi = 4 * (s + m); 改成 pi = 4 * (s - m);

重剑无锋,大巧不工
2013-10-05 00:53
帅哥汉张
Rank: 2
等 级:论坛游民
帖 子:16
专家分:15
注 册:2013-6-22
收藏
得分:0 
#include<stdio.h>
#include<stdlib.h>

int main( void )
{
    int j = 1;
    double i = 3.00000;
    double pi = 1.00 , temp = 0.00;
    for( i ;  ( 1/i ) >= 1e-6 ; i+= 2 )
        pi += ( ( (j++) % 2 ) !=0  ) ? ((-1)*( 1/i ) ) : ( 1/i ) ;        
    printf("pi=%10.8lf", pi*=4 );
    system("pause");
    return 0;
}
2013-10-05 01:24
帅哥汉张
Rank: 2
等 级:论坛游民
帖 子:16
专家分:15
注 册:2013-6-22
收藏
得分:5 
#include<stdio.h>
#include<stdlib.h>

int main( void )
{
    int j = 1;
    double i = 3.00000;
    double pi = 1.00 , temp = 0.00;
    for( i ;  ( 1/i ) >= 1e-6 ; i+= 2 )
        pi += ((j*=(-1))*( 1/i ) );        
    printf("pi=%10.8lf", pi*=4 );
    system("pause");
    return 0;
}
这样好像稍微好点
2013-10-05 01:30
初出茅庐MM
Rank: 2
等 级:论坛游民
帖 子:62
专家分:11
注 册:2013-9-28
收藏
得分:0 
回复 2楼 beyondyf
为什么用了j=-j,程序没有输出结果
2013-10-05 09:11
初出茅庐MM
Rank: 2
等 级:论坛游民
帖 子:62
专家分:11
注 册:2013-9-28
收藏
得分:0 
回复 2楼 beyondyf
为什么我的pi算出来为4,  望版主好人解答
2013-10-05 09:17
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
单看这部分
for(j = 3; j < 1E+6; j += 4)
{
    j = -j;
}

初始 j = 3
j = -j; //j = -3
j += 4; //j = 1
j = -j; //j = -1
j += 4; //j = 3
程序陷入了一个无限循环。

至于结果等于4。在C(及大多数类C语言)中当两个整数作除法运算时结果依然是整数。

解决方法可以是将 1/i、1/j改成1.0/i或(double/float)1/i或干脆将变量声明为浮点型,等等。

重剑无锋,大巧不工
2013-10-05 09:29
初出茅庐MM
Rank: 2
等 级:论坛游民
帖 子:62
专家分:11
注 册:2013-9-28
收藏
得分:0 
回复 4楼 帅哥汉张
Absolutely right!   你能指出我的程序错在哪里吗?
2013-10-05 09:32
初出茅庐MM
Rank: 2
等 级:论坛游民
帖 子:62
专家分:11
注 册:2013-9-28
收藏
得分:0 
回复 7楼 beyondyf
谢谢
2013-10-05 09:39
快速回复:自己写的程序,不知道错在哪里
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019075 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved