标题:有一个分数序列,1/2,1/4,1/6,1/8……,求前n项的和,谁能帮我简化一下代 ...
只看楼主
跆拳勇士
Rank: 1
等 级:新手上路
帖 子:29
专家分:9
注 册:2017-7-21
结帖率:100%
已结贴  问题点数:20 回复次数:2 
有一个分数序列,1/2,1/4,1/6,1/8……,求前n项的和,谁能帮我简化一下代码(for循环不改变)
#include<stdio.h>
int main()
{
    int i,n;
    float sum=0;
   
    printf("请输入所需要前n项和: ");
    scanf("%d",&n);
    n=2*n;
    for(i=2;i<=n;i+=2)
    {
        sum=sum+1.0/i;
    }
    printf("前%d项和为:%f\n",n/2,sum);
    return 0;
}
搜索更多相关主题的帖子: 分数 for 循环 改变 sum 
2017-07-21 23:41
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:7 
1+1/2+1/3+1/4+… 的一半呀
但前者没有求和公式(欧拉公式只是近似估计)
“算法上”是简化不了了,问题是怎样提高精度,但看你用float,估计精度你更不关心。
2017-07-22 00:15
lmlm1001
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:4
帖 子:107
专家分:550
注 册:2015-3-1
得分:7 
这似乎不象是来求帮助的。
如果是,请楼主斧正我的注释

#include<stdio.h>//无法简化
int main()//无法简化 参数可以改成(void)
{//无法简化
    int i,n;//无法简化
    float sum=0;//无法简化
    //可以删除
    printf(""请输入所需要前n项和: ");//本行和下一行可以简化成    printf("%*s", scanf("%d",&n), "请输入所需要前n项和: ");
    scanf("%d",&n);//同上
    n=2*n;//本行可以和下一行简化成    for( i = 2, n <<= 1; i <= n; i += 2 )但是楼主的要求是for循环不改变
    for(i=2;i<=n;i+=2)
    {//可以删除
        sum=sum+1.0/i;
    }//可以删除
    printf("前%d项和为:%f\n",n/2,sum);//可以和下一行简化成    return 0 * printf("前%d项和为:%f\n",n/2,sum);
    return 0;//同上
}无法简化
提示,代码精简有的时候可以提高执行的效率,却是以牺牲可读性为代价的,需要谨慎。
2017-07-22 21:03



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-479540-1-1.html




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

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