1、 洛 阳 理 工 学 院 课 程 设 计 报 告 课程名称 数据结构课程设计 设计题目 成绩统计系统 专 业 计算机科学与技术 课 程 设 计 任 务 书 设计题目:给出n个学生的m门考试的成绩表,每个学生的信息由学号、姓名以及各科成绩组成。对学生的考试成绩进行有关统计,并打印统计表。 设计内容与要求: (1) 按总数高低次序,打印出名次表,分数相同的为同一名次; (2) 按名次打印出每
2、个学生的学号、姓名、总分以及各科成绩。 课 程 设 计 评 语 成绩: 指导教师:_______________ 年 月 日 -可编辑修改- 。 1. 问题描述 给出n个学生的m门考试的成绩表,每个学生的信息由学号、姓名以及各科成绩组成。对学生的考试成绩进行有关统计,并打印统计表。 2. 基本要求 (1) 按总数高低次序,打印出名次表,分
3、数相同的为同一名次; (2) 按名次打印出每个学生的学号、姓名、总分以及各科成绩。 3、数据结构类型定义 struct Student { char m_Name[20]; unsigned int m_ID; float m_Score[m]; }; 4. 总体设计 (1)模块划分: <1>初始化函数: Node* Init(); <2>直接插入法排序函数: float* Sort(); <3>相同名次处理函数: int Del_Same(); <4>打印函数void Display(); <5>主函数:void main()
4、语文 数学 英语 物理 处理相同分数 排 序 输入成绩 输入学号 输入姓名 欢迎进入成绩统计系统 2、组成框图: 3、流程图 <1>初始化函数: Node* Init(); <2>直接插入法:float* Sort(); <3>相同名次处理:int Del_Same(); <4>打印函数void Display(); 5. 详细设计 1.声明一个结构体: typedef struct Student Node; 2.录入数据 将复制形式修改为指针访问形式,计算成绩总和写入到sum[]中。
5、
3.打印,按名次从第一名到最后一名。
4.下直接插值排序法
会用到"哨兵",nSize表示grade[]中实际元素的个数。
5.处理相同成绩的名次
将sum[n]中的不重复的元素放到grade[n]中,函数返回grade[]中实际元素的个数。
测试数据:
姓 名
语 文
数 学
英 语
物 理
黄
54
53
52
51
赵
98
97
96
95
李
100
99
99
98
6. 测试与调试
1、输入数据:
2.打印成绩
7. 源程序清单
#include
6、
#include
7、 Node* Init(Node* stu,const int cN,float* Asum,int nSum); float* Sort(float* Agrade,int nSize); int Del_Same(float* Asum,int nSum,float* Agrade,int nGreade); void Display(Student* stu,int nN,float* Asum,int nSum,float* Agrade,int nGreadeSize); //------函数实现-----------------
8、
//----录入数据------
Node* Init(Node* stu,const int cN,float* Asum,int nSum)
{
char name[20];
unsigned int id;
float score[m];
int i,j;
for(i=0;i 9、);
scanf("%d",&id);
for(j=0;j 10、计算成绩总和写入到sum[]中--------
*(Asum+i)=0.0;
for(j=0;j 11、"< 12、 成 绩===="< 13、nt k=0;k 14、 {
if(Agrade[nSize]>Agrade[j])//从大到小的顺序。一定要注意,是拿"哨兵"来与之比较才对的。
{
Agrade[j+1]=Agrade[j];
j--;
}
else
{
break;
}
}//for内
Agrade[j+1]=Agrade[nSize];// 从哨兵中取出这个值来
}//for 外
return Agrade;
}
int Del_Same(float* Asum,int nSum,float* Ag 15、rade,int nGreade)
{//将sum[n]中的不重复的元素放到grade[n]中,函数返回grade[]中实际元素的个数。
int Find;//有无重复的标记:1为有,0为无。
int nElem=1;//gread[]中的实际元素个数。
Agrade[0]=Asum[0];
for(int i=0;i 16、 {
Find=1;
break;
}
else
{
Find=0;
}
}
if(Find==0)
{
Agrade[nElem]=Asum[i];
nElem++;
}
}//for(最外)
return nElem;
}
//------------
void 17、 main()
{
Node Stu[n];
Node* pStu;
pStu=Stu;//声明n个Student对象的一个数组。
float sum[n],grade[n+1];//因为想在grade[]中用到直接插值排序法,要用到"哨兵"。所以构造n+1.
pStu=Init(pStu,n,sum,n);
int nGrade_size;
nGrade_size=Del_Same(sum,n,grade,n+1);
float* pGrade=0;
pGrade=Sort(grade,nGrade_size);
Display(pStu,n,su 18、m,n,grade,nGrade_size);
}
八、心得体会
这次我抽到的题目很简单,但是这是指用基础的C语言写很简单。如果想把本学期数据结构的知识应用到程序中还是很有挑战性的。我采用的是直接插入排序法,刚开始把书上的程序照搬过来,结果发现有许多的错误。改了很久才改对。最难的是相同成绩处理的函数,我刚开始以为很简单,但是前面各个成绩采用的是指针结构体,很难处理,最后在网上查找了一下才对照着改正过来。最后我学会的是可以先把数据输入数组内,在用指针直接指向数据就可以了,这样比输入数据时就用指针要简单的多。
THANKS !!!
致力为企业和个人提供合同协议,策划案计划书,学习课件等等
打造全网一站式需求
欢迎您的下载,资料仅供参考
-可编辑修改-
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818