实验课程作业
- 1. 编写数组类
- 2. 设计一个班级类
- 2. 设计一个学生类
1. 编写数组类
【问题描述】
建立一个数组类,数组个数不定,求该数组的平均值,并对该数组排序,其中类内成员数据:int *arr,int n(其中:arr存储数组元素起始地址,n存储数组元素个数),基本完成以下操作:
1构造函数:初始化成员数据;
2) 求数组平均值;
3) 对数组升序排列;
4) 输出平均值和排序后的数组元素。
【输入形式】输入数组个数,和数组每一个元素
【输出形式】输出数组平均值,和排序后的数组元素
【样例输入】5 3 4 6 1 2
【样例输出】3.20 1 2 3 4 6
【评分标准】数组元素是整数类型,平均值输出保留两位小数,输出数据之间用单个空格隔开。
#include <iostream>
#include <iomanip> // 用于设置输出格式
#include <algorithm> // 提供排序算法using namespace std;// 定义一个数组类 Arrey
class Arrey
{
private:int n; // 数组的大小int *arr; // 指向数组元素的指针public:// 构造函数,初始化数组大小并分配内存Arrey(int size) : n(size), arr(new int[n]) {}// 析构函数,释放数组内存~Arrey(){delete[] arr;}// 输入数组元素void input(){for (int i = 0; i < n; i++){cin >> arr[i];}}// 计算数组的平均值double average(){int sum = 0;for (int i = 0; i < n; i++){sum += arr[i];}return (double)sum / (double)n; // 强制类型转换确保结果为double类型}// 对数组进行快速排序void quicksort(){sort(arr, arr + n); // 使用STL的sort函数进行排序}// 输出数组的平均值和排序后的数组元素void output(){double avg = average();cout << fixed << setprecision(2) << avg << " "; // 设置输出格式,保留两位小数quicksort(); // 对数组进行排序for (int i = 0; i < n; i++){cout << arr[i] << " "; // 输出排序后的数组元素}cout << endl; // 换行}
};int main()
{int size;cin >> size; // 从标准输入读取数组的大小Arrey myArrey(size); // 创建数组对象myArreymyArrey.input(); // 输入数组元素myArrey.output(); // 输出数组的平均值和排序后的数组元素return 0; // 程序正常退出
}
2. 设计一个班级类
【问题描述】设计一个班级类,可以包含n名学生的基本信息(学号,姓名,1门课程成绩),可以求班级的平均分和成绩最高的学生信息。假设最高分唯一。
【输入形式】班号,学生人数n,n名学生信息
【输出形式】班级平均分,成绩最高的学生信息
【样例输入】
Computer01 4
1 Hello 95
2 Haha 90
3 Fine 92
4 SoLo 93
【样例输出】
92.50
1 Hello 95
【样例说明】课程成绩用整数表示,平均分用double类型,输出保留两位小数。
【提示】cout输出保留两位小数,需要大家自己查阅资料。
#include <iostream>
#include <string.h> // 引入字符串处理函数库
#include <iomanip> // 引入输入输出流格式控制库
using namespace std;// 定义学生结构体
struct student
{int no; // 学号char name[20]; // 姓名int score; // 成绩
};// 定义班级类
class classes
{
private:char classname[20]; // 班级名称int class_size; // 班级人数struct student s[30]; // 学生信息数组,最多存30名学生double ave; // 班级平均成绩public:// 构造函数,用于初始化班级信息classes(const char *name, int size){strncpy(classname, name, sizeof(classname)); // 安全地复制班级名称class_size = size; // 设置班级人数ave = 0.0; // 初始化平均分为0}// 设置学生信息void set(){for (int i = 0; i < class_size; i++){cin >> s[i].no >> s[i].name >> s[i].score; // 从控制台读取学生信息}}// 计算班级平均分void Ave(){for (int i = 0; i < class_size; i++){ave += s[i].score; // 累加所有学生的成绩}ave /= class_size; // 计算平均分}// 获取班级平均分double getAve() const{return ave;}// 获取成绩最高的学生信息student max_student() const{student max_st = s[0]; // 假设第一个学生成绩最高for (int i = 0; i < class_size; i++){if (s[i].score > max_st.score) // 如果发现更高分的学生{max_st = s[i]; // 更新最高分学生信息}}return max_st;}// 打印班级平均分,保留两位小数void printAve() const{cout << fixed << setprecision(2) << ave << endl;}
};// 打印成绩最高的学生信息
void print_max(const student &s)
{cout << s.no << " " << s.name << " " << s.score << endl;
}int main()
{char name[20]; // 存储班级名称int clasno; // 存储班级人数cin >> name >> clasno; // 从控制台读取班级名称和人数classes c1(name, clasno); // 创建班级对象,并初始化c1.set(); // 调用set函数输入多名学生的基本信息c1.Ave(); // 调用Ave函数计算班级平均分c1.printAve(); // 调用printAve函数打印班级平均分student max_st;max_st = c1.max_student(); // 调用max_student函数获取最高成绩的学生信息print_max(max_st); // 调用print_max函数打印最高成绩的学生信息return 0;
}
2. 设计一个学生类
【问题描述】设计一个类,记录学生的姓名、学号、学院、3门课程成绩,类中可以录入学生基本信息,求总成绩,输出学生基本信息及总成绩。输入3名同学的基本信息并按总成绩由高到低排序输出。(假设总成绩都不相同)
【输入形式】学生姓名 学号 所在学院 3门课程成绩(数据用单个空格隔开)
【输出形式】学生姓名 学号 所在学院 3门课程成绩 总成绩(数据用单个空格隔开)
【样例输入】
Doreamon 1 computer 95 96 98
Nobita 2 computer 55 60 62
Shizuka 3 computer 89 90 88
【样例输出】
Doreamon 1 computer 95 96 98 289
Shizuka 3 computer 89 90 88 267
Nobita 2 computer 55 60 62 177
【样例说明】成绩用整数类型。
#include <iostream>using namespace std;// 学生类声明
class Student
{
private:char name[20]; // 学生姓名char dep[10]; // 学生所在学院int num; // 学生学号int score1, score2, score3; // 三门课的成绩int s; // 总成绩public:// 设置学生信息void Set(){cin >> name >> num >> dep >> score1 >> score2 >> score3;}// 计算总成绩void sum(){s = score1 + score2 + score3;}// 打印学生信息void print() const{cout << name << " " << num << " " << dep << " " << score1 << " " << score2 << " " << score3 << " " << s << endl;}// 获取总成绩int getTotalScore() const{return s;}
};// 冒泡排序函数,用于对学生数组按总成绩进行排序
void bubbleSort(Student arr[], int size)
{bool flag; // 用于判断某轮循环是否发生交换,如果没有发生交换,则数组已经有序for (int i = 0; i < size - 1; i++) // 遍历所有元素{flag = false; // 每轮开始前重置flagfor (int j = 0; j < size - i - 1; j++) // 从前往后比较相邻元素{if (arr[j].getTotalScore() < arr[j + 1].getTotalScore()) // 如果前一个学生的总成绩小于后一个{Student temp = arr[j]; // 交换两个学生对象arr[j] = arr[j + 1];arr[j + 1] = temp;flag = true; // 标记发生了交换}}if (!flag) // 如果某轮循环没有发生交换,则数组已经有序,可以提前结束排序{break;}}
}// 封装排序函数,使得外部调用更简洁
void sort(Student arr[], int size)
{bubbleSort(arr, size);
}int main()
{int i = 0;Student s[3]; // 声明一个包含3个学生的数组// 输入每个学生的信息并计算总成绩for (i = 0; i < 3; i++){s[i].Set();s[i].sum();}// 对学生数组按总成绩进行排序sort(s, 3);// 打印排序后的学生信息for (i = 0; i < 3; i++)s[i].print();return 0;
}
今天的内容就分享这么多
求三连!!!
求关注!!!