所以,我写了一些代码:
#include <iostream>
#include <cmath>
int main() {
int a,b,n;
std::cin >> a >> b >> n;
double xi[n];
double yi[n];
double h = (b - a + 0.0) / n + 0.0;
for (int i = 0; i <= n; ++i) { //filling the arrays
xi[i] = a + (h*i);
yi[i] = xi[i]*xi[i]*std::acos(0.9*xi[i]); //the
}
for (int i = 0; i <= 5; ++i) { //displaying first 5 elements of the arrays
std::cout << "x" << i << ": " << xi[i] << "\n";
std::cout << "y" << i << ": " << yi[i] << "\n\n";
}
return 0;
}
如果您尝试使用 a = 0、b = 1 和 n = 10 运行它(后来我发现任何能被 10 整除的数字都会给出类似的结果),那么您将看到 x0 = 0.451027,而不是 x0 = 0。
我尝试强制将其假定值分配给 xi[0]
if (i == 0) {
xi[i] = a;
}
现在x0仍然等于这个0.451027废话,但如果在第一种情况下y0的值是正确的(0),强制分配它是9.2684e-315,如果你认为这几乎是正确的,但仍然不是0。 static_cast对于解开这个谜团也束手无策。
这感觉很超现实,但它却在一次又一次的跑步中发生。可以修复吗?
数组边界:你的循环
for (int i = 0; i <= n; ++i)
会给你带来各种麻烦,因为你访问的 xi 和 yi 越界。 C++ 中的数组是零索引的,因此您应该从 0 循环到 n-1。像这样:for (int i = 0; i < n; ++i)
。
这解决了问题。