首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >加十进制数

加十进制数
EN

Stack Overflow用户
提问于 2021-12-17 09:01:37
回答 1查看 120关注 0票数 -3

加十进制数是我的试题。我们的老师说正确的代码是这个(看下面),但问题是什么不起作用

这个问题是:9/10-11/12+13/14-15/16+.49/50编写一个c++程序来计算这个问题。

以下是代码:

代码语言:javascript
运行
复制
#include <iostream>
using namespace std;
int main()
{
    double x;
    int p = 1;
    double s = 0;
    for (x = 9.0; x < 49.0; x + 2.0)
    {
        s = s + x / (x + 1) * p;
    }
    p = -p;
    cout << "Total: " << s << endl;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-17 09:43:45

首先,您的代码的第一个错误是,在for-循环中,您输入了不是赋值语句的x + 2.0。因此,它实际上没有将2添加到x的值中。相反,您必须编写x += 2.0。第二个bug是,您必须将p = -p;放在循环中。否则,它不会有任何影响。

现在,通过修复这两个缺陷,它给出了Total: -0.0447071的结果,这是不正确的,应该是0.935293。这是因为您的for循环迭代了19次,而不是20,因为您忘记在x < 49.0;中键入<=而不是<,因此x会增加到47.0E 218,而不是E 11949.0>E 220>,这样循环就不会将最后一个数字加到和中。

也许这就是你想要的:

代码语言:javascript
运行
复制
#include <iostream>

int main( )
{
    int sign { 1 };
    double sum { };

    for ( std::size_t x = 9; x <= 49; x += 2 )
    {
        std::clog << "sum == " << sum << '\n';
        // here you have to cast both x and x+1 to double
        sum += static_cast<double>( x ) / static_cast<double>( x + 1 ) * sign;
        sign = -sign;
    }

    std::cout << "\nTotal: " << sum << '\n';
}

此外,除了for -循环的初始化变量的整型以外,不要使用任何其他类型。例如,根据您的情况使用std::size_tintint64_t等。

输出量

代码语言:javascript
运行
复制
sum == 0
sum == 0.9
sum == -0.0166667
sum == 0.911905
sum == -0.0255952
sum == 0.918849
sum == -0.0311508
sum == 0.923395
sum == -0.0349387
sum == 0.9266
sum == -0.0376859
sum == 0.928981
sum == -0.0397693
sum == 0.930819
sum == -0.0414032
sum == 0.932281
sum == -0.042719
sum == 0.933471
sum == -0.0438013
sum == 0.93446
sum == -0.0447071

Total: 0.935293

正如你所看到的,在这个例子中,经过20次迭代(因为(49-9)/2 == 20),总/和将是0.935293,所以我希望这是您的老师在他/她心中的想法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70390677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档