| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2452 人关注过本帖
标题:有一个代码看不懂。朋友给我发的,但我看不懂啊
只看楼主 加入收藏
jinggengchen
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2017-11-13
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:8 
有一个代码看不懂。朋友给我发的,但我看不懂啊
#include <stdio.h>
int main(void)
{
    int i;
    double sum=0,tmp;
    for(i=1;(tmp=1/(double)i)>=1e-6;i+=2)
    {
        if((i+1)/2%2==0)
        tmp=-tmp;
        sum+=tmp;
    }
    printf("%.10lf\n",sum*4);
    return 0;
}
 计算π,计算公式是π/4 = 1-1/3+1/5-1/7……,直到最后一项的绝对值小于10的负6次方为止
搜索更多相关主题的帖子: 代码 int double sum tmp 
2017-11-17 09:42
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:4 
这样好看点:
#include <stdio.h>
int main(void)
{
    int i, k=1;
    double sum=0,tmp;
    for(i=1; (tmp=1.0/i)>=0.000001; i+=2,k*=-1)
        sum += k*tmp;
    printf("%.10lf\n",sum*4);
    return 0;
}
2017-11-17 10:52
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:4 
是 数学 不懂,还是 C 不懂?
#include <stdio.h>
int main( void )
{
    double pi_4 = 0;
    for( int i=1; i<1000000; i+=2 )
        pi_4 -= 1.0/i * (i%4-2);
    printf( "%f\n", pi_4*4 );
}
2017-11-17 11:01
小青345
Rank: 2
等 级:论坛游民
帖 子:64
专家分:15
注 册:2017-8-24
收藏
得分:4 
是 数学 不懂,还是 C 不懂?
#include <stdio.h>
int main( void )
{
    double pi_4 = 0;
    for( int i=1; i<1000000; i+=2 )
        pi_4 -= 1.0/i * (i%4-2);
    printf( "%f\n", pi_4*4 );
}

买房租房上爱心房产网
2017-11-17 14:53
jinggengchen
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2017-11-13
收藏
得分:0 
回复 3楼 rjsp
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pi_4 -= 1.0/i * (i%4-2);   
好吧 数学不懂,,,
2017-11-17 19:31
jinggengchen
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2017-11-13
收藏
得分:0 
回复 2楼 吹水佬
for(i=1; (tmp=1.0/i)>=0.000001; i+=2,k*=-1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum += k*tmp;
你的  这一步能否讲解一下 ,谢谢。
2017-11-17 19:33
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
收藏
得分:4 
以下是引用jinggengchen在2017-11-17 19:33:32的发言:

for(i=1; (tmp=1.0/i)>=0.000001; i+=2,k*=-1)
        sum += k*tmp;
你的  这一步能否讲解一下 ,谢谢。

(tmp=1.0/i)>=0.000001  循环次数
 i+=2分母为1 3 5 7 ,。。
k*=-1  + - 来回变换
sum += k*tmp;  sum=sum+k*tmp
2017-11-19 21:49
Alien_Lee
Rank: 8Rank: 8
来 自:Linux帝国
等 级:蝙蝠侠
威 望:7
帖 子:149
专家分:739
注 册:2016-7-19
收藏
得分:4 
这个问题主要是两个点,第一个是每一项的分母,第二个是每一项的符号。剩下的就是迭加的问题,想必判断条件你肯定是懂的,也就是说最后一项满足绝对值小于10的负6次方。
分母:1,3,5,7,。。
奇数,所以是for(i=1;条件;i+=2),如果这样你还不知道,只能说你不适合C;
符号:+,-,+,-,
把符号看成系数+1,-1,+1,-1,那么,假如说第n个是x,那么后一个是不是就是 -1*x,所以说k=k*(-1);
if((i+1)/2%2==0)这个判断,其实也是在处理符号问题,理解为奇数项为+,偶数项为-。(i+1)/2是在计算奇数数列(1,3,5,7...)项数。


  DEBUG的过程就是进步的过程,每一个小错误都是大问题!...
2017-11-20 17:18
新人学习
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:145
专家分:187
注 册:2017-10-26
收藏
得分:4 
#include <stdio.h>
int main(void)
{
    int i;
    double sum=0,tmp;
    for(i=1;(tmp=1/(double)i)>=1e-6;i+=2)
    {
      
        tmp=-1*tmp;
        sum+=tmp;
    }
    printf("%.10lf\n",sum*4);
    return 0;
}
2017-11-20 21:24
快速回复:有一个代码看不懂。朋友给我发的,但我看不懂啊
数据加载中...
 
   



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

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