评委打分项目

发布于:2024-12-07 ⋅ 阅读:(26) ⋅ 点赞:(0)

代码展示

#include<iostream>
#include<string>
#include<vector>
#include<deque>
#include<algorithm>
using namespace std;
class Person {
public:
	Person(int score, string name) {
		this->m_name = name;
		this->m_score = score;

	}
	string m_name;
	int m_score;
};
//创建选手
void createPerson(vector<Person>& v) {
	string nameSeed = "ABCDEF";
	for (int i = 0; i < 5; i++) {
		string name = "选手";
		name += nameSeed[i];
		int score = 0;//将初始成绩设为0
		Person p(score,name);
		v.push_back(p);

	}
}
//打分
void setScore(vector<Person>& v) {
	for (vector<Person>::iterator it = v.begin(); it != v.end(); it++) {
		deque<int>d;
		for (int i = 0; i < 10; i++) {
			int score = rand() % 41 + 60;
			d.push_back(score);
		}
		/*cout << "选手:" << it->m_name << "打分:" << endl;
		for (deque<int>::iterator dit = d.begin(); dit < d.end(); dit++) {
			cout << *dit<<" ";
		}
		cout << endl;*/

		//排序
		sort(d.begin(), d.end());
		//除去最小值和最大值
		d.pop_back();
		d.pop_front();
		//累加分数
		int sum = 0;
		for (deque<int>::iterator dit = d.begin(); dit < d.end(); dit++) {
			sum += *dit;//注意必须要用地址而不是直接用数
		}
		int avg = sum / d.size();
		//把平均数给选手
		it->m_score = avg;
	}
	//显示平均分
	
	
	
	
}
void ShowScore(vector<Person>& v) {
	for (vector<Person>::iterator it = v.begin(); it != v.end(); it++) {
		cout << "选手:" << it->m_name << "平均分:" << it->m_score << endl;
	}
}
int main() {
	vector<Person>v;
	createPerson(v);
	//测试
	/*for (vector<Person>::iterator it = v.begin(); it != v.end(); it++) {
		cout <<  it->m_name << "成绩:" << it->m_score << endl;
	}*/

	setScore(v);
	ShowScore(v);
	system("pause");
	
	return 0;
}

逐行解释代码

头文件包含
#include<iostream>
#include<string>
#include<vector>
#include<deque>
#include<algorithm>
using namespace std;
  • #include<iostream>:包含输入输出流的头文件,用于标准输入输出操作。
  • #include<string>:包含字符串类的头文件。
  • #include<vector>:包含vector容器的头文件。
  • #include<deque>:包含deque容器的头文件。
  • #include<algorithm>:包含算法库的头文件,用于排序等操作。
  • using namespace std;:使用标准命名空间,避免每次调用标准库函数时都要加上std::前缀。
定义Person
class Person {
public:
    Person(int score, string name) {
        this->m_name = name;
        this->m_score = score;
    }
    string m_name;
    int m_score;
};
  • class Person:定义一个名为Person的类。
  • public::声明公共成员。
  • Person(int score, string name):定义一个构造函数,接受一个整数score和一个字符串name
  • this->m_name = name;:将传入的name赋值给成员变量m_name
  • this->m_score = score;:将传入的score赋值给成员变量m_score
  • string m_name;:定义一个字符串成员变量m_name,用于存储姓名。
  • int m_score;:定义一个整数成员变量m_score,用于存储分数。
创建选手函数
void createPerson(vector<Person>& v) {
    string nameSeed = "ABCDEF";
    for (int i = 0; i < 5; i++) {
        string name = "选手";
        name += nameSeed[i];
        int score = 0; // 将初始成绩设为0
        Person p(score, name);
        v.push_back(p);
    }
}
  • void createPerson(vector<Person>& v):定义一个函数,接受一个vector<Person>类型的引用参数。
  • string nameSeed = "ABCDEF";:定义一个字符串nameSeed,用于生成选手的名字。
  • for (int i = 0; i < 5; i++):使用循环创建5个选手。
  • string name = "选手";:初始化一个字符串name,值为“选手”。
  • name += nameSeed[i];:将nameSeed中的一个字符追加到name中,生成完整的选手名字。
  • int score = 0;:初始化一个整数score,值为0,表示初始成绩。
  • Person p(score, name);:创建一个Person对象p,传入初始成绩和名字。
  • v.push_back(p);:将创建的Person对象p添加到vector容器v中。
