成绩统计系统数据结构课程设计.docx

上传人:b****0 文档编号:10045736 上传时间:2023-05-23 格式:DOCX 页数:13 大小:70.17KB
下载 相关 举报
成绩统计系统数据结构课程设计.docx_第1页
第1页 / 共13页
成绩统计系统数据结构课程设计.docx_第2页
第2页 / 共13页
成绩统计系统数据结构课程设计.docx_第3页
第3页 / 共13页
成绩统计系统数据结构课程设计.docx_第4页
第4页 / 共13页
成绩统计系统数据结构课程设计.docx_第5页
第5页 / 共13页
成绩统计系统数据结构课程设计.docx_第6页
第6页 / 共13页
成绩统计系统数据结构课程设计.docx_第7页
第7页 / 共13页
成绩统计系统数据结构课程设计.docx_第8页
第8页 / 共13页
成绩统计系统数据结构课程设计.docx_第9页
第9页 / 共13页
成绩统计系统数据结构课程设计.docx_第10页
第10页 / 共13页
成绩统计系统数据结构课程设计.docx_第11页
第11页 / 共13页
成绩统计系统数据结构课程设计.docx_第12页
第12页 / 共13页
成绩统计系统数据结构课程设计.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

成绩统计系统数据结构课程设计.docx

《成绩统计系统数据结构课程设计.docx》由会员分享,可在线阅读,更多相关《成绩统计系统数据结构课程设计.docx(13页珍藏版)》请在冰点文库上搜索。

成绩统计系统数据结构课程设计.docx

成绩统计系统数据结构课程设计

 

洛阳理工学院

课程设计报告

课程名称数据结构课程设计

设计题目成绩统计系统

专业计算机科学与技术

课程设计任务书

设计题目:

给出n个学生的m门考试的成绩表,每个学生的信息由学号、姓名以及各科成绩组成。

对学生的考试成绩进行有关统计,并打印统计表。

设计内容与要求:

(1)按总数高低次序,打印出名次表,分数相同的为同一名次;

(2)按名次打印出每个学生的学号、姓名、总分以及各科成绩。

 

课程设计评语

 

成绩:

指导教师:

_______________

年月日

1.问题描述

给出n个学生的m门考试的成绩表,每个学生的信息由学号、姓名以及各科成绩组成。

对学生的考试成绩进行有关统计,并打印统计表。

2.基本要求

(1)按总数高低次序,打印出名次表,分数相同的为同一名次;

(2)按名次打印出每个学生的学号、姓名、总分以及各科成绩。

3、数据结构类型定义

structStudent

{

charm_Name[20];

unsignedintm_ID;

floatm_Score[m];

};

4.总体设计

(1)模块划分:

<1>初始化函数:

Node*Init();

<2>直接插入法排序函数:

float*Sort();

<3>相同名次处理函数:

intDel_Same();

<4>打印函数voidDisplay();

<5>主函数:

voidmain()

2、组成框图:

 

3、流程图

<1>初始化函数:

Node*Init();<2>直接插入法:

float*Sort();

<3>相同名次处理:

intDel_Same();<4>打印函数voidDisplay();

5.详细设计

1.声明一个结构体:

typedefstructStudentNode;

2.录入数据

将复制形式修改为指针访问形式,计算成绩总和写入到sum[]中。

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

#include

#include

#include

#include

#definen3/*学生数*/

#definem4/*课程数*/

usingnamespacestd;

//---声明一个结构----

structStudent

{

charm_Name[20];

unsignedintm_ID;

floatm_Score[m];

};

typedefstructStudentNode;

//------函数声明---------------------------

Node*Init(Node*stu,constintcN,float*Asum,intnSum);

float*Sort(float*Agrade,intnSize);

intDel_Same(float*Asum,intnSum,float*Agrade,intnGreade);

voidDisplay(Student*stu,intnN,float*Asum,intnSum,float*Agrade,intnGreadeSize);

//------函数实现---------------------------

//----录入数据------

