C++实现学生成绩信息登记表

C++实现学生成绩信息登记表

学生成绩信息登记表:
每个学生的数据包括:学号,姓名,和语数英三门的成绩
实现效果:
1.从键盘输入3名学生的数据
2.显示每个学生的三门课的平均分
3.显示每门课的全班平均分
4.按平均分高低排名,并按名次降序输出学生的所有数据

//学生成绩信息登记表
//每个学生的数据包括:学号,姓名,和语数英三门的成绩
//实现效果:
//1.从键盘输入3名学生的数据
//2.显示每个学生的三门课的平均分
//3.显示每门课的全班平均分
//4.按平均分高低排名,并按名次降序输出学生的所有数据
#include <iostream>
using namespace std;
#define STU 3   //设置学生的人数
 
//定义学生结构体
struct Student {
	int num;//学号
	string name;//姓名
	int gradeChinese;//语文成绩
	int gradeMath;//数学成绩
	int gradeEnglish;//英语成绩
};
//得到输入的学生的信息
void getStudentInfo(Student a[STU]) {
	for (int i = 0;i < STU;i++)
	{
		cout << "请输入第" << i + 1 << "个同学的" << "学号:" ;
		cin >> a[i].num;
		cout << "请输入第" << i + 1 << "个同学的" << "姓名:" ;
		cin >> a[i].name;
		cout << "请输入第" << i + 1 << "个同学的" << "语文成绩:" ;
		cin >> a[i].gradeChinese;
		cout << "请输入第" << i + 1 << "个同学的" << "数学成绩:" ;
		cin >> a[i].gradeMath;
		cout << "请输入第" << i + 1 << "个同学的" << "英语成绩:"  ;
		cin >> a[i].gradeEnglish;
	}
	cout << endl;
}
//计算每个学生的三门平均分
void averageStudent(Student a[STU]) {
	for (int i = 0;i < STU;i++) 
	{
		cout << "第" << i + 1 << "名同学的语数英平均分为:"
			<< (a[i].gradeChinese + a[i].gradeEnglish + a[i].gradeMath) / 3
			<< endl;
	}
	cout << endl;
}
 
//计算每门课的全班平均分
void averageClass(Student a[STU]) {
	int a_math = 0;//全班数学总分
	for (int i = 0;i < STU;i++)
	{
		a_math = a_math + a[i].gradeMath;
	}
	int a_chinese = 0;//全班语文总分
	for (int i = 0;i < STU;i++)
	{
		a_chinese = a_chinese + a[i].gradeChinese;
	}
	int a_english = 0;//全班英语总分
	for (int i = 0;i < STU;i++)
	{
		a_english = a_english + a[i].gradeEnglish;
	}
	cout << "全班语文的平均分为:"<<a_chinese/STU<<endl;
	cout << "全班数学的平均分为:"<<a_math/STU<<endl;
	cout << "全班英语的平均分为:"<<a_english/STU<<endl;
	cout << endl;
}
 
//按平均分降序排名
void rankStudentGrade(Student a[STU]) {
	int b[STU];//定义b数组存放每个人的平均分
	for (int i = 0;i < STU;i++)
	{
		b[i] = (a[i].gradeChinese + a[i].gradeEnglish + a[i].gradeMath) / 3;
	}
	//把b数组数据存一份数据给c数组
	//b数组中存放的是未排序的平均分,c数组中存放的是排序过后的平均分
	int c[STU];
	for (int i = 0;i < STU;i++)
	{
		c[i] = b[i];
	}
	//冒泡排序
	for (int i = 0;i < STU - 1;i++)
	{
		for (int j = 0;j < STU - 1 - i;j++) 
		{
			int temp = 0;
			if (c[j] < c[j + 1]) 
			{
				temp = c[j + 1];
				c[j + 1] = c[j];
				c[j] = temp;
			}
		}
	}
	//测试输出
	//for (int i = 0;i < STU;i++)
	//{
	//	cout << "按平均分降序排名为:" << c[i] << endl;
	//}
 
	//比较b和c数组,输出对应平均分同学的成绩
	for (int i = 0;i < STU;i++)
	{
		for (int j = 0;j < STU;j++)
		{
			if (c[i] == b[j])
			{
				cout << "第" << i + 1 << "名是:" << a[j].name << "  平均分为:" << b[j] 
					<<"  学号为:"<<a[j].num
					<< "  语文成绩为:" << a[j].gradeChinese
					<< "  数学成绩为:" << a[j].gradeMath
					<< "  英语成绩为:" << a[j].gradeEnglish
					<< endl;
			}
		}
	}
 
}
 
