4-6.cpp

来自「Accelerated C++ 课后练习题 本人自己完成、可供参考」· C++ 代码 · 共 78 行

CPP
78
字号
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;

struct Student_info
{
	string name;
   double grade;
};


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];
}

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

//compute a student's overall grade from minterm and final exam grades
//and vector of homework grades
//this funtion does not copy its argument median does so far
double grade(double midterm,double final,const vector<double>& hw)
{
	if(hw.size()==0)
		throw domain_error("student has done no homework");
	return grade(midterm,final,median(hw));
}

int main()
{
	struct Student_info record;
	vector<Student_info> students;
	string s;
	double midterm,final,g;
	vector<double> homework;
	while(1)
	{		
		cin>>s;
		if(s=="exit")
			break;
		cout<<"please input midterm,final exam and homework grades"<<endl;
		if(cin>>midterm>>final)
		{
			homework.clear();
			while(cin>>g)
				homework.push_back(g);
			cin.clear();
		}
		else 
		{
			cout<<"The worry input! you have to reinput!"<<endl;
			return 1;
		}
		record.grade=grade(midterm,final,homework);
		record.name=s;
		students.push_back(record);
	}

	vector<struct Student_info>::size_type i=0;
	for(;i<students.size();++i)
		cout<<students[i].name<<students[i].grade<<endl;

	return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?