【沈阳航空航天大学】【实验课程】<类与对象编程作业>

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); // 创建数组对象myArrey
	myArrey.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;						   // 每轮开始前重置flag
		for (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;
}

今天的内容就分享这么多
求三连!!!
求关注!!!

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NineSense

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值