sdut oj3-5 学生成绩统计

本文介绍了一个学生成绩统计系统的实现过程,该系统使用了C++语言,重点在于对象数组的应用,包括学生信息的输入、存储及成绩统计。文章通过具体实例展示了如何设计学生类并完成成绩的计算与展示。

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

题目链接:点击打开链接

3-5 学生成绩统计
Time Limit: 1000MS Memory Limit: 65536KB
Problem Description

通过本题目练习可以掌握对象数组的用法,主要是对象数组中数据的输入输出操作。

设计一个学生类Student 它具有私有的数据成员:学号、姓名、数学成绩、英语成绩、计算机成绩;具有公有的成员函数:求三门课总成绩的函数int sum(); 求三门课平均成绩的函数 double average(); 输出学生基本信息、总成绩和平均成绩的函数 void print(); 设置学生数据信息的函数void set_stu_info(int n,char *p,int m,int e,int c)。

请编写主函数,建立学生对象数组,从键盘输入一组学生数据,输出学生的成绩统计表:

stuID 姓名 数学 英语 计算机 总成绩 平均成绩

001 xxx 90 85 95 270 90.0

 

002 yyy 95 98 92 285 95.0
Input

输入数据有5行,代表5个学生的信息。

每行有5个数据,数据间用一个空格分隔,分别代表学生的学号、姓名、数学成绩、英语成绩和计算机成绩。除了姓名是符号串外,其他均为整型数据,数据在int类型范围内。
Output

输出数据一共有7行。

第一行输出提示信息“Input the messages of five students(StudentID Name Math English Computer )”

第二行输出一个空行,进行输入输出间的间隔

第三行输出表头“StuID Name Math Eng Com Total Average” ,这一行有7个数据,数据间用制表符’\t’分隔,分别代表学生的学号、姓名、数学成绩、英语成绩、计算机成绩、总成绩和平均成绩。其中平均成绩为实型数据,保留1位小数。

第4-8行分别输出5个学生的相关数据。每个数据占一个制表符的空间。格式同上。
Example Input

1001 Andy 89 90 93
1002 Mary 93 95 98
1003 Luis 90 85 98
1004 Sam 91 95 98
1005 Lily 87 98 99

Example Output

Input the messages of five students(StudentID Name Math English Computer )

StuID    Name    Math    Eng    Com    Total    Average
1001    Andy    89    90    93    272    90.7
1002    Mary    93    95    98    286    95.3
1003    Luis    90    85    98    273    91.0
1004    Sam    91    95    98    284    94.7
1005    Lily    87    98    99    284    94.7

Hint

代码实现:

#include <iostream>
#include <string.h>
#include <iomanip>
using namespace std;
const int maxn=10000+1000;
class Stud
{
private:
    string name;
    int num,math,eng,com;
public:
    int sum()
    {
        return math+eng+com;
    }
    double average()
    {
        return sum()*1.0/3;
    }
    void set_stu_info(int n,string p,int m,int e,int c)
    {
        num = n;math = m;
        eng = e;com = c;name = p;
    }
    void print()
    {
        cout<<num<<"\t"<<name<<"\t"<<math<<"\t"<<eng<<"\t"<<com<<"\t"<<sum()<<"\t";
        cout<<fixed<<setprecision(1)<<average()<<endl;
    }
};
int main()
{
    cout<<"Input the messages of five students(StudentID Name Math English Computer )"<<endl;
    Stud stu[maxn];
    for(int i=0;i<5;i++)
    {
        int a, b, c, d;
        string e;
        cin>>a>>e>>b>>c>>d;
        stu[i].set_stu_info(a, e, b, c, d);
    }
    cout<<endl;
    cout<<"StuID\tName\tMath\tEng\tCom\tTotal\tAverage"<<endl;
    for(int i=0;i<5;i++)
    {
        stu[i].print();
    }
    return 0;
}


SDUT-OJ(Software Development University of Tsinghua Online Judge)是一个在线编程平台,提供给清华大学软件学院的学生和爱好者练习和解决算法问的环境,其中包括各种计算机科学目,包括数据结构、算法、图形等。对于"最小生成树"(Minimum Spanning Tree, MST)问,它是图论中的经典问,目标是从一个加权无向图中找到一棵包含所有顶点的树,使得树的所有边的权重之和最小。 在C语言中,最常见的是使用Prim算法或Kruskal算法来求解最小生成树。Prim算法从一个顶点开始,逐步添加与当前生成树相连且权重最小的边,直到所有顶点都被包含;而Kruskal算法则是从小到大对所有边排序,每次选取没有形成环的新边加入到树中。 如果你想了解如何用C语言实现这些算法,这里简单概括一下: - 通常使用优先队列(堆)来存储边和它们的权重,以便快速查找最小值。 - 从任意一个顶点开始,遍历与其相邻的边,若新边不形成环,就更新树,并将新边加入优先队列。 - Kruskal算法: - 先将所有的边按照权重升序排序。 - 创建一个空的最小生成树,然后依次取出排序后的边,如果这条边连接的两个顶点不在同一个连通分量,则将其添加到树中。 如果你需要更详细的代码示例,或者有具体的问想了解(比如如何处理环、如何实现优先队列等),请告诉我,我会为你提供相应的帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值