growthRate功能(截至2010年11月12日晚8点)
#include "header.h"
float growthRate (float birthRate, float deathRate)
{
float growthrt;
growthrt = (birthRate) - (deathRate);
cout << growthrt << endl;
return growthrt;
}
估计人口功能(截至2010年11月12日晚8点)
#include "header.h"
float estimatedPopulation (float currentPopulation, float years, float birthRate, float deathRate)
{
int x;
float newPopulation;
for (x = 0; x < years; x++)
{
newPopulation = currentPopulation + currentPopulation * (growthRate (birthRate, deathRate) / 100);
currentPopulation = newPopulation;
cout << newPopulation << endl;
}
return newPopulation;
}
输出功能(截至2010年11月12日晚8点)
#include "header.h"
void output (float currentPopulation, float years)
{
cout << estimatedPopulation (currentPopulation, years) << endl;
}
主要功能 :(截至2010年12月11日晚8点)
#include "header.h"
int main ()
{
float currentPopulation, birthRate, deathRate, years;
char response;
do //main loop
{
input (currentPopulation, birthRate, deathRate, years);
growthRate (birthRate, deathRate);
estimatedPopulation (currentPopulation, years, birthRate, deathRate);
output (currentPopulation, years, birthRate, deathRate);
cout << "\n Would you like another population estimation? (y,n) ";
cin >> response;
}
while (response == 'Y' || response == 'y');
myLabel ("5-19", "12/09/2010");
system ("Pause");
return 0;
}
编辑(2010年11月12日晚8点)
解决!参数,参数,参数!感谢大家的投入。
答案 0 :(得分:3)
你有两个主要问题。
第一个问题是,estimatedPopulation
的返回值为int
。因此,当评估表达式的结果时,它将转换为int
,将其向下舍入。除非currentPopulation * growthrt / 100
的结果大于1,否则你永远不会看到变化。我认为你最后一个例子也有同样的问题。
另一个问题是您不断为newPopulation
变量分配相同的值。您可能希望在循环中调整currentPopulation
。
@Matt:看起来你没有使用函数的返回值,例如:
something = estimatedPopulation(currentPopulation, years);
(顺便说一句 - 该功能应该采用4个参数???)
请注意,当你传入一个'int'时,函数中的变量是函数的局部变量 - 修改它对函数外同名变量没有影响。看起来非常像你期待的那样。如果您确实想要修改传入的值,可以尝试以下方法:
void estimatedPopulation(int &newPopulation....) {
这会通过引用传递中的变量,以便您可以在函数中实际修改它。
答案 1 :(得分:2)
循环迭代时没有更新newPopulation
或currentPopulation
,因此newPopulation
只会被相同的值多次覆盖。我想在那个循环中的某个点你想要一个像currentPopulation = newPopulation;
编辑添加:
现在您添加了main
函数:您正在将所有函数调用视为void
类型。也就是说,您实际上并未使用estimatedPopulation
或growthRate
中的任何返回值,因此我很遗憾您在output
函数中打印了除垃圾值之外的任何内容,它的论点从未设定过。
答案 2 :(得分:1)
您将newPopulation作为参数传递,但是按值,而不是通过引用或指针传递。所以它没有被你的代码更新。
你也没有触及那个变量,所以它只会进行一次迭代。
答案 3 :(得分:1)
除了其他人所说的内容之外,看起来growthrt
被分为100次,一次在函数growthRate
内,再次在estimatedPopulation
的循环内。
一旦你更新内容,你将遇到的另一件事是循环运行years+1
次,这可能比你想要的多。
答案 4 :(得分:0)
我认为这只是一个用整数进行四舍五入的情况,说“currentpopulation”是100,“growthrt”是0.1。然后:总和变成:
100 + 100 * 0.1 / 100 = 100.1;
- 然后将其设置为下一个“newPopulation”。然而,由于新的人口是一个整数,它再次向下舍入到100!
更好地将“newPopulation”更改为双/浮点数(并且可能在函数结束时将其再次向下舍入)
答案 5 :(得分:0)
您没有看到此代码存在问题?
void output ()
{
float currentPopulation, years;
cout << estimatedPopulation (currentPopulation, years) << endl;
}
如果你真的不明白为什么这是错的,那么你应该从更简单的程序开始。