加十进制数是我的试题。我们的老师说正确的代码是这个(看下面),但问题是什么不起作用
这个问题是:9/10-11/12+13/14-15/16+.49/50编写一个c++程序来计算这个问题。
以下是代码:
#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;
}
发布于 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 119
49.0>E 220>,这样循环就不会将最后一个数字加到和中。
也许这就是你想要的:
#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_t
、int
或int64_t
等。
输出量
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,所以我希望这是您的老师在他/她心中的想法。
https://stackoverflow.com/questions/70390677
复制相似问题