Node*Init(Node*stu,constintcN,float*Asum,intnSum)

{

charname[20];

unsignedintid;

floatscore[m];

inti,j;

for(i=0;i

{

printf("请输入第%d/%d名学生的信息:

\n",i+1,n);

printf("请输入姓名:

");

scanf("%s",name);

printf("\n请输入学号:

");

scanf("%d",&id);

for(j=0;j

{

printf("\n录入第%d/%d门课程成绩:

",j+1,m);

scanf("%f",&score[j]);

}

printf("\n");

//---赋值过程---------------

strcpy((stu+i)->m_Name,name);//修改成指针访问形式.

(stu+i)->m_ID=id;

for(j=0;j

{

(stu+i)->m_Score[j]=score[j];

}

//-------计算成绩总和写入到sum[]中--------

*(Asum+i)=0.0;

for(j=0;j

{

(*(Asum+i))+=((stu+i)->m_Score[j]);

}

}//for(n)

printf("成功!

~数据录入完毕!

");

returnstu;

}

voidDisplay(Node*stu,intnN,float*Asum,intnSum,float*Agrade,intnGreadeSize)

{//打印。

按名次从第一名到最后一名。

cout<

cout<<"============================打印名次信息================================="<

cout<<"名次======学号======姓名======总分=====名科成绩===="<

for(inti=0;i

{

for(intj=0;j

{

if(Asum[j]==Agrade[i])

{

cout<

<

<

<

for(intk=0;k

cout<

}

//cout<

}

}

}

float*Sort(float*Agrade,intnSize)

{//练习一下直接插值排序法。

会用到"哨兵"。

nSize表示grade[]中实际元素的个数。

for(inti=1;i

{

Agrade[nSize]=Agrade[i];//将它放到哨兵里

for(intj=i-1;j>=0;)

{

if(Agrade[nSize]>Agrade[j])//从大到小的顺序。

一定要注意,是拿"哨兵"来与之比较才对的。

{

Agrade[j+1]=Agrade[j];

j--;

}

else

{

break;

}

}//for内

Agrade[j+1]=Agrade[nSize];//从哨兵中取出这个值来

}//for外

returnAgrade;

}

intDel_Same(float*Asum,intnSum,float*Agrade,intnGreade)

{//将sum[n]中的不重复的元素放到grade[n]中,函数返回grade[]中实际元素的个数。

intFind;//有无重复的标记:

1为有,0为无。

intnElem=1;//gread[]中的实际元素个数。

Agrade[0]=Asum[0];

for(inti=0;i

{

for(intj=0;j

{

if(Asum[i]==Agrade[j])//判断两个浮点数相等条件。

{

Find=1;

break;

}

else

{

Find=0;

}

}

if(Find==0)

{

Agrade[nElem]=Asum[i];

nElem++;

}

}//for(最外)

returnnElem;

}

//------------

voidmain()

{

NodeStu[n];

Node*pStu;

pStu=Stu;//声明n个Student对象的一个数组。

floatsum[n],grade[n+1];//因为想在grade[]中用到直接插值排序法,要用到"哨兵"。

所以构造n+1.

pStu=Init(pStu,n,sum,n);

intnGrade_size;

nGrade_size=Del_Same(sum,n,grade,n+1);

float*pGrade=0;

pGrade=Sort(grade,nGrade_size);

Display(pStu,n,sum,n,grade,nGrade_size);

}

 

八、心得体会

这次我抽到的题目很简单,但是这是指用基础的C语言写很简单。

如果想把本学期数据结构的知识应用到程序中还是很有挑战性的。

我采用的是直接插入排序法,刚开始把书上的程序照搬过来,结果发现有许多的错误。

改了很久才改对。

最难的是相同成绩处理的函数,我刚开始以为很简单,但是前面各个成绩采用的是指针结构体,很难处理,最后在网上查找了一下才对照着改正过来。

最后我学会的是可以先把数据输入数组内,在用指针直接指向数据就可以了,这样比输入数据时就用指针要简单的多。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2