我正在尝试完成“加速C++”练习3-2。我已经测试过了,下四分位数和中位数的计算是正确的,但上四分位数不是。计算给定数字列表的四分位数
例如,假设输入 “50,60,70,80,90,100”,将输出的四分位数为60,75,和80。
我有两个问题我希望处理:
1)上四分位数,在这种情况下,应该是90. 2)如何让我的程序显示我的数字的浮点数或双精度数?较低的一个更精确的四分位数是62.5,而不是60.
/* Write a program to compute and print the quartiles(quarter of the
* numbers with the largest values) of a set of integers
* The first quartile (Q1) is defined as the middle number between the smallest number and the median of the data set.
* The second quartile (Q2) is the median of the data.
* The third quartile (Q3) is the middle value between the median and the highest value of the data set.*/
#include <algorithm>
#include <iomanip>
#include <ios>
#include <iostream>
#include <string>
#include <vector>
using std::vector;
using std::endl;
using std::cout;
using std::cin;
int main() {
double x = 0;
double median, lowerQt, upperQt;
median = lowerQt = upperQt = 0;
vector<double> set;
typedef vector<double>::size_type vec_sz;
cout << "Enter integers followed by EOF: ";
while(cin >> x)
set.push_back(x);
vec_sz size = set.size();
if(size == 0) {
cout << "invalid" << endl;
return 1;
}
vec_sz mid = size/2;
vec_sz lower = mid/2;
vec_sz upper = size - mid;
sort(set.begin(), set.end());
median = size % 2 == 0 ? (set[mid] + set[mid - 1])/2 : set[mid];
lowerQt = mid % 2 == 0 ? (set[lower] + set[lower - 1])/2 : set[lower];
upperQt = mid % 2 == 0 ? (set[upper] + set[upper - 1])/2 : set[upper];
cout << lowerQt << endl << median << endl << upperQt;
}
上四分位数,最精确的四分之一?我只知道第一,第二和第三四分位数,任何单个项目都可能“处于上四分位数”。 – Swift
我指的是第一个四分位数为“下”,第三个为“上”。 –