Ceil功能在寻找中位数

时间:2015-02-16 07:49:29

标签: c++

我正在使用Bjarne Stroustroup的“使用C ++编程原理和练习”学习C ++。在下面找到中位数的问题中,我对ceil函数有疑问。比如说,我输入了14个条目,然后a的值应为6,b的值应为7.但b的值为6。

#include "std_lib_facilities.h"

using namespace std;

int main() 
{ vector<double> temps;
  for(double temp;cin>>temp;)
     {temps.push_back(temp);
     }
  sort(temps);
  for(double temp : temps)
     cout << temp << " " ;
  int size = temps.size();

  if(size%2 == 0)
    { int a,b,c;
      a = temps[floor((size + 1)/2) - 1]; cout << a;
      **b = temps[ceil((size + 1)/2) - 1 ]; cout << b;**
      cout<<"Median temperature:"<<(a+b)/2<<'\n';
    }
  else
    cout<<"Median temperature:"<<temps[((size + 1)/2) - 1]<<'\n';
return 0;
}

std_lib_facilties.h link

1 个答案:

答案 0 :(得分:2)

由于sizeint(size+1)/2将执行整数除法,并且只返回除法的整个部分。如你所见,将ceil应用于它是毫无意义的。

您可以通过将size定义为double或将其内联投射来解决此问题:

**b = temps[ceil((((double)size) + 1)/2) - 1 ];