原创 组织计算.cpp 使用函数计算学生的成绩

2009-3-16 13:47 1862 8 8 分类: 软件与OS

rar


#include <algorithm>
#include <iomanip>
#include <ios>
#include <iostream>
#include <string>
#include <vector>


using std::cin;    using std::cout;
using std::endl;   using std::string;
using std::setprecision; using std::streamsize;
using std::vector;   using std::sort;
using std::domain_error; using std::istream;



// compute a student's overall grade from midterm and final exam grades and homework grade
double grade(double midterm, double final, double homework)
{
 return 0.2 * midterm + 0.4 * final + 0.4 * homework;
}


double median(vector<double> vec)
{
 typedef vector<double>::size_type vec_sz;
 vec_sz size = vec.size();
 if (size == 0)
  throw domain_error("median of an empty vector");
 sort(vec.begin(), vec.end());
 vec_sz mid = size/2;
 return size % 2 == 0 ? (vec[mid] + vec[mid-1]) / 2 : vec[mid];
}


double grade(double midterm, double final, const vector<double>& hw)
{
 if (hw.size() == 0)
  throw domain_error("student hax done no homework");
 return grade(midterm, final, median(hw));
}


//read homework grades from an input stream into a vector<double>
istream& read_hw(istream& in, vector<double>& hw)
{
 //we must fill in this part
 if (in) {
  // get rid of previous contents
  hw.clear();


  //read homework grades
  double x;
  while (in >> x)
   hw.push_back(x);


  // clear the stream so that input will work for the next student
  in.clear();
 }
 return in;
}


int main()
{
 // ask for and read the student's name
 cout << "Please enter your first name: ";
 string name;
 cin >> name;
 cout << "Hello, " << name << "!" << endl;
 // ask for and read the midterm and final grades
 cout << "Please enter your midterm and final exam grades: ";
 double midterm, final;
 cin >> midterm >> final;


 // ask for the homework grades
 cout << "Enter all your homework grades, "
  "followed by end-of-file: ";


 vector<double> homework;


 //read the homework grades
 read_hw(cin, homework);


 //compute and generate the final grade, if possible
 try {
  double final_grade = grade(midterm, final, homework);
  streamsize prec = cout.precision();
  cout << "Your final grade is " << setprecision(3)
    << final_grade << setprecision(prec) << endl;
 } catch (domain_error) {
  cout << endl << "You must enter your grades. "
   "Please try again." << endl;
  system("PAUSE");
  return 1;
 }


 system("PAUSE");
 return 0;
}

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
8
关闭 站长推荐上一条 /3 下一条