我在做这个问题时遇到了一些麻烦:
您的第一个程序是一个简单的数学计算程序。该程序将接收用户的输入。评估 f ( x )并在表格中显示结果。用户的输入将是:两个
double
sxmin
和xmax
。符号常量(POINTS
)用于确定表中的行数。等式是两个余弦函数的总和;f ( x )= 0.0572 cos(4.667
)+0.0218πcos(12.22 x ) ; [等式1] 提示:
- 您可以在计算中使用
cos
中的<cmath>
功能。- π的值是一个命名常量,其值为3.1416;
方法:
- 定义符号常量(
POINTS
)以将行数设置为20,- 向用户询问
的值xmin
和xmax
;- 使用上面的三个值(
POINTS
,xmin
和xmax
)计算x
上的增量值;- 使用公式1计算 f ( x )的值;
- 使用以下格式显示表格:
醇>假设
POINTS
的值为21,用户输入xmin
= -2且xmax
= 2;然后你的程序应该显示如下表:X-Value | Y-Value __________|__________ -2 -0.0043 -1.8 -0.0982 -1.6 +0.0378 -1.4 +0.0438 -1.2 +0.0099 -1 +0.0618 -0.8 -0.1118 -0.6 -0.0198 -0.4 -0.0047 -0.2 -0.0184 0 +0.1257 0.2 -0.0184 0.4 -0.0047 0.6 -0.0198 0.8 -0.1118 1 0.0618 1.2 0.0099 1.4 0.0438 1.6 0.0738 1.8 -0.0982 2 -0.0043 ─────────────────────
到目前为止,我得到了第1部分到第4部分,但我正在努力学习第5部分。这就是我的代码。
#include <iostream>
#include <string>
#include <cmath>
#define pi 3.1416
#define POINTS 20
using namespace std;
int main()
{
int Xmin, Xmax;
int step;
cout << "Enter a value for xMin and xMax:\n";
cin >> Xmin >> Xmax;
double x, y;
step = (Xmax - Xmin) / POINTS;
cout << "X-VALUES " << "" << "| " << "" << "Y-VALUES" << endl;
cout << "_________" << "" << "|_" << "" << "_________" << endl;
for (int i = 0; i < POINTS; ++i)
{
x = Xmin + (step * i);
y = 0.0572 * cos(4.667 * x) + 0.0218 * pi * cos(12.22 * x);
cout << x << "\t " << y << endl;
}
cout << "____________________" << endl;
return 0;
}
它可以完成所有操作,但不会打印正确的值。这是从我的代码中打印的内容:
Enter a value for xMin and xMax:
-2
2
X-Value | Y-Value
__________|__________
-2 -0.0043
-2 -0.0043
-2 -0.0043
-2 -0.0043
-2 -0.0043
-2 -0.0043
-2 -0.0043
-2 -0.0043
-2 -0.0043
-2 -0.0043
-2 -0.0043
-2 -0.0043
-2 -0.0043
-2 -0.0043
-2 -0.0043
-2 -0.0043
-2 -0.0043
-2 -0.0043
-2 -0.0043
-2 -0.0043
-2 -0.0043
─────────────────────
我不知道我做错了什么。我无法像第5部分中的表格那样得到完全相同的值。它只是重复了20次。 i
递增1,所以当程序输出x
和y
时,我不应该看到下一个增量的值更改?帮助我,我很困惑。
答案 0 :(得分:0)
整数除法和类型精度存在一些问题。
显然,您不能将step
应用double
精度上下文,因此step
本身应声明为double
类型:
double step = .0;
表达式(Xmax - Xmin) / POINTS
缺少整数除法,它不能提供 +-]0-1.0[
范围内的值。要克服整数除法问题,请至少将一个操作数转换为double
:
double step = (double)(Xmax - Xmin) / POINTS;
答案 1 :(得分:-1)
首先,使用初始化,而不是声明没有值的变量,然后为其赋值。因此,例如,删除double x, y;
并更改以下两行:
x = Xmin + (step * i);
y = 0.0572 * cos(4.667 * x) + 0.0218 * pi * cos(12.22 * x);
到这些:
double x = Xmin + (step * i);
double y = 0.0572 * cos(4.667 * x) + 0.0218 * pi * cos(12.22 * x);
这样可以更容易地查看表达式中涉及的类型。
现在对变量step
执行相同的操作。如果在执行此操作时问题不是很明显,请添加一个显示step
值的输出语句。