打分函数
void setScore(vector<Person>& v) {
    for (vector<Person>::iterator it = v.begin(); it != v.end(); it++) {
        deque<int> d;
        for (int i = 0; i < 10; i++) {
            int score = rand() % 41 + 60;
            d.push_back(score);
        }
        // 排序
        sort(d.begin(), d.end());
        // 除去最小值和最大值
        d.pop_back();
        d.pop_front();
        // 累加分数
        int sum = 0;
        for (deque<int>::iterator dit = d.begin(); dit < d.end(); dit++) {
            sum += *dit; // 注意必须要用地址而不是直接用数
        }
        int avg = sum / d.size();
        // 把平均数给选手
        it->m_score = avg;
    }
}
  • void setScore(vector<Person>& v):定义一个函数,接受一个vector<Person>类型的引用参数。
  • for (vector<Person>::iterator it = v.begin(); it != v.end(); it++):使用迭代器遍历vector容器中的每个Person对象。
  • deque<int> d;:定义一个deque<int>类型的容器d,用于存储评分。
  • for (int i = 0; i < 10; i++):使用循环生成10个评分。
  • int score = rand() % 41 + 60;:生成一个60到100之间的随机整数,作为评分。
  • d.push_back(score);:将生成的评分添加到deque容器d中。
  • sort(d.begin(), d.end());:使用sort函数对deque容器d中的评分进行排序。
  • d.pop_back();:删除deque容器d中的最大评分。
  • d.pop_front();:删除deque容器d中的最小评分。
  • int sum = 0;:初始化一个整数sum,用于累加评分。
  • for (deque<int>::iterator dit = d.begin(); dit < d.end(); dit++):使用迭代器遍历deque容器d中的每个评分。
  • sum += *dit;:将当前迭代器指向的评分累加到sum中。
  • int avg = sum / d.size();:计算平均评分。
  • it->m_score = avg;:将计算得到的平均评分赋值给当前Person对象的m_score成员变量。
显示评分函数
void ShowScore(vector<Person>& v) {
    for (vector<Person>::iterator it = v.begin(); it != v.end(); it++) {
        cout << "选手:" << it->m_name << "平均分:" << it->m_score << endl;
    }
}
  • void ShowScore(vector<Person>& v):定义一个函数,接受一个vector<Person>类型的引用参数。
  • for (vector<Person>::iterator it = v.begin(); it != v.end(); it++):使用迭代器遍历vector容器中的每个Person对象。
  • cout << "选手:" << it->m_name << "平均分:" << it->m_score << endl;:输出当前Person对象的姓名和平均评分。
主函数
int main() {
    vector<Person> v;
    createPerson(v);
    // 测试
    /*for (vector<Person>::iterator it = v.begin(); it != v.end(); it++) {
        cout << it->m_name << "成绩:" << it->m_score << endl;
    }*/
    setScore(v);
    ShowScore(v);
    system("pause");
    return 0;
}
  • vector<Person> v;:创建一个vector<Person>类型的容器v
  • createPerson(v);:调用createPerson函数,创建5个选手并添加到v中。
  • /*for (vector<Person>::iterator it = v.begin(); it != v.end(); it++) { cout << it->m_name << "成绩:" << it->m_score << endl; }*/:注释掉的测试代码,用于输出每个选手的姓名和初始成绩。
  • setScore(v);:调用setScore函数,为每个选手生成评分并计算平均评分。
  • ShowScore(v);:调用ShowScore函数,输出每个选手的姓名和平均评分。
  • system("pause");:暂停程序,等待用户按键。
  • return 0;:返回0,表示程序正常结束。

核心思想

这段代码的核心思想是模拟一个比赛评分系统,具体步骤如下:

  1. 创建选手:生成5个选手,每个选手的名字由“选手”加上一个字母组成,初始成绩为0。
  2. 打分:为每个选手生成10个评委的评分,去掉最高分和最低分,计算剩余评分的平均值,作为选手的最终成绩。
  3. 显示评分:输出每个选手的姓名和最终成绩。

所需知识及解释

  1. 类和对象

    • 类的定义:使用class关键字定义类,包含成员变量和成员函数。
    • 构造函数:用于初始化对象,可以在构造函数中设置成员变量的初始值。
    • 成员变量:类中定义的变量,用于存储对象的状态。
    • 成员函数:类中定义的函数,用于操作对象的状态。
  2. 容器

    • vector容器:动态数组,支持高效的尾部插入和删除操作。
    • deque容器:双端队列,支持高效的两端插入和删除操作。
  3. 迭代器

    • 迭代器的概念:迭代器是访问容器中元素的一种方式,类似于指针。
    • 迭代器的使用:使用迭代器遍历容器中的元素,可以进行读取、修改等操作。
  4. 算法

    • sort函数:用于对容器中的元素进行排序。
    • rand函数:生成随机数,用于模拟评委的评分。
  5. 输入输出

    • coutendl:用于输出文本和换行。
    • system("pause"):用于暂停程序,等待用户按键。
  6. 字符串操作

    • 字符串拼接:使用+操作符将字符串拼接在一起。