婧Jing2005 2024-02-01 23:22 采纳率: 40%
浏览 9
已结题

C语言,求序列前n项和(相关搜索:c语言)(相关搜索:c语言)

#为什么交换这两行代码会有不一样的结果
题目描述:

 5-0.            求序列前N项和(15)
 本题要求编写超序,计算序列2/1+3/2+5/3+8/5+...的前N项之和,注意该序列从第2项起,每一项的分子是前一项分子与分母的和,分母
 是前一项的分子
 输入格式:
 输入在一行中给出一个正整数N
 输出格式:
 在一行中输出部分和的值,精确到小致点后2位,题目保证计算结果不超过双精度范围
 输入样例:
 28
 输出样例:
 32.66
                                                                                            CSDN@230180732253
#include<stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    double dividend,divisor;
    int i;
    dividend=2;
    divisor=1;
    double sum=0.0;
    double t;
    for(i=0;i<n;i++)
    {
        sum+=(dividend/divisor);
        t=dividend;//
        dividend=dividend+divisor;//
        divisor=t;
    }
    printf("%.2f\n",sum);
    return 0;
}


正确答案,即上述代码的样例
输入:20
输出:32.66
交换有‘//’的两行后
输入:20
输出:21.00

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-02-01 23:25
    关注

    引自免费微信小程序:皆我百晓生

    在该C语言代码中,计算的是一个特殊序列的前N项和,序列从第2项开始,每一项的分子是前一项分子与分母的和,分母是前一项的分子。原始代码如下:

    #include<stdio.h>
    int main()
    {
        int n;
        scanf("%d",&n);
        double dividend,divisor;
        int i;
        dividend=2;
        divisor=1;
        double sum=0.0;
        double t;
        for(i=0;i<n;i++)
        {
            sum+=(dividend/divisor); // 计算当前项并累加到总和中
            t=dividend;             // 先保存当前的分子值
            dividend=dividend+divisor; // 更新分子为当前分子与分母之和
            divisor=t;               // 更新分母为原来的分子值
        }
        printf("%.2f\n",sum);
        return 0;
    }
    

    当你交换这两行代码:

    // 原顺序
    t=dividend;
    dividend=dividend+divisor;
    
    // 交换后顺序
    dividend=dividend+divisor;
    t=dividend;
    

    交换后的结果会导致错误的计算。因为在更新dividend之后再将其赋值给t,这时t将存储新的dividend值,而非旧的分子值。因此,在下一轮循环中更新divisor时,它将使用新计算出的分子而非前一项的分子,破坏了序列递推规则。

    所以正确版本(即原代码)的输出对于输入20是正确的,约为32.66;而当交换这两行代码后,程序计算出的结果不再是该序列的前20项和,导致输出变为21.00。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 2月10日
  • 已采纳回答 2月2日
  • 创建了问题 2月1日

悬赏问题

  • ¥15 delphi indy cookie 有效期
  • ¥15 labelme打不开怎么办
  • ¥35 按照图片上的两个任务要求,用keil5写出运行代码,并在proteus上仿真成功,🙏
  • ¥15 免费的电脑视频剪辑类软件如何盈利
  • ¥30 MPI读入tif文件并将文件路径分配给各进程时遇到问题
  • ¥15 pycharm中导入模块出错
  • ¥20 Ros2 moveit2 Windows环境配置,有偿,价格可商议。
  • ¥15 有关“完美的代价”问题的代码漏洞
  • ¥15 请帮我看一下这个简易化学配平器的逻辑有什么问题吗?
  • ¥15 暴力法无法解出,可能要使用dp和数学知识