for 循环帮助。在不应该的时候终止。 C++

for loop help. Terminates when it isnt supposed to. c++

我是 Whosebug 的新手,但我确实尝试寻找答案但找不到。我自己似乎也想不通。所以对于学校的 C++ 项目,我们需要找到曲线下的面积。我把所有的公式都硬编码进去了,所以不用担心。因此,程序应该给出具有更高 (n) 值的更高精度答案。但似乎当我为 (n) 设置一个高于 (b) 的值时,程序只是循环 0 而不会终止。你们能帮帮我吗?谢谢你。这是代码:

/* David */

#include <iostream>
using namespace std;

int main()
{

cout << "Please Enter Lower Limit: " << endl;
int a;
cin >> a;

cout << "Please Enter Upper Limit: " << endl;
int b;
cin >> b;

cout << "Please Enter Sub Intervals: " << endl;
int n;
cin >> n;

double Dx = (b - a) / n;
double A = 0;
double X = a;

for (X = a; X <= (b - Dx); X += Dx)
{
    A = A + (X*X*Dx);
    X = X * Dx;
    cout << A << endl;
}

cout << "The area under the curve is: " << A << endl;

return 0;
}

abn 是整数。所以如下:

(b - a) / n

大概是0,可以换成:

double(b - a) / n

由于 (b - a) / n 中的所有变量都是 int,您正在进行整数除法,这会丢弃结果中的分数。分配给 double 不会改变这一点。

您应该将至少一个变量转换为 double,这样您将得到保留小数部分的浮点数结果:

double Dx = (b - a) / (double)n;

其他答案正确。您的问题可能是整数除法。您必须对操作数进行转换才能加倍。

但是你应该使用static_cast<> instead of C-style casts。即使用

static_cast<double>(b - a) / n

而不是 double(b - a) / n((double) (b - a)) / n

您正在执行整数除法。整数除法将只return整数通过截断小数:

3/2 == 1 //Because 1.5 will get cut to 1
3/3 == 1
3/4 == 0 //Because 0.5 will get cut to 0

“/”左边或右边的两个值中至少有一个是小数类型。

3 / 2.0f == 1.5f
3.0f / 2 == 1.5f
3.0f / 2.0f == 1.5f