我的BR和DR成员函数的输出只给我零。我猜测我要么没有正确分配私有成员,要么没有正确使用它们。我知道有更简单的方法可以在没有课程的情况下完成这项工作但是这就是我的教授希望它完成的方式。请帮忙。
#include <iostream>
#include <iomanip>
using namespace std;
class Population
{
private:
//private variables
int births, deaths, population;
public:
//Member functons
void setpop(int); //sets population value
void setB(int); //sets birth value
void setD(int); //sets death value
double BR() const; //calculates birth-rate
double DR() const; //calculates death-rate
};
void Population::setpop(int p)
{
population = p; //assigns local variable from before to private member
}
void Population::setB(int b)
{
births = b; //assigns local variable from before to private member in class
}
void Population::setD(int d)
{
deaths = d; //assigns local variable from before to private member in class
}
double Population::BR() const
{
cout<<endl;
return births/population; //birth-rate
}
double Population::DR() const
{
cout<<endl;
return deaths/population; //death-rate
}
int main()
{
int localpopulation, localbirths, localdeaths; //local as in local variable
cout<<"Birth-Rate and Death-Rate program: "<<endl;
cout<<"Enter the population: ";
cin>>localpopulation;
//if statements to make sure the values qualify
if (localpopulation<1)
{
cout<<"Invalid population. Try again: ";
cin>>localpopulation;
}
cout<<endl;
cout<<"Enter the number of births: ";
cin>>localbirths;
if (localbirths<0)
{
cout<<"Invalid births. Try again: ";
cin>>localbirths;
}
cout<<endl;
cout<<"Enter deaths: ";
cin>>localdeaths;
if (localdeaths<0)
{
cout<<"Invalid deaths. Try again: ";
cin>>localdeaths;
}
Population object;
object.setpop(localpopulation);
object.setB(localbirths);
object.setD(localdeaths);
cout<<endl;
cout<<"The Birth-Rate is: "<<fixed<< setprecision(2)<<object.BR();
cout<<endl;
cout<<"The Death-Rate is: "<<fixed<< setprecision(2)<<object.DR();
}
此代码的示例输出:
出生率和死亡率计划: 输入人口:1000
输入出生人数:30
输入死亡人数:20
出生率为:0.00
死亡率是:0.00
答案 0 :(得分:2)
与sebenalem一样,C ++对不同类型使用不同的功能。
cout << double(1 / 2) << endl;
// Output: 0.0
C ++还有一个名为类型转换的功能,您可以在其中动态更改值类型以指示不同的内容。类型转换的一个例子:
cout << 1 / double(2) << endl;
// Output: 0.5
后一个示例在评估除法之前将2转换为double(2.0);然后,C ++将此评估视为&#39; 1 / 2.0&#39;而不是&#39; 1/2&#39;,将评估转换为浮点除法而不是整数除法。
您的值被截断的原因是您将整个除法的结果类型转换为双精度,并且您没有正确使用浮点除法。
如果你有时间,这里有一些很好的读物:
http://www.learncpp.com/cpp-tutorial/4-4a-explicit-type-conversion-casting/ http://www.learncpp.com/cpp-tutorial/44-implicit-type-conversion-coercion/
答案 1 :(得分:0)
一个问题是出生和死亡的变量是整数,所以当你使用这些方法时,整数除法就会发生。因此,结果的浮点部分将被截断。
因此,在您输入出生人数大于人口的情况之前,您将始终看到零
你可以将这些变量更改为double或float类型,这样就不会发生整数除法,或者更好的解决方法就是在执行和分割之前强制转换值。
每种方法中的return语句如下所示:
return births/double(population);
和强>
return deaths/double(population);