我在做这个问题时遇到了一些麻烦:
您的第一个程序是一个简单的数学计算程序。该程序将接受用户的输入。评估 f(x( 并在表格中显示结果。来自用户的输入将是:两个
double
xmin
和xmax
。符号常量(POINTS
(用于确定表中的行数。方程是两个余弦函数的总和;f(x( = 0.0572 cos(4.667 x( + 0.0218 π cos(12.22 x(; [等式1]
提示:
- 您可以在计算中使用
<cmath>
中找到的函数cos
。- π的值是一个命名常量,其值为 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
时,我不应该在下一个增量中看到值变化吗?帮帮我,我太困惑了。
您在整数除法和类型精度方面存在一些问题。
-
显然,您不想使用
double
精度上下文应用step
,因此step
本身应声明为double
类型:double step = .0;
-
表达式
(Xmax - Xmin) / POINTS
缺少整数除法,无法提供范围+-]0-1.0[
中的值。为了克服整数除法问题,至少将一个操作数转换为double
:double step = (double)(Xmax - Xmin) / POINTS;
现场演示
首先,使用初始化,而不是声明一个没有值的变量,然后为其赋值。因此,例如,删除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
值的输出语句。