微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c中的人口增长数学问题

如何解决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 举报,一经查实,本站将立刻删除。