大家好,我是C++编程的新手,我被分配了一个项目,我必须建立一个程序来计算人口的平均出生率和死亡率百分比。我目前停留在这一步,我需要将整数值转换为双精度值以获得正确的输出。例如,求出生率的函数是(出生数/人口),由于整数相除导致浮点数被截断,结果为0,而不是(10/100等于0.1)。我知道我声明了整数,但这是必需的。我考虑过类型转换,但没有转换值的运气。我为冗长的解释道歉,我希望它是有意义的。提前感谢!
这是以下标准:
1.私有变量:必须为整数(人口、出生、死亡)
1.公共职能:
*默认构造函数不带参数,初始化(population = 2),(birth & deaths = 0)
*构造函数带有三个参数。构造函数应该为Population对象传递人口、出生人数和死亡人数。
1.“设置”成员函数用于三个成员变量中的每一个。如果人口数字小于2并传递给类,则使用默认值2。如果传递的出生或死亡数字小于0,则使用默认值0。
1.getBirthrate成员函数。根据以下公式计算出生率:(出生率=出生人数/人口)
1.getDeathrate成员函数。根据以下公式计算死亡率:(死亡率=死亡人数/人口)
#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
// Population class declaration
class Population
{
private:
int population, births, deaths;
public:
// default constructor: with no parameters
Population()
{
population = 2;
births = 0;
deaths = 0;
}
// constructor
Population(int p, int b, int d)
{
population = p;
births = b;
deaths = d;
}
// birthrate member function
int getBirthrate();
// deathrate member function
int getDeathrate();
void setPopulation(int);
void setBirth(int);
void setDeath(int);
int getPopulation();
int getBirth(int);
int getDeaths(int);
};
// member functions
void Population::setPopulation(int p)
{
if (population < 2)
{
population = 2;
cout << "Error: Invalid population input!" << endl;
}
else
{
population = p;
}
}
void Population::setBirth(int b)
{
if (births < 0)
{
births = 0;
cout << "Error: Invalid births input!" << endl;
}
else
{
births = b;
}
}
void Population::setDeath(int d)
{
if (deaths < 0)
{
deaths = 0;
cout << "Error: Invalid deaths input!" << endl;
}
else
{
deaths = d;
}
}
int Population::getPopulation()
{
return population;
}
int Population::getBirth(int)
{
return births;
}
int Population::getDeaths(int)
{
return deaths;
}
// calculating functions
int Population::getBirthrate()
{
return births / population;
}
int Population::getDeathrate()
{
return deaths / population;
}
// main function
int main()
{
// instantiation of a population object
Population x;
int xBirths, xDeaths, xPopulation;
// getting the values
cout << "What is the population: " << endl;
cin >> xPopulation;
cout << "What is the number of births: " << endl;
cin >> xBirths;
cout << "What are the number of deaths: " << endl;
cin >> xDeaths;
// set functions
x.setPopulation(xPopulation);
x.setBirth(xBirths);
x.setDeath(xDeaths);
// calculating the values
cout << "The population is: " << x.getPopulation() << endl;
cout << "The birthrate is: " << x.getBirthrate() << endl;
cout << "The deathrate is: " << x.getDeathrate() << endl;
return 0;
}
2条答案
按热度按时间juud5qan1#
我猜你有两个问题
第一个问题是,正如你所指出的,你正在做整数除法,你可以通过类型转换来解决这个问题;第二个问题是,你的函数返回一个整数,而从上面的问题看,你似乎想要一个浮点结果,例如10/100 = 0.1。这个问题的解决方案是将返回类型改为
double
。所以把这两个放在一起
xiozqbni2#
而不是这样:
执行以下操作:
将整数乘以1.0将它们转换为双精度。