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;
}
a
、b
、n
是整数。所以如下:
(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
我是 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;
}
a
、b
、n
是整数。所以如下:
(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