我的程序中有计算错误吗
Is there a calculation error in my program?
显然我的程序中有一个计算错误,但我根本找不到。
关于为什么会出现计算错误,我所掌握的唯一信息是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人死亡,那么出生率将为.032,死亡率将为0.26。
我的代码:
#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;
}
所以,答案是
无需将年出生率和年死亡率除以1000。由于年出生率是按每1000人的年出生率计算的,因此无需再除以1000。
因此删除这些线路
float annualBirthRate2 = annualBirthRate / 1000;
float annualDeathRate2 = annualDeathRate / 1000;
和更改
int newpopulation = population * (1 + annualBirthRate2) * (1 - annualDeathRate2);
至
int newpopulation = population * (1 + annualBirthRate) * (1 - annualDeathRate);
所以,最后的代码看起来是这样的:
#include <iostream>
using namespace std;
int projectedNewSize(float population, float annualBirthRate, float annualDeathRate) {
int newpopulation = population * (1 + annualBirthRate) * (1 - annualDeathRate);
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;
}
你们在评论区讨论了一下,没有回答这个问题。。
int projectedNewSize(float population, float annualBirthRate, float annualDeathRate) {
int newpopulation = roundf(population * (1.0 + annualBirthRate) * (1.0 - annualDeathRate);
return newpopulation;
}
在计算中,如果已经在输入值中进行了计算,则不必考虑因子1000。但是,如果你想要一个"最准确"的表格,你必须在正确的头脑中对这些值进行四舍五入。计算的返回是一个浮点值。如果你把它赋给一个int,它总是会被截断。从一个循环到下一个循环,会有一点差异,最终与预期值产生一些合理的差异。最合适的方法是将"newcalculation"的类型更改为仅在显示值时浮动和舍入。
N=p+BP-DP
程序要求输入出生率和死亡率,假设用户输入5为5%。此处需要计算基本数学5/100=0.05
现在的公式是
N=p+(BP/100)-(DP/100)
更换
float annualBirthRate2 = annualBirthRate / 1000;
float annualDeathRate2 = annualDeathRate / 1000;
int newpopulation = population * (1 + annualBirthRate2) * (1 - annualDeathRate2);
带
int newpopulation = population + (population * birthRate/100) - (population * deathRate/100)
- (C++)分析树以计算返回错误值的简单算术表达式
- 我的字符计数代码计算错误.为什么
- OpenCV - Python 断言错误:SAD 算法 - 立体相机视差图计算
- 如何在常量计算表达式中获取编译时错误?
- 计算阶乘的 C++17 倍表达式中的错误
- 为什么 2 个双精度值之间的差值计算错误?
- 我在c++中遇到了一个奇怪的错误,其中一个计算2个小整数加法的语句溢出到一个长值中
- 错误 C2064:术语的计算结果不是采用 3 个参数的函数
- 错误:一元"*"的类型参数无效(具有"int"):使用 mergesort 计算
- C++ openmp 并行计算计算错误的结果
- 为什么按位运算符在使用与整数中提供的位数相同的位数计算可能的最大范围时会产生错误
- 术语不计算为函数采用 1 个参数错误?
- Travis CI 中奇怪的编译器错误不会在本地计算机上发生
- 点云库:计算筛选关键点 - 输入云错误
- 在线程错误 C2064 中:term 的计算结果不为 0 个参数的函数
- GetAsyncKeyState(VK_RETURN) 错误地计算为 true
- 错误 C2064:term 的计算结果不是采用 1 个参数的函数 - 关于线程的一些东西
- log2 计算在 CPP 中给出了错误的结果
- 错误计算RSI或错误在MetaTrader 4
- c++程序错误计算