`
聆湖听风
  • 浏览: 1056 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

c++一个面向对象的评委评分问题

C++ 
阅读更多
最近做一个大赛评分的小程序,使用面向对象方式做的,代码如下:
#include <iostream>
#include <cstring>
using namespace std;
const unsigned JudgeNum = 5;
const unsigned PlayerNum = 5;

class CompetitionResult
{
    short num;                                           //选手号码
    char name[10];                                       //选手姓名
    float score[JudgeNum];                               //记录各评委给选手的打分
    float average;                                       //选手最后得分,去掉一个最高分和一个最低分的平均得分
public:
    CompetitionResult();                                 //无参构造函数
    CompetitionResult(short n,char* ps);                  //一般构造函数
    float MaxScore();                                    //求评委打的最高分
    float MinScore();                                    //求评委打的最低分
    void SavAvg();                                       //求选手最后得分
    float GetAvg()
    {
        return average;   //读选手最后得分
    }
    short GetNo()
    {
        return num;   //读选手的编号
    }
    void SetNo(int i)
    {
        num=i;   //设置选手的编号
    }
	void SetName(char* p)   //设置选手姓名
	{
	  strcpy(name,p);
	}
    char* GetName()
    {
        return name;   //读选手的姓名
    }
    float GetScore(int j)
    {
        return score[j-1];   //读第j个评委的打分
    }
    void SetScore(int k,float av)
    {
        score[k-1]=av;   //记录第K个评委的打分
    }
    friend void Sort(CompetitionResult* pr,int n);       //按最后得分由高到低排序
};

CompetitionResult::CompetitionResult()
{
}

CompetitionResult::CompetitionResult(short n,char* ps)
{
  num=n;
  strcpy(name,ps);
  for(int i=0;i<JudgeNum;i++)
    score[i]=0.0;
}

float CompetitionResult::MaxScore()
{
    unsigned i,j;
    for(i=0; i<JudgeNum; i++)
        for(j=0; j<JudgeNum-i; j++)
            if(GetScore(j)>GetScore(j+1))
            {
                score[j-1]+=score[j];
                score[j]=score[j-1]-score[j];
                score[j-1]=score[j-1]-score[j];
            }
    return score[JudgeNum-1];
}

float CompetitionResult::MinScore()
{
    unsigned i,j;
    for(i=0; i<JudgeNum; i++)
        for(j=0; j<JudgeNum-i; j++)
            if(GetScore(j)>GetScore(j+1))
            {
                score[j-1]+=score[j];
                score[j]=score[j-1]-score[j];
                score[j-1]=score[j-1]-score[j];
            }
    return score[0];
}

void CompetitionResult::SavAvg()
{
    int i;
    float sum=0.0;
    for(i=1; i<=JudgeNum; i++)
        sum+=GetScore(i);
    sum=sum-MaxScore()-MinScore();
    average=sum/(JudgeNum-2);
}
void Sort(CompetitionResult* pr,int n)
{
    int i,j;
    CompetitionResult temp;
    for(i=0;i<n-1;i++)
        for(j=0;j<n-1-i;j++)
            if(pr[j].GetAvg()<pr[j+1].GetAvg())
            {
                temp=pr[j];
                pr[j]=pr[j+1];
                pr[j+1]=temp;
            }

    cout<<n<<"个选手排名为:"<<endl;
    for(i=0; i<n-1; i++)
    {
        cout<<"第"<<i+1<<"名:";
        cout<<"选手"<<pr[i].num<<"号,";
        cout<<"姓名"<<pr[i].GetName()<<",";
        cout<<"得分"<<pr[j].average<<endl;
    }
}


int main()
{
    CompetitionResult pr[PlayerNum];
    unsigned i,j;
    float scorein=0.0;
    char p[10]="Noname";
	//CompetitionResult();
    /*for(i=0;i<PlayerNum;i++)
      CompetitionResult pr[i](0,p);*/
    for(i=0; i<PlayerNum;i++)
    {
      cout<<"请输入第"<<i+1<<"位的姓名(不超过10个字符):"<<endl;
	  cin>>p;
	  pr[i].SetName(p);
	  cout<<"请为第"<<i+1<<"位选手打分: "<<endl;
        pr[i].SetNo(i+1);
        for(j=0;j<JudgeNum;j++)
        {
            cin>>scorein;
            pr[i].SetScore(j+1,scorein);
        }
    }
	cout<<"***********************"<<endl;
    for(j=0; j<PlayerNum; j++)
    {
        cout<<"编号"<<j+1<<endl;
        cout<<"最高分:";
        cout<<pr[j].MaxScore()<<endl;
        cout<<"最低分:";
        cout<<pr[j].MinScore()<<endl;
        cout<<"平均分:";
        pr[j].SavAvg();
        cout<<pr[j].GetAvg()<<endl;
        cout<<"***********************"<<endl;
    }
    Sort(pr,PlayerNum);
    return 0;
}

但是在编译运行后,排名时的平均分和求出来的平均分不一样,我不知道是不是交换值后原有的average被冲掉了,大家看看出错在什么地方。谢谢!
分享到:
评论

相关推荐

    C++课程设计_大赛打分评分系统_报告&代码

    在本项目中,"C++课程设计_大赛打分评分系统_报告&代码"是一个针对学生或编程爱好者设计的实践项目,旨在通过实际操作来深化对C++编程语言的理解,并应用到具体的应用场景中——一个大赛打分评分系统。这个系统能够...

    歌唱比赛评分系统

    C++是一种强大的、面向对象的编程语言,适用于构建高效、可靠且可扩展的软件。 在设计这样一个评分系统时,首先需要考虑以下几个核心知识点: 1. **数据结构**:评分系统需要存储参赛者的相关信息,如姓名、参赛...

    演讲比赛评委打分系统,使用 C++ &amp; Qt 5 开发.zip

    **C++编程语言**:C++是一种中级语言,结合了C语言的效率和面向对象编程的强大功能。在本项目中,C++用于实现系统的后端逻辑,包括数据处理、算法计算、与数据库交互等功能。C++的特性使得代码运行速度快,且能够...

    比赛评委打分系统

    1. **多评委评分**:系统允许设定12名评委同时对参赛者进行打分,确保了评分的全面性和公正性。 2. **异常值处理**:在计算最终得分时,系统会自动剔除最高分和最低分,以减少极端评分对整体结果的影响,提高评分的...

    用c++编写的几个例子

    提供的压缩包包含四个不同的C++项目实例,它们涵盖了基础到中等难度的编程概念,旨在帮助学习者理解面向对象编程、数据管理以及用户交互。以下是对每个系统的基本介绍和相关知识点: 1. **学生成绩管理系统** 这个...

    c++教材习题以及综合练习

    首先,代码提供了一个简单的冒泡排序算法,用于对评委的评分进行排序。然后,通过去除最高分和最低分(也就是数组的第一个和最后一个元素),计算剩下的评分的平均值。这有助于减少极端值对平均值的影响,更准确地...

    C++ 舞蹈比赛

    在本项目中,"C++ 舞蹈比赛"是一个基于C++编程语言的课程设计作业,旨在让学生深入理解和应用C++的知识,同时培养他们的创新思维和编程实践能力。这个项目可能涵盖了C++中的多种核心概念和技术,如类与对象、继承、...

    C++ 演讲比赛,内容的封装

    在C++编程领域,"内容的封装"是一个核心概念,它是面向对象编程(OOP)的三大特性之一,另外两个是继承和多态。封装是将数据和操作这些数据的方法捆绑在一起,形成一个独立的实体,这个实体被称为类。在这个"C++演讲...

    C++参赛结果处理

    - 如果评委数量`m`小于9,则去除一个最高分和一个最低分后计算剩余分数的平均值。 - 如果评委数量`m`大于或等于9,则去除两个最高分和两个最低分后计算剩余分数的平均值。 3. **输出结果**:参赛选手的编号、姓名...

    c++课程设计题目包含算法设计与文件操作

    面向对象的方式可以创建一个Fibonacci类,包含计算下一个数字的方法。 2. **四则运算题生成**:程序应能生成随机的加减乘除运算题,并接受用户的答案。通过rand()函数生成随机数,根据用户需求调整运算类型和数字...

    运动员评分系统

    当五个评委为运动员打分后,系统会自动去除一个最高分和一个最低分,这是为了避免极端分数对平均成绩造成过大的影响,确保评分的公正性。去最高最低分的算法简单但实用,它体现了统计学上的中位数概念,即在一组数值...

    C++演讲比赛流程管理系统源码.zip

    设计模式是解决常见问题的最佳实践,如单例模式用于确保类只有一个实例,工厂模式用于动态创建对象,观察者模式用于实现事件驱动。这些模式的运用可以提升系统的可扩展性和可维护性。 除此之外,考虑到比赛流程的...

    每天学点C++(C++实例教程:教程+源码)演讲比赛流程管理系统.zip

    在本资源中,我们主要关注的是“每天学点C++”这一主题,特别是通过一个具体的实例——演讲比赛流程管理系统,来深入理解C++编程语言。C++是一种强大的、通用的编程语言,它提供了面向对象编程的特性,同时也支持...

    C++课程设计——对参赛结果进行处理(有源码)

    - 评分规则:根据题目描述,当评委人数m小于9时,要去掉一个最高分和一个最低分;当m大于等于9时,要去掉两个最高分和两个最低分。这需要对评委给出的分数进行排序,然后根据m的大小选择性地去除极端值。 - 平均值...

    C++演讲比赛流程管理系统

    总的来说,C++演讲比赛流程管理系统是一个集成了C++编程技术、面向对象设计、数据库操作、算法应用、软件工程实践等多个IT知识点的综合性项目。它的开发不仅锻炼了开发者的技术能力,也对项目管理和团队协作提出了较...

    cpp-演讲比赛评委打分系统使用Qt5开发

    2. **C++编程**:Qt 5主要采用C++作为开发语言,因此需要熟悉C++的基本语法、面向对象编程概念,以及STL(Standard Template Library)等C++标准库的使用。 3. **图形用户界面设计**:Qt 5提供了一套强大的QWidgets...

    基于STL的演讲比赛流程管理系统.zip

    本系统是基于C++的STL来实现的,主要用于管理演讲比赛的流程,对于初学者来说,这是一个很好的实践案例,有助于理解STL的应用以及如何用C++设计和实现一个实际的管理系统。 首先,STL包含四大组件:容器、迭代器、...

    舞蹈比赛成绩统计

    在“舞蹈比赛成绩统计”项目中,开发者可能利用了C++的面向对象特性,如类、对象、封装、继承和多态性,来构建高效的数据结构和算法,以实现对比赛成绩的管理。 首先,我们需要理解这个程序的基本工作流程。它可能...

    基于vs2010C++演讲比赛规划流程系统.zip

    【描述】:“基于vs2010学校演讲比赛规划流程系统设计”是指利用Visual Studio 2010这一集成开发环境(IDE),使用C++编程语言,为学校的演讲比赛设计并实现一个完整的流程管理系统。这个系统可能涵盖了比赛的各个...

    c++实战-基于STL的演讲比赛流程管理系统

    2. **评委评分**:记录每个选手的各个评委评分,可能使用pair或者自定义结构体来组合选手ID和分数,然后存储在一个容器中。 3. **比赛日程**:管理比赛的时间表,包括选手的出场顺序,可以使用list或deque来实现,...

Global site tag (gtag.js) - Google Analytics