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

本文介绍了一个使用C++中的vector容器来计算多个学生综合成绩的程序。程序通过收集学生的期中成绩、期末成绩及三次作业成绩,计算出每个学生的最终成绩,并展示了如何计算家庭作业的中值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

利用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是形参,不会有任何改变。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值