花仁深省 2024-04-22 22:10 采纳率: 100%
浏览 7
已结题

关于#c语言#的问题:每一项的分子是前一项分子与分母的和(相关搜索:输入一个正整数)

题目:输入一个正整数n,计算序列 2/1+3/2+5/3+8/5+... 的前n项之和,保留2位小数。该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。试编写相应程序。
我写的代码:

#include <stdio.h>
int main(void)
{
    int i,n,a,b,t;
    double item,sum;
    sum=0;
    a=1;
    b=2;
    printf("Enter n:");
    scanf("%d",&n);
    if(n<=0){
        printf("Invalid Value!\n");
    }else{
        for(i=1;i<=n;i++){
            item=b/a;
            sum=sum+item;
            t=a;
            a=b;
            b=t+b;
        }
        printf("sum=%.2f",sum);
    }
    return 0;
}

运行结果:

img

不知道自己写的问题在哪儿,请答疑解惑一下。

  • 写回答

7条回答 默认 最新

  • 阿齐Archie 嵌入式领域优质创作者 2024-04-22 22:11
    关注

    以下参考免费微信小程序:皆我百晓生 作答,并由阿齐Archie整理回复,若还有疑问可评论或留言。

    你的代码逻辑是正确的,但是在计算序列的和时,由于整数除法的特性,可能导致精度损失。为了解决这个问题,你可以将 ab 定义为 double 类型,这样计算时就不会丢失精度。下面是修改后的代码:

    #include <stdio.h>
    int main(void)
    {
        int i, n;
        double a, b, item, sum;
        sum = 0.0;
        a = 1.0;
        b = 2.0;
        printf("Enter n:");
        scanf("%d", &n);
        if (n <= 0) {
            printf("Invalid Value!\n");
        } else {
            for (i = 1; i <= n; i++) {
                item = (double)b / a;
                sum = sum + item;
                b = a + b;
                a = b - a;
            }
            printf("sum=%.2f", sum);
        }
        return 0;
    }
    

    这里我做了以下修改:

    1. ab 的类型从 int 改为 double
    2. 在计算 item 时,将 b 强制转换为 double 类型,以确保进行浮点数除法。
    3. 在更新 ab 时,我将 t 的使用改为直接更新,这样代码更简洁。

    现在,当你运行这个修改后的代码,应该能得到正确的结果。

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

报告相同问题?

问题事件

  • 系统已结题 4月30日
  • 已采纳回答 4月22日
  • 创建了问题 4月22日

悬赏问题

  • ¥15 有偿求苍穹外卖环境配置
  • ¥15 代码在keil5里变成了这样怎么办啊,文件图像也变了,
  • ¥20 Ue4.26打包win64bit报错,如何解决?(语言-c++)
  • ¥15 clousx6整点报时指令怎么写
  • ¥30 远程帮我安装软件及库文件
  • ¥15 关于#自动化#的问题:如何通过电脑控制多相机同步拍照或摄影(相机或者摄影模组数量大于60),并将所有采集的照片或视频以一定编码规则存放至规定电脑文件夹内
  • ¥20 深信服vpn-2050这台设备如何配置才能成功联网?
  • ¥15 Arduino的wifi连接,如何关闭低功耗模式?
  • ¥15 Android studio 无法定位adb是什么问题?
  • ¥15 C#连接不上服务器,