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

2024-02-10 05:20

本文主要是介绍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;}

转载自:黑凤梨の博客

这篇关于C++实现学生成绩信息登记表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/696215

相关文章

python+OpenCV反投影图像的实现示例详解

《python+OpenCV反投影图像的实现示例详解》:本文主要介绍python+OpenCV反投影图像的实现示例详解,本文通过实例代码图文并茂的形式给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一、前言二、什么是反投影图像三、反投影图像的概念四、反向投影的工作原理一、利用反向投影backproj

Django之定时任务django-crontab的实现

《Django之定时任务django-crontab的实现》Django可以使用第三方库如django-crontab来实现定时任务的调度,本文主要介绍了Django之定时任务django-cront... 目录crontab安装django-crontab注册应用定时时间格式定时时间示例设置定时任务@符号

Python中edge-tts实现便捷语音合成

《Python中edge-tts实现便捷语音合成》edge-tts是一个功能强大的Python库,支持多种语言和声音选项,本文主要介绍了Python中edge-tts实现便捷语音合成,具有一定的参考价... 目录安装与环境设置文本转语音查找音色更改语音参数生成音频与字幕总结edge-tts 是一个功能强大的

Java实现按字节长度截取字符串

《Java实现按字节长度截取字符串》在Java中,由于字符串可能包含多字节字符,直接按字节长度截取可能会导致乱码或截取不准确的问题,下面我们就来看看几种按字节长度截取字符串的方法吧... 目录方法一:使用String的getBytes方法方法二:指定字符编码处理方法三:更精确的字符编码处理使用示例注意事项方

使用Python和PaddleOCR实现图文识别的代码和步骤

《使用Python和PaddleOCR实现图文识别的代码和步骤》在当今数字化时代,图文识别技术的应用越来越广泛,如文档数字化、信息提取等,PaddleOCR是百度开源的一款强大的OCR工具包,它集成了... 目录一、引言二、环境准备2.1 安装 python2.2 安装 PaddlePaddle2.3 安装

嵌入式Linux之使用设备树驱动GPIO的实现方式

《嵌入式Linux之使用设备树驱动GPIO的实现方式》:本文主要介绍嵌入式Linux之使用设备树驱动GPIO的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、设备树配置1.1 添加 pinctrl 节点1.2 添加 LED 设备节点二、编写驱动程序2.1

Android 实现一个隐私弹窗功能

《Android实现一个隐私弹窗功能》:本文主要介绍Android实现一个隐私弹窗功能,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 效果图如下:1. 设置同意、退出、点击用户协议、点击隐私协议的函数参数2. 《用户协议》、《隐私政策》设置成可点击的,且颜色要区分出来res/l

spring IOC的理解之原理和实现过程

《springIOC的理解之原理和实现过程》:本文主要介绍springIOC的理解之原理和实现过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、IoC 核心概念二、核心原理1. 容器架构2. 核心组件3. 工作流程三、关键实现机制1. Bean生命周期2.

Redis实现分布式锁全解析之从原理到实践过程

《Redis实现分布式锁全解析之从原理到实践过程》:本文主要介绍Redis实现分布式锁全解析之从原理到实践过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、背景介绍二、解决方案(一)使用 SETNX 命令(二)设置锁的过期时间(三)解决锁的误删问题(四)Re

Java根据IP地址实现归属地获取

《Java根据IP地址实现归属地获取》Ip2region是一个离线IP地址定位库和IP定位数据管理框架,这篇文章主要为大家详细介绍了Java如何使用Ip2region实现根据IP地址获取归属地,感兴趣... 目录一、使用Ip2region离线获取1、Ip2region简介2、导包3、下编程载xdb文件4、J