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

    科技2022-09-04  140

    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; }

    转载自:黑凤梨の博客

    Processed: 0.009, SQL: 10