#include<iostream>
#include <string>
#include <stdexcept>
#include <iomanip>
#include <algorithm>
#include <vector>
using namespace std;
//求排序後家庭作業成績中的中間成績
double median(vector<double> vec)
{
typedef vector<double>::size_type vec_size;
vec_size size = vec.size();
if (size == 0)
throw domain_error("沒有做一門家庭作業!---在求中間值函數中");
sort(vec.begin(),vec.end());
vec_size mid = size / 2;
return size % 2 == 0 ? (vec[mid - 1] + vec[mid]) / 2 : vec[mid];
}
//期末成績
double grade(double midterm, double final, double homework)
{
return 0.2 * midterm + 0.4 * final + 0.4 * homework;
}
//期末成績
double grade(double midterm, double final, const vector<double>& homework)
{
if( homework.size() == 0)
throw domain_error("沒有做過一門家庭作業!");
return grade(midterm, final, median(homework));
}
//讀取家庭作業成績
istream& read_hw(istream& in,vector<double>& hw
{
if(in)
{
hw.clear();
double x;
while (in>>x)
hw.push_back(x);
in.clear();
}
return in;
}
int main()
{
cout<<"請輸入您的姓名:";
string name;
cin>>name;
double midterm, final;
cout<<"請輸入期中、期末成績:";
cin>>midterm>>final;
cout<<"請輸入家庭作業成績用EOF結束:";
vector<double> homework;
read_hw(cin,homework);
try
{
double final_grade = grade(midterm, final, homework);
streamsize prec = cout.precision();
cout<<"你最終的期末成績:"<<setprecision(5)<<final_grade<<setprecision(prec)<<endl;
}
catch(domain_error)
{
cout<<"你必須輸入你的家庭作業成績!"<<endl;
}
return 0;
}
Vector求期末成績
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.