《《数据结构》课程设计报告_模板.doc》由会员分享,可在线阅读,更多相关《《数据结构》课程设计报告_模板.doc(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、湖北第二师范学院课程设计报告课程名称:数据结构课程设计设计题目: 运动会分数统计系统 系 别: 计算机科学系 专 业: 计算机应用技术 组 别: 课题 第8组 学生姓名: 学 号: 起止日期: 2007年 3 月 4 日 2007年 3月23日指导教师: 宋婉娟 1、问题描述与分析1.1课程设计目的:数据结构主要介绍一些最常用的数据结构,阐明各种数据结构内在的逻辑关系,讨论其在计算机中的存储表示,以及在其上进行各种运算时的实现算法,并对算法的效率进行简单的分析和讨论。数据结构是介于数学、计算机软件和计算机硬件之间的一门计算机专业的核心课程,它是计算机程序设计、数据库、操作系统、编译原理及人工智
2、能等的重要基础,广泛的应用于信息学、系统工程等各种领域。数据结构课程设计是为数据结构课程独立开设的实践性教学环节。数据结构课程设计对于巩固数据结构知识,加强学生的实际动手能力和提高学生综合素质是十分必要的。课程设计的目的:1要求学生达到熟练掌握C语言的基本知识和技能。2了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力。3提高程序设计和调试能力。学生通过上机实习,验证自己设计的算法的正确性。学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改。4培养算法分析能力。分析所设计算法的时间复杂度和空间复杂度,进一步提高程序设计水平。5初步掌握软件开发过程的问题分析、系统设计、程序
3、编码、测试等基本方法和技能。1.2 课程设计内容(1)、课程设计内容:运动会分数统计问题描述:参加运动会有n个学校,学校编号为1n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1m,女子m+1m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m=20,nm+w|s=0)printf(此次运动会不包括这个项目.nnn); 想在每次查询结束想返回主菜单进行其它项时,应在main( )函数中调用其它函数时再调用main( )函数,如:switch(choice) case 1: inputi
4、nformation();writedata();readdata();main(); case 2: output();main(); case 3: inquiry();main(); case 4: readdata();main(); 程序出现语法错误,发现是输入名次信息的地方忘带地址符&,或是程序不完整,只写了一个大括号。如: printf(*名次:); scanf(%d,&hi.cj.ranges);3.2 调试分析:(1).函数调用。函数调用是语言中一块十分重要部分,它可以把一个程序分成若干部分,然后进行配置,所以这块内容对我们很重要。(2).对结构体的不熟练。刚开始对结构体不太
5、了解,使调试程序时费了我不少的时间。结构体的嵌套使我很费力气,通过长时间的运用,终于可以得心应手。结构体在我的实习中站了很大的比重,我也很重视它。通过与线性表,循环等的有机搭配,我完成了实习任务。(3).循环的问题。这是我很苦恼,大量的循环语句的应用,分析。使我很头疼,循环是计算机语言中很重要的部分,什么程序也离不开循环,这个问题的解决使我有了坚实的基础。对多层循环的应用也有了深刻的理解。3.3调试结果:(1)首先运行文件运动会统计分数7.exe:(2) 输入信息:程序首先赋初值,定义学校的个数为2,男生项目为1,女生项目为1。输入1得到进入输入信息模块。按回车键可得到学校的得分信息和按编号获
6、得的所以信息。(3)输出信息:输入2进入输出信息模块,该模块分四项: 按学校编号输出: 按学校总分输出: 按男团总分输出: 按女团总分输出: 输入2返回输出信息模块,输入0返回主菜单。(4)查询信息:输入3进入信息查询模块: 按学校编号查询 按项目编号查询 输入错误信息时给出提示: 输入2继续查询,输入0返回主菜单(5) 调用信息输入4时显示出所有的信息:4、总结(1).调试中所遇到的较重要问题的回顾:1) 提出问题:所有输入输出内容只能在一屏内显示,学过c语言,很知道”n”是换行,”f”是换屏的,可是在这里就是无法实现。解决问题: 输入clrscr();2)提出问题:设置选项,供用户输入选择
7、时,当按任意键时都会跳入下一步操作,或者直接退出系统。分析问题:在供用户选择时,提供了几个选项,就写几个case语句,但是当用户输入的并不是这几个数字时,系统就不能做出正确判断。解决问题:修改case语句,添加default语句提示出错,要求重新输入; Default: clrscr(); /*清屏*/ printf(输入错误,请重新选择); 3)提出问题:当同一项目中有同一学校的两个人时,便不能正确输出或者输出相同人名。 分析问题:由于同时有两个相同学校编号的人存在,系统在输出时,不能确定那个是正确的,或者用后来的覆盖以前的。 解决问题:用for函数实现从开始到结尾的遍历。(2).算法的效率
8、及改进设想 算法的效率:总的来讲,严重引响执行速度的便是查找,查找任意一个数据,便要将其所在的结构从头至尾遍历一次,耗费大量的时间。 改进设想:因大部分显示均是以学校为单位,所以将以由有关人的各种信息为集合的结构改为以由有关学校的各种信息为集合的结构。比如说在运用数据结构排序的时候,方法的选择上,总是想用时间复杂度小的算法,但结果出了问题,最后还是用了我们熟悉的选择法排序。结构体的运用上感觉不是很熟悉,遇到结构体的时候很陌生,这是以后必须要加强的。在我们的这个程序中用了两个结构体:struct node int num; ; struct node *f22; 我们同样遇到了一些还不能很好解决
9、的问题,在输出的时候不能得到我们想要的效果,在按学校编号排序查询输出的时候,发生了重叠在做了几次修改之后都能使之满意,这有待学习和修改。在编写之前,做整体的规划很重要,这才能让我们的效率更高和合作得更好。一周的数据结构上机实习已经结束了,留给我们的路却漫长而幽远。本次集中上机实验,对我们来说可以算是一次挑战,因为在理论学习中没有好好的掌握,现在要独立完成一个较复杂的程序编写,确实有一点困难。但我们对于难度一向是以积极迎战的态度来面对,认真积极努力完成这次集中上机的任务。对我们来说这是一次很好的机会,同时我们也很好的把握了这次机会,认真的完成了此次上机学习的任务,对自己今后在程序编写方面相信会有
10、很大的帮助,在此也对学校安排这样一次学习表示感谢,最后希望自己在数据结构以及计算机的其他学习方面能够得到很好的提高。今后我们必需认真思考,而且要践行我们的承诺,一步一个脚印的走下去,才可以达到我们预期的彼岸!仔细回顾数据结构的学习过程,发现其实他也并不是想象中的那么难5、我所负责的部分void writedata() /把数据存储在文件中 FILE *report; int i; if(report=fopen(sportsdata.txt,w)=null) printf(不能打开文件n); exit(1); for(i=0;in;i+)fwrite(&hi,sizeof(headnode),
11、1,report); fclose(report); /按头结点块写入 void readdata() /读出文件中数据的函数 FILE *report; int i,j,k,s; if(report=fopen(sportsdata.txt,r)=null) printf(file can not be openedn); exit(1); for(i=0;in;i+) printf(*学校编号:); fread(&k,sizeof(int),1,report); printf(%dn,k); printf(*学校总分:); fread(&k,sizeof(int),1,report); p
12、rintf(%dn,k); printf(*男团总分:); fread(&k,sizeof(int),1,report); printf(%dn,k); printf(*女团总分:); fread(&k,sizeof(int),1,report); printf(%dn,k); printf(nnn); getch(); for(j=0;jm+w;j+) printf(*项目编号:); fread(&k,sizeof(int),1,report); printf(%dn,k); printf(*所取名次数量:); fread(&k,sizeof(int),1,report); printf(%dn,k); for(s=0;s5;s+) fread(&k,sizeof(int),1,report); if(k!=0) printf(*名次:), printf(%dn,k); for(s=0;s5;s+) fread(&k,sizeof(int),1,report); if(k!=0) printf(*分数:), printf(%dn,k); printf(nnn); getch(); fclose(report); /关闭文件 /按照读一个数据就输出一个数据的方式显示数据内容