#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求期末成绩
时间: 2024-10-31 06:57:25