成绩排序问题.doc
文本预览下载声明
实验报告
实验课名称:数据结构实验 实验名称:考试日程安排与成绩统计问题 一、问题描述
现要安排考试的考表(即考试日程表),假设共有10个班的学生,要安排10门必修课程的考试,必修课程是以班级来确定的,每个班各有3门必修课,因此各班的考试科目是不相同的;安排考表的原则是:相同课程采用统一的试卷,因此同一门课程的考试必须在相同时间进行,同一个班所修的科目必须安排在不同的时间进行考试,以避免考试时间的冲突。并要求全部考试的日程尽可能短。
要求对考试结果做统计和排序。假设分别以编号0,1,2,3,4,5,6,7,8,9代表10门要考试的课程,以B1,B2,B3,B4,B5,B6,B7,B8,B9,B10代表10个班,每个人的信息包括学号、姓名、班级、各门考试课程成绩、三门课程总成绩,每个班的学生人数自行设定。要求设计一个简单的考试成绩的查询统计系统实现以下功能:
显示学生考试情况-按考试总分从高到底输出全体学生的信息。-按照从B1到B10的班级顺序,分班级按照考试总分从高到底的顺序输出各班学生的信息。-输出指定班的学生考试成绩信息。
统计学生考试成绩-按总成绩统计出90分以上、80~89分、70~79分、60~69分、60分以下各分数段的人数,并按总分从高到低分段输出。-根据指定的某们课程的成绩,统计出上述各分数段的人数,并按分数从高到低分段输出。-统计并输出指定班级中总成绩或某一门课成绩的各分数段人数和每个人具体的信息。
查找学生成绩-查找总分或某一门课程成绩的指定分数段的人数及学生的详细信息。-查找指定班级中总分或某一门课程成绩属于某分数段的学生详细信息。-查找指定学生(例如给定学号)的具体信息,包括:姓名、班级、各科分数、总分数等。
根据实验要求typedef struct
{
char number[15];//学号
char name[100];//姓名
int fen[4];//成绩(分别为语文成绩、数学成绩、英语成绩、总分)
int n[2];//名次(n[0]为总分名次n[1]为单科名次)
}node;
typedef struct
{
node stu[maxsize+1]; //存放学生信息
int num; //存放学生人数
}SqList;
三、算法设计
根据问题要求,首先创建学生信息,输入各科成绩,计算总分,之后利用快速排序实现对学生单科及总分的排序,最后输出。
设计流程图如图1.1所示。
图1.1 设计流程图
数据输入
根据输入提示,对学生基本信息做相应的输入,其代码如下:
cout请输入学生人数:endl;
cina.num;
for(i=1;i=a.num;i++)//输入每个学生的三门成绩
{
cout请输入第i个学生的学号和姓名:endl;
cina.stu[i].number;
cina.stu[i].name;
cout请输入第i个学生语文,数学,英语成绩:endl;
cina.stu[i].fen[0];
cina.stu[i].fen[1];
cina.stu[i].fen[2];
}
}
学生信息初始化完成后,在根据输入提示选择相应操作:
while(1)
{
cout1.总分排序 endl;
cout2.语文排序 endl;
cout3.数学排序 endl;
cout4.英语排序 endl;
cout0.退 出 \nendl;
cout请选择:endl;
cinchoice;
switch(choice)
{
case 1:
……………………
case 2:
……………………
case 3:
……………………
case 4:
……………………
case 0:
return 0;
default:
cout输入错误,请重新输入(0--4)endl;
break;
}
}
创建学生信息并进行相应排序,本实验中采用快速排序,其代码如下:
int Partition(SqList L,int low,int high,int i) //枢轴函数
{
int pivotkey; // 枢轴关键字
pivotkey=L.stu[low].fen[i];
L.stu[0]=L.stu[low];
while(lowhigh)
{
while(lowhighL.stu[high].fen[i]=pivotkey)
--high;
L.stu[lo
显示全部