我正在使用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;
}
答案 0 :(得分:2)
由于size
是int
,(size+1)/2
将执行整数除法,并且只返回除法的整个部分。如你所见,将ceil
应用于它是毫无意义的。
您可以通过将size
定义为double
或将其内联投射来解决此问题:
**b = temps[ceil((((double)size) + 1)/2) - 1 ];