我的评价是:✓10计算机我恨你 2024-09-26 18:20 采纳率: 50%
浏览 1

帮帮我万能的网友先生

这两段代码到底有什么区别为什么第1个跑出来的结果是错误的啊,比第2个少了一个1


#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
int main()
{
    long double n,a,m,x;
    a=pow(10,14);
    for (n=1;n<=50000;n++)
    {
        m=1/n;
        x=m++;
    }
    cout<<fixed<<setprecision(6);
    cout<<"S=10^14+1+1/2+1/3+...+1/n"<<endl;
    cout<<"S="<<a+x<<endl;
    return 0;
}
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
int main()
{
    long double n,m,a,b;
    b=pow(10,14);
    for (n=1;n<=50000;n++)
    {
        m=1/n;
        a=m++;
    }
    cout<<fixed<<setprecision(6);
    cout<<"S="<<b+m<<endl;
    return 0;
}

  • 写回答

1条回答 默认 最新

  • 一轮明月照丘壑 2024-09-26 18:24
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    在您的C++代码中,存在一个逻辑错误。您在第一行的main()函数中声明了变量m,但是它并没有被初始化为任何值。因此,在循环体中尝试将m的值增加到1会导致编译器报错。

    在第二行的for循环中,您可以正确地初始化m并将其设置为1除以n。这样,当循环执行时,m将按预期递增。

    以下是修复后的代码:

    #include <iostream>
    #include <cmath>
    #include <iomanip>
    using namespace std;
    
    int main() {
        const long double N = 1e14; // 定义常量N
        long double sum = 0.0, m = 1.0 / N;
        
        for(long double i = 1; i <= N; ++i) { // 修改此处的循环条件
            sum += m;
        }
    
        cout << fixed << setprecision(6);
        cout << "S=" << sum + 1 << endl;
        return 0;
    }
    

    请注意,这里我已经将m初始化为1.0/N,并且循环的终止条件从n <= 50000更改为i <= N,以确保每次迭代都会计算正确的项数。此外,我还添加了const关键字来限制N的大小,因为pow(10, 14)是一个非常大的数值,可能导致溢出问题。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月26日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?