int main()
{
	Student a[STU];
 
	getStudentInfo(a);//得到输入的学生的信息
 
	//cout << "第三位同学的英语成绩为:" << a[STU - 1].gradeEnglish << endl;//测试是否接收成功
 
	averageStudent(a);//计算每个学生的三门平均分
 
	averageClass(a);//计算每门课的全班平均分
 
	rankStudentGrade(a);//按平均分降序排名
 
	system("pause");
	return 0;
 
 
}

在这里插入图片描述
--------------------------降序输出算法改进-----------------------------

//学生成绩信息登记表
//每个学生的数据包括:学号,姓名,和语数英三门的成绩
//实现效果:
//1.从键盘输入3名学生的数据
//2.显示每个学生的三门课的平均分
//3.显示每门课的全班平均分
//4.按平均分高低排名,并按名次降序输出学生的所有数据
#include <iostream>
using namespace std;
#define STU 3   //设置学生的人数
 
//定义学生结构体
struct Student {
	int num;//学号
	string name;//姓名
	int gradeChinese;//语文成绩
	int gradeMath;//数学成绩
	int gradeEnglish;//英语成绩
};
//得到输入的学生的信息
void getStudentInfo(Student a[STU]) {
	for (int i = 0;i < STU;i++)
	{
		cout << "请输入第" << i + 1 << "个同学的" << "学号:" ;
		cin >> a[i].num;
		cout << "请输入第" << i + 1 << "个同学的" << "姓名:" ;
		cin >> a[i].name;
		cout << "请输入第" << i + 1 << "个同学的" << "语文成绩:" ;
		cin >> a[i].gradeChinese;
		cout << "请输入第" << i + 1 << "个同学的" << "数学成绩:" ;
		cin >> a[i].gradeMath;
		cout << "请输入第" << i + 1 << "个同学的" << "英语成绩:"  ;
		cin >> a[i].gradeEnglish;
	}
	cout << endl;
}
//计算每个学生的三门平均分
void averageStudent(Student a[STU]) {
	for (int i = 0;i < STU;i++) 
	{
		cout << "第" << i + 1 << "名同学的语数英平均分为:"
			<< (a[i].gradeChinese + a[i].gradeEnglish + a[i].gradeMath) / 3
			<< endl;
	}
	cout << endl;
}
 
//计算每门课的全班平均分
void averageClass(Student a[STU]) {
	int a_math = 0;//全班数学总分
	for (int i = 0;i < STU;i++)
	{
		a_math = a_math + a[i].gradeMath;
	}
	int a_chinese = 0;//全班语文总分
	for (int i = 0;i < STU;i++)
	{
		a_chinese = a_chinese + a[i].gradeChinese;
	}
	int a_english = 0;//全班英语总分
	for (int i = 0;i < STU;i++)
	{
		a_english = a_english + a[i].gradeEnglish;
	}
	cout << "全班语文的平均分为:"<<a_chinese/STU<<endl;
	cout << "全班数学的平均分为:"<<a_math/STU<<endl;
	cout << "全班英语的平均分为:"<<a_english/STU<<endl;
	cout << endl;
}
 
//按平均分降序排名
void rankStudentGrade(Student a[STU]) {
	int b[STU];//定义b数组存放每个人的平均分
	for (int i = 0;i < STU;i++)
	{
		b[i] = (a[i].gradeChinese + a[i].gradeEnglish + a[i].gradeMath) / 3;
	}
	
	for (int i = 0;i < STU - 1;i++)
	{
		
		for (int j = 0;j < STU - 1 - i;  j++)
		{
			if (b[j] < b[j+1])
			{
				Student temp;
				temp = a[j];
				a[j] = a[j+1];
				a[j+1] = temp;
 
 
				int temp1 = 0;
				temp1 = b[j];
				b[j] = b[j + 1];
				b[j + 1] = temp1;
 
			}
		}
	}
 
 
	for (int j = 0;j < STU;j++)
	{
		cout << "第" << j + 1 << "名是:" << a[j].name 
			<<"平均分为:"<< (a[j].gradeChinese + a[j].gradeEnglish + a[j].gradeMath) / 3
			<< "  学号为:" << a[j].num
			<< "  语文成绩为:" << a[j].gradeChinese
			<< "  数学成绩为:" << a[j].gradeMath
			<< "  英语成绩为:" << a[j].gradeEnglish
			<< endl;
	}
}
 
int main()
{
	Student a[STU];
 
	getStudentInfo(a);//得到输入的学生的信息
 
	//cout << "第三位同学的英语成绩为:" << a[STU - 1].gradeEnglish << endl;//测试是否接收成功
 
	averageStudent(a);//计算每个学生的三门平均分
 
	averageClass(a);//计算每门课的全班平均分
 
	rankStudentGrade(a);//按平均分降序排名
 
	system("pause");
	return 0;
 
 
}

转载自:黑凤梨の博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值