【发布时间】:2014-11-10 10:56:46
【问题描述】:
显然我的程序中某处存在计算错误,但我根本找不到。
关于为什么会出现计算错误,我所拥有的唯一信息是 MyProgrammingLab(一个自动测试代码以查看其是否不正确的网站)给出的反馈。我不知道为年死亡率和年出生率输入了什么值来导致它。难道我是对的,但 MyProgrammingLab 是错的?老实说,我自己的所有测试似乎都很好。
预期输出:
Year 1: 200 176
Year 2: 176 154
Year 3: 154 135
Year 4: 135 118
Year 5: 118 103
Year 6: 103 90
Year 7: 90 79
实际输出:
Year 1: 200 199
Year 2: 199 198
Year 3: 198 197
Year 4: 197 196
Year 5: 196 195
Year 6: 195 194
Year 7: 194 193
我根据以下作业构建了程序:
在一个人口中,出生率是人口因出生而增加的百分比,而死亡率是人口因死亡而减少的百分比。编写一个要求以下内容的程序:
- 人口的起始规模(最小 2)(提示
Enter starting size:) - 年出生率(提示
Enter annual birth rate:) - 年死亡率(提示
Enter annual death rate:) - 要显示的年数(最少 1 个)(提示
Enter years to display:)
然后程序应显示每年年底的起始人口和预计人口。它应该使用一个函数来计算并返回一年后预计的新人口规模。公式是
N = P(1 + B)(1 - D)
其中 N 是新的人口规模,P 是以前的人口规模,B 是出生率,D 是死亡率。年出生率和死亡率是每 1000 人一年中的典型出生和死亡人数,以小数表示。因此,例如,如果在给定人口中每 1000 人中通常有大约 32 人出生和 26 人死亡,则出生率为 0.032,死亡率为 0.026。
我的代码:
#include <iostream>
using namespace std;
int projectedNewSize(float population, float annualBirthRate, float annualDeathRate) {
float annualBirthRate2 = annualBirthRate / 1000;
float annualDeathRate2 = annualDeathRate / 1000;
int newpopulation = population * (1 + annualBirthRate2) * (1 - annualDeathRate2);
return newpopulation;
}
int main() {
int populationStartingSize = 0;
float annualBirthRate = 0;
float annualDeathRate = 0;
int numberOfYearsToDisplay = 0;
do {
cout << "Enter starting population size: ";
cin >> populationStartingSize;
cout << "Enter annual birth rate: ";
cin >> annualBirthRate;
cout << "Enter annual death rate: ";
cin >> annualDeathRate;
cout << "Enter years to display: ";
cin >> numberOfYearsToDisplay;
} while (!(populationStartingSize >= 2) || !(numberOfYearsToDisplay >= 1));
int population;
for (int i = 1; i <= numberOfYearsToDisplay; i++) {
cout << "Year " << i << ": " << populationStartingSize << " ";
population = projectedNewSize(populationStartingSize, annualBirthRate, annualDeathRate);
cout << population << endl;
populationStartingSize = population;
}
system("pause");
return 0;
}
【问题讨论】:
-
+1 写得很好的问题。包括预期和实际输出、清晰的问题陈述、自己的初步努力和相关代码。
-
出生/死亡率是 int (32) 还是 float (0.032) ?因为您可以将不必要的除以 1000。并且在将浮点数转换为 int 以获取新的人口时,您正在截断,因此 200 减去非常小的值等于 199
-
@Learner - 是什么阻止您在
for循环中执行cout << annualBirthRate? -
“它们应该以 int 形式给出” -- 你给它们的说明在这一点上似乎不清楚。您是否尝试过不除以 1000,然后查看您得到的结果?
-
@Learner:查看 Florent 的评论。