| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 476 人关注过本帖
标题:又被循环语句难住了。
只看楼主 加入收藏
StarFall
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:193
专家分:553
注 册:2012-10-1
结帖率:100%
收藏
已结贴  问题点数:5 回复次数:9 
又被循环语句难住了。
题目:用π/4=1 - 1/3 + 1/5 - 1/7 + 1/9-1/11…… ,求π的近似值。当最后一项的绝对值小于10的负六次方时停止(该项不累加)。

我做的代码是

#include <stdio.h>
int main(void)
{
float sum=0;
int i,j=1;
for(i=1;1/i<1e-6;i++,i++)
for(;j==j;j++)
{
    if(j%2==0) sum-=1/i;
    else sum+=1/i;
}
printf("π=%f\n",sum*4);
return 0;
}


结果输出的是π=0.000000     这问题出在哪。。。。
搜索更多相关主题的帖子: 绝对值 include void 
2012-10-01 21:26
StarFall
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:193
专家分:553
注 册:2012-10-1
收藏
得分:0 
#include <stdio.h>
int main(void)
{
float sum=0;
int i,j=1;
for(i=1;1/i>1e-6;i++,i++)
for(;j==j;j++)
{
    if(j%2==0) sum-=1/i;
    else sum+=1/i;
}
printf("π=%f\n",sum*4);
return 0;
}

修正一个错误,第六行改为1/i>1e-6

去追寻更高的技术领域。永不停止。
2012-10-01 21:31
StarFall
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:193
专家分:553
注 册:2012-10-1
收藏
得分:0 
又改进了一下。。输出是4   ,感觉离成功近了 但是不知道错在哪

#include <stdio.h>
int main(void)
{
float sum=0;
int i,j=1,n=2 ;
for(i=1;(1/i)>1e-6;i++,i++,n++)
    for(;j<n;j++)
{
    if(j%2==0) sum-=1/i;
    else sum+=1/i;
}
printf("π=%f\n",sum*4);printf("%f  %f",j,n);
return 0;
}

去追寻更高的技术领域。永不停止。
2012-10-01 21:43
Sukhavati
Rank: 1
等 级:新手上路
帖 子:9
专家分:4
注 册:2012-9-25
收藏
得分:3 
看不明白你的算法,下面是我自己写的,希望对你有所帮助

#include <stdio.h>
int main(void)
{
double n,sum=0.;
int i,j=1;

for(i=1;1./i>1e-6;i+=2)    //注意小数点
{
    n = j*1./i;
    sum += n;
    j = -j;
}
printf("π=%f\n",sum*4);
return 0;
}
2012-10-02 03:41
StarFall
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:193
专家分:553
注 册:2012-10-1
收藏
得分:0 
回复 4楼 Sukhavati
你的很标准。  我那个好像是比较乱,不过我想知道为什么运行不了。。。 我运行的时候加了一个printf("i=%d j=%d n=%d",i,j,n);  发现循环是在进行的  只是sum的值没有变。。。- - 可是明明sum+=1/i    于是我就凌乱了

去追寻更高的技术领域。永不停止。
2012-10-02 08:19
qunxingw
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:24
帖 子:1676
专家分:7295
注 册:2011-6-30
收藏
得分:2 
4楼的应该给你提示。请单独思考   int i; sum=1/i ;结果是?

www.qunxingw.wang
2012-10-02 08:48
StarFall
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:193
专家分:553
注 册:2012-10-1
收藏
得分:0 
回复 6楼 qunxingw
sum=0.00000

我好像懂了什么。。

去追寻更高的技术领域。永不停止。
2012-10-02 08:51
StarFall
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:193
专家分:553
注 册:2012-10-1
收藏
得分:0 
回复 6楼 qunxingw
呃, 不对- - sum=1.000000 刚才忘了给i赋值1了。。

去追寻更高的技术领域。永不停止。
2012-10-02 08:53
StarFall
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:193
专家分:553
注 册:2012-10-1
收藏
得分:0 
总结一小点, 1/i 改成1.0/i  不然两边都是整数 就当整数除法了, 输出是0  
不过我的代码改后还是无效- -

去追寻更高的技术领域。永不停止。
2012-10-02 09:10
StarFall
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:193
专家分:553
注 册:2012-10-1
收藏
得分:0 
已解决, 原来还是第一个for粗心弄错了范围,。

最终代码如下

#include <stdio.h>
int main(void)
{
float sum=0.0;
int i,j=1,n=2;
for(i=1;i<=1e6;i++,i++,n++)
    for(;j<n;j++)
{
    if(j%2==0) sum-=1.0/i;
    else sum+=1.0/i;
}
printf("π=%-11.8f\n",sum*4);
return 0;
}


去追寻更高的技术领域。永不停止。
2012-10-02 09:35
快速回复:又被循环语句难住了。
数据加载中...
 
   



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

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