您的位置:首页 > 编程语言 > C语言/C++

C++ Vector实现计算多个学生成绩

2012-12-20 14:34 399 查看
利用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是形参,不会有任何改变。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