如何解决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: %i\n",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/10/100... 分别为单个/数十/数百...输入增加。输入 9 时为 1.25。这就是小数很重要的地方。从技术上讲,每 4 年我会额外获得 1 次。说 18 岁结束应该是 8 年。
谢谢。
解决方法
主要问题是您使用的是“long”,它与“long int”相同,因此它不会为您的除法提供任何精度。 您可以改用“long double”,这样它也会为您提供小数。
,用人口初始化 tmp 并删除在年份调整中添加的人口。每次迭代都会增加人口,创造超出年度调整的增长。与平衡支票账户类似,您不会将原始余额添加到每笔交易中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。