You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++项目:整数转double实现人口出生率死亡率计算问题

解决C++人口出生率/死亡率计算的整数除法与逻辑问题

先给你修正后的完整代码,直接解决你提到的所有问题:

#include <iostream>
using namespace std;

class PopulationStats {
private:
    int population;
    int births;
    int deaths;

public:
    // 无参默认构造函数
    PopulationStats() : population(2), births(0), deaths(0) {}

    // 带三个参数的构造函数,调用Set函数复用校验逻辑
    PopulationStats(int pop, int b, int d) {
        SetPopulation(pop);
        SetBirths(b);
        SetDeaths(d);
    }

    // SetPopulation:小于2则设为2
    void SetPopulation(int pop) {
        population = (pop < 2) ? 2 : pop;
    }

    // SetBirths:小于0则设为0
    void SetBirths(int b) {
        births = (b < 0) ? 0 : b;
    }

    // SetDeaths:小于0则设为0
    void SetDeaths(int d) {
        deaths = (d < 0) ? 0 : d;
    }

    // 计算出生率:转换为double后做除法,返回百分比形式(比如0.1返回10.0)
    double getBirthrate() const {
        // 先把其中一个整数转成double,触发浮点数除法
        return (static_cast<double>(births) / population) * 100;
    }

    // 计算死亡率:同理转换为double
    double getDeathrate() const {
        return (static_cast<double>(deaths) / population) * 100;
    }
};

// 测试示例
int main() {
    PopulationStats stats(100, 10, 5);
    cout << "出生率: " << stats.getBirthrate() << "%" << endl; // 输出10%
    cout << "死亡率: " << stats.getDeathrate() << "%" << endl; // 输出5%

    // 测试非法输入的处理
    PopulationStats badStats(1, -5, 20);
    cout << "非法输入后的出生率: " << badStats.getBirthrate() << "%" << endl; // 人口被设为2,出生数设为0,输出0%
    cout << "非法输入后的死亡率: " << badStats.getDeathrate() << "%" << endl; // 20/2*100=1000%
    return 0;
}

关键问题的解决说明:

  • 整数除法问题:
    你之前的问题是births/population都是整数,C++会执行整数除法直接截断小数。解决方法是把其中一个操作数强制转换为double,比如static_cast<double>(births) / population,这样整个除法会自动提升为浮点数运算,得到正确的小数结果。最后乘以100是转成百分比形式,符合常规统计需求。

  • Set函数逻辑修正:
    用三元运算符简化判断逻辑,确保输入值不符合要求时自动修正:

    • 人口小于2时强制设为2,否则用传入值
    • 出生/死亡数小于0时强制设为0,否则用传入值
      带参构造函数直接调用Set函数,避免重复写校验逻辑,代码更简洁。
  • 构造函数实现:
    无参构造用初始化列表直接赋值,符合C++最佳实践;带参构造通过调用Set函数,确保传入的初始值也经过校验,避免非法值进入私有变量。

测试说明

运行示例代码后,你可以看到:

  1. 正常输入下,10/100会得到0.1,乘以100后输出10%的出生率
  2. 非法输入(人口1,出生数-5)会被自动修正为人口2、出生数0,计算出正确的0%出生率

内容的提问来源于stack exchange,提问作者dev1001

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 07:22:42