c.人口增长数学问题



我已经看了一遍,想知道我的数学问题在哪里。我认为它应该计算正确,但浮点值没有四舍五入,0.75比1加在出生/死亡计数上。我是c的新手。以下是我迄今为止的代码:

float births(long popul);
float deaths(long pop);
long yearAdjustment(long pop);
int threshold(long population, long end);
int main(void){
long begin = 0;
long end = 0;
int year = 0;
float input = 0.0;
do{
// TODO: Prompt for start size
input = get_float("Beginning population: ");
begin = (long) roundf(input);
} while (begin < 9);
do{
// TODO: Prompt for end size
input = get_float("Ending population: ");
end = (long) roundf(input);
} while (end < begin || end <= 0);
if(begin == end)
{
year = 0;
} else
{
year = threshold(begin, end);
}
// TODO: Print number of years
printf("Years: %in", year);
}

float births(long pop){
float tmp = pop / 3;
return tmp;
}
float deaths(long pop){
float tmp = pop / 4;
return tmp;
}
long yearAdjustment(long pop){
long tmp = pop + ((long) roundf(births(pop) - deaths(pop)));
return tmp;
}
int threshold(long population, long end){
int years = 0;
long tmp = 0;
// TODO: Calculate number of years until we reach threshold
while (tmp < end){
tmp += yearAdjustment(population);
years++;
}
return years;
}

我用long是因为数字可能从几千开始。浮动是为了在出生/死亡的划分中有一点精确性,更接近四舍五入。从本质上讲,它应该增加大约1/100/100…分别为单个/十个/数百个。。。输入1.25的输入。这就是小数的重要性所在。从技术上讲,每4年我会多赚1英镑。比方说18岁应该是8年。

谢谢。

主要问题是您使用的是'long',与'long-int'相同,因此它不会给您的除法带来任何精度。你可以使用"长双精度",这样它也会给你小数。

使用总体初始化tmp,并删除在年度调整中添加的总体。每一次迭代都会增加人口,从而在年度调整后创造增长。与平衡支票账户类似,您不会将原始余额添加到每笔交易中。

相关内容

  • 没有找到相关文章

最新更新