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;
}
转载自:黑凤梨の博客