利用vector,如何实现一次可以计算多个学生的成绩呢?下面是代码:
// PE3-5--写一个程序,可以计算多个学生的成绩
// 时间:2012-12-19 21:54:23
#include <algorithm> // sort函数
#include <iomanip> // 定义控制符setprecision
#include <ios> // 定义输入输出库表示长度的streamsize类型
#include <iostream> // cout,cin类型 endl控制符
#include <string> // size_type类型等
#include <vector>
#define EOF 0;
using namespace std;
// 计算出家庭作业的中值
int hworkmid(vector<double> hwork, vector<double>& midhwork);
int main()
{
string str;
double mid, final;
vector<string> name;
vector<double> midterm, finalterm, midhwork;
double hwork;
vector<double> homework;
cout << "~~~~姓名:";
cin>>str;
do
{
name.push_back(str);
cout << "期中成绩:";
cin >> mid;
midterm.push_back(mid);
cout << "期末成绩:";
cin >> final;
finalterm.push_back(final);
int count = 0;
cout << "作业成绩(3次):" << endl;
do
{
count++;
cout << "~~~次数" << count << ": ";
cin >> hwork;
homework.push_back(hwork);
}while (count != 3);
// 家庭作业中值
hworkmid(homework, midhwork);
// 清空homework容器
homework.clear();
cout << "~~~~姓名:";
cin>>str;
} while ( str != "EOF");
cout << "学生的最终成绩:" << endl;
vector<double> grades;
int numbers = name.size();
for (int i=0; i != numbers; i++)
{
grades.push_back(midterm[i]*0.2 + finalterm[i]*0.4 + midhwork[i]*0.4);
cout << name[i] << ": " << grades[i] << endl;
}
return 0;
}
// 计算出家庭作业的中值
int hworkmid(vector<double> hwork, vector<double>& midhwork)
{
typedef vector<double>::size_type vec_sz;
vec_sz size = hwork.size();
if (size == 0)
{
cout << endl << "You must enter your grades. "
"Please try again." << endl;
return 1;
}
// 分数排序
sort(hwork.begin(), hwork.end());
// 计算家庭作业的中值
double median;
vec_sz mid = size/2;
median = size % 2 == 0 ? (hwork[mid] + hwork[mid -1]) / 2
: hwork[mid];
midhwork.push_back(median);
}
唯一需要注意的的是,在实现函数hworkmid的时候,参数为引用类型:
// 计算出家庭作业的中值
int hworkmid(vector<double> hwork, vector<double>& midhwork)
而非
int hworkmid(vector<double> hwork, vector<double>midhwork)
否则由于midhwork是形参,不会有任何改变。