版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课 程 设 计 说 明 书题目:数据结构与算法课程设计学院(系): 专业班级: 学 号: 学生姓名: 指导教师: 教师职称: 起止时间: 课程设计(论文)任务及评语院(系): 教研室: 软件工程学 号学生姓名专业班级课程设计(论文)题目数据结构与算法课程设计课程设计(论文)任务1从十个题目中选择一个题目,,要求每个题目用标准的C语言程序实现,另外,完成思考题一题,思考题须写出相应的类C算法即可。2每个题目编写源程序时,要求有主菜单,每个子功能定义为相应的子函数,在主函数中调用各子函数,程序结构清晰。3 根据题目,选择合适的逻辑结构和存储结构。4 输入的数据由键盘输入。5 分析算法的时间复杂度,
2、要求算法的效率尽可能高。6 验证排序算法的稳定性。指导教师评语及成绩成绩: 指导教师签字: 2012 年 月 日目 录第1章课程设计目的与要求11.1 课程设计目的11.2 课程设计的实验环境11.3 课程设计的预备知识11.4 课程设计要求1第2章 课程设计内容22.1题目的选择22.2 题目的具体实现22.3 思考题解析12总结:14参考文献错误!未定义书签。 第1章 课程设计目的与要求1.1 课程设计目的 本课程设计是计算机科学与技术专业、软件工程专业的专业技术实践课。 本实践课的主要目的是:使学生学会利用在课堂中学过的理论知识,解决相应的实际问题,深入理解和灵活掌握所学的内容,培养学生
3、理论和实践相结合的能力,培养学生分析问题解决问题的能力。同时,在实验步骤规范化、程序设计方法等方面受到比较系统和规范的训练。通过实践设计使学生进一步加深对程序设计的规范化及对复杂程序设计步骤的理解。通过课程设计,加深对数据结构这一课程所学内容的进一步理解与巩固。通过课程设计,加深对结构化设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构。通过课程设计,提高程序开发功能,能运用合理的控制流程编写清晰高效的程序。通过课程设计,训练C程序调试能力,能将一个中小型各级组织系统联调通过。通过课程设计,开发一个中小型系统,掌握系统研发全过程。通话课程设计,培养分析问题、解决实际问题的能力。1.2
4、 课程设计的实验环境 PC机,WindowsXP,C+。1.3 课程设计的预备知识 C语言程序设计、数据结构。1.4 课程设计要求(1)认真查找资料,分析每个题目应选择的数据结构(逻辑结构和物理结构);(2)按时到实验室调试程序,遵守实验室的规章制度,爱护设备;(3)每个题目编写源程序时,每个子功能定义为相应的子函数,在主函数中调用各子函数,程序结构清晰,有必要的注释,可读性强。(4)程序健壮性强,当数据输入错误时,要进行相应的处理; (5)分析算法的时间复杂度,要求算法的效率尽可能高;(6)对于排序算法,要验证排序算法的稳定性。第2章 课程设计内容2.1题目的选择6、学生成绩管理系统2.2
5、题目的具体实现(1)题目应实现的具体功能;录入学生成绩信息并保存;可查询显示所有学生的个人信息;可查询显示所有学生的所学课程信息;按学号或姓名查询成绩信息;能添加、删除和修改学生的成绩信息;(2)题目所选择的数据结构及存储结构; 采用线性数据结构及链式存储结构(3)完整的源程序#include<stdio.h> #include<stdlib.h> #include<string.h> struct stud long num; char name20; double score1,score2; ; typedef struct stucode struc
6、t stud student ; struct stucode *next; L; void menu(); void createlist(struct stucode *r); void out(struct stucode *r); void search1(struct stucode *r); void search2(struct stucode *r); void del(struct stucode *r); void insert(struct stucode *r);void change(struct stucode *r); void main() char choos
7、e; int flag=1; struct stucode *r=NULL; while(flag) system("cls"); menu(); choose=getchar(); switch(choose) case '1': createlist(&r); out(r); printf("Testing function 1nPress any key to continuen"); getchar();getchar(); break;case '2': search1(r); printf("
8、Testing function 1nPress any key to continuen"); getchar(); getchar(); break; case '3': search2(r); printf("Testing function 1nPress any key to continuen"); getchar(); getchar(); break; case '4': del(&r); out(r); printf("Testing function 1nPress any key to con
9、tinuen"); getchar(); getchar(); break; case '5': insert(&r); out(r); printf("Testing function 1nPress any key to continuen"); getchar(); getchar(); break;case '6':out(r);printf("Testing function 1nPress any key to continuen");getchar(); getchar();break;ca
10、se '7':change(&r);out(r);printf("Testing function 1nPress any key to continuen"); getchar(); getchar(); break;case '0': flag=0; printf("The end.n"); break; default: printf("nWrong Selection!(选择错误,请重选!)n");getchar();getchar(); void createlist(struct s
11、tucode *r) struct stucode *p,*t; long n; char a20; double s1,s2; if(*r) *r=NULL; printf(" n请输入:n 学号 姓名 分数1 分数2(若要结束请输入四个为零)n"); scanf("%ld%s%lf%lf",&n,a,&s1,&s2); if(n=0) return; p=(L *)malloc(sizeof(L); p->student.num=n; strcpy(p->,a);p->student.
12、score1=s1;p->student.score2=s2;p->next=NULL; *r=p; scanf("%ld%s%lf%lf",&n,a,&s1,&s2); while(n) t=p; p=(L *)malloc(sizeof(L); p->student.num=n; strcpy(p->,a); p->student.score1=s1; p->student.score2=s2;p->next=NULL; t->next=p;scanf("%ld%s
13、%lf%lf",&n,a,&s1,&s2); void search1(struct stucode *r) long x; struct stucode *p=r;if(!r) printf("没有学生信息可查询!n"); return ; printf(" 请输入要查询的学生信息的学生学号:n"); scanf("%ld",&x); while(p&&p->student.num!=x) p=p->next; if(p=NULL) printf("Er
14、ror! No such student !n"); else printf("%ld%s%.2lf%.2lfn",p->student.num,p->,p->student.score1,p->student.score2); void search2(struct stucode *r) char m20; if(!r) printf("没有学生信息可查询!n"); return ; printf(" 请输入要查询的学生信息的学生姓名:n"); scanf("%s
15、",m); while(r&&strcmp(r->,m) r=r->next; if(r=NULL) printf("Error! No such student !n"); else printf("%ld%s%.2lf%.2lfn",r->student.num,r->,r->student.score1,r->student.score2); void del(struct stucode *r) long k; struct stucod
16、e *p=*r,*t; if(!(*r) printf("没有学生信息可删除 !n"); return ; printf(" 请输入要删除的学生信息的学生学号:n"); scanf("%ld",&k); if(p->student.num=k) *r=(*r)->next,free(p); else while(p->next&&p->next->student.num!=k) p=p->next; if(p->next=NULL) printf("Error
17、! No such student !n"); else t=p->next; p->next=p->next->next; free(t); void insert(struct stucode *r) long n; char a20; double s1,s2; L *p,*t,*k; printf(" 请输入要插入的学生信息的学生学号 姓名 分数1 分数2 :n"); scanf("%ld%s%lf%lf",&n,a,&s1,&s2); p=(L *)malloc(sizeof(L); p
18、->student.num=n; p->student.score1=s1; p->student.score2=s2;strcpy(p->,a); if(!(*r) *r=p; (*r)->next=NULL; return ; if(p->student.num<(*r)->student.num) p->next=(*r),(*r)=p; else t=*r; k=t; while(t->next&&t->next->student.num<=p->student.
19、num) t=t->next; p->next=t->next; t->next=p; *r=k; void out(struct stucode *r) printf("nn"); if(!r) printf("没有学生信息可输出!n"); return ; while(r) printf("%ld%s%.2lf%.2lfn",r->student.num,r->,r->student.score1,r->student.score2); r=r->nex
20、t; printf("nn"); void change(struct stucode *r)struct stucode *p=*r;long x;long n; char a20; double s1,s2; printf("更改的学生的信息n"); printf(" 请输入要查询的学生信息的学生学号:n"); scanf("%ld",&x); while(p&&p->student.num!=x) p=p->next; if(p=NULL) printf("Err
21、or! No such student !n"); else printf("%ld%s%.2lf%.2lfn",p->student.num,p->,p->student.score1,p->student.score2); printf(" 请输入要修改的学生信息:n"); scanf("%ld%s%lf%lf",&n,a,&s1,&s2); p->student.num=n; strcpy(p->,a); p-&
22、gt;student.score1=s1; p->student.score2=s2; void menu() printf("n 学生成绩管理系统n"); printf("n 菜单nn"); printf("n 1建立链表n"); printf("n 2查找某学号的学生信息n"); printf("n 3查找某姓名的学生信息n"); printf("n 4删除某学号的学生信息n");printf("n 5插入新的学生信息n");printf(&qu
23、ot;n 6显示所有学生的个人信息n");printf("n 7更改学生个人信息n"); printf("n 0退出n"); printf("n 请选择您要执行的选项:n"); (4)程序的输入和输出图1按学生学号查找结果:图2按学生姓名查找:图3删除某学生的运行结果:图4插入某学生的运行结果:图5显示所有学生的信息:图6(5)调试程序中遇到的问题及解决方案 在调试search1子函数由于在查找中移动了原指针,导致search1中不能查找,解决方法设一结构体类型的指针,将原指针赋给该指针,将该指针进行移动查找。在调试chan
24、ce()中,如何对已有的记录进行从新输入更改。解决方案为在chance()子函数中加入一个查找的程序,也就是说先找到要修改的学生信息,用scanf语句对要修改的学生的信息进行重新输入,再将所赋的信息通过赋值语句将修改后的学生信息赋给该学生对应的结构体。如何返回一个结构体中信息,解决方案是采用指针类型,将变量的地址作为实参赋给子函数。数组名代表数组首地址,用scanf语句赋值字符串时,不用加地址操作符。2.3 思考题解析所选择的思考题:编写一个算法,构造一棵哈夫曼树。程序如下:typedef structunsigned int weight;unsigned int parent,lchild
25、,rchild;HTNode,*HuffmanTree;typedef char * *HuffmanCodevoid HnffCodeding(HnffmanTree &HT,&HC,int *w,int n)if(n<=1) return;m=2*n-1; HT=(HuffmanTree)malloc(m+1)*sizeof(HTNode); for(p=HT;i=1;i<=n;+i,+,+w) *p= *w,0,0,0; for(;i<=m;+i,+p) *p= *w,0,0,0; for(i=n+1;i<=m;+i) Select(HT,i-1,
26、s1,s2); HTs1.parent=i; HTs2.parent=i; HTi.lchild=s1; HTi.rchild=s2; HTi.weight=HTs1.weight+HTs2.weight; HC=(HuffmanCode)malloc(n+1)*size(char *); cd=(char *)malloc(n*sizeof(char); cdn-1=0; for(i=1;i<=n;+i) start=n-1; for(c=i;f=HTi.parent;f!=0;c=f,f=HTf.parent) if(HTf.lchild=c) cd-start="0" else cd-start="1" HCi=(char*)malloc(n-start)*sizeof(char); strcpy(HCi,&cdstart); free(cd);算法分析:哈夫曼树
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024辣椒购销合同争议的解决方式
- 2025年度智能化厨房设备采购与安装一体化合同4篇
- 2025年投标采购心得体会总结与合同管理创新合同3篇
- 个人房屋转让协议书合同范本
- 2024年驾校场地使用权益转让合同
- 2025年度煤矿废弃资源煤矸石回收利用合同4篇
- 2025年度油气田钻井工程合同执行监督合同范本4篇
- 全新2025年度医疗设备采购与安装合同5篇
- 2025版污水处理厂智能化改造与运营维护协议3篇
- 2025版领队与纪念品供应商合作协议范本4篇
- 2024-2030年中国护肝解酒市场营销策略分析与未来销售渠道调研研究报告
- 人教版高中数学必修二《第十章 概率》单元同步练习及答案
- 智慧校园信息化建设项目组织人员安排方案
- 浙教版七年级上册数学第4章代数式单元测试卷(含答案)
- 一病一品成果护理汇报
- AQ-T 1009-2021矿山救护队标准化考核规范
- 盐酸埃克替尼临床疗效、不良反应与药代动力学的相关性分析的开题报告
- 消防设施安全检查表
- 组合结构设计原理 第2版 课件 第6、7章 钢-混凝土组合梁、钢-混凝土组合剪力墙
- 建筑公司资质常识培训课件
- GB/T 26316-2023市场、民意和社会调查(包括洞察与数据分析)术语和服务要求
评论
0/150
提交评论