《candcc++课程设计5857》由会员分享,可在线阅读,更多相关《candcc++课程设计5857(15页珍藏版)》请在金锄头文库上搜索。
1、 攀枝花学院 学生课程设计(论文) 题 目: 各种排序 学生姓名: 甘双丰 学 号: 201110803007 所在院(系): 计算机学院 专 业: 2011 级网络工程 班 级: 2011 级一班 指 导 教 师: 陈三清 职称: 讲师 2012 年 6 月 13 日 攀枝花学院教务处制 攀枝花学院本科学生课程设计任务书 题 目 各种排序 1、课程设计的目的 (1)巩固和加深学生对 C 语言课程的基本知识的理解和掌握; (2)掌握 C 语言编程和程序调试的基本技能; (3)利用 C 语言进行简单软件设计的基本思路和方法; (4)提高运用 C 语言解决实际问题的能力。 2、课程设计的内容和要求
2、(包括原始数据、技术要求、工作要求等) 问题描述:用程序实现对一组数据的排序,分别使用选择、冒泡和插入排序方法 基本要求:1、可以选择按从小到大的顺序排列,也可以选择从大到小的顺序排列; 2、显示最好情况下及最坏情况下数据交换的次数; 3、 可以选择一种方法排序, 也可以同时选择两种及两种以上的方法排序; 4、输出每一种选择后的排序输出结果。 3、主要参考文献 1 潭浩强, C 程序设计 ,清华大学出版社 2 王声决, C 语言程序设计 ,中国铁道出版社 3 潭浩强, C 程序设计题解与上机指导 ,清华大学出版社 4 刘玲等, C 语言程序设计应用教程 ,西南师范大学出版社 4、课程设计工作进
3、度计划 1 潭浩强, C 程序设计 ,清华大学出版社 2 王声决, C 语言程序设计 ,中国铁道出版社 3 潭浩强, C 程序设计题解与上机指导 ,清华大学出版社 4 刘玲等, C 语言程序设计应用教程 ,西南师范大学出版社 指导教师(签字) 日期 年 月 日 教研室意见: 年 月 日 学生(签字) : 接受任务时间: 年 月 日 注:任务书由指导教师填写。 课程设计(论文)指导教师成绩评定表 题目名称 评分项目 分值 得分 评价内涵 工作 表现 20% 01 学习态度 6 遵守各项纪律,工作刻苦努力,具有良好的科学工作态度。 02 科学实践、调研 7 通过实验、试验、查阅文献、深入生产实践等
4、渠道获取与课程设计有关的材料。 03 课题工作量 7 按期圆满完成规定的任务,工作量饱满。 能力 水平 35% 04 综合运用知识的能力 10 能运用所学知识和技能去发现与解决实际问题,能正确处理实验数据,能对课题进行理论分析,得出有价值的结论。 05 应用文献的能力 5 能独立查阅相关文献和从事其他调研;能提出并较好地论述课题的实施方案;有收集、加工各种信息及获取新知识的能力。 06 设计(实验)能力,方案的设计能力 5 能正确设计实验方案,独立进行装置安装、调试、操作等实验工作,数据正确、可靠;研究思路清晰、完整。 07 计算及计算机应用能力 5 具有较强的数据运算与处理能力;能运用计算机
5、进行资料搜集、加工、处理和辅助设计等。 08 对计算或实验结果的分析能力(综合分析能力、技术经济分析能力) 10 具有较强的数据收集、分析、处理、综合的能力。 成果 质量 45% 09 插图(或图纸)质量、篇幅、设计(论文)规范化程度 5 符合本专业相关规范或规定要求;规范化符合本文件第五条要求。 10 设计说明书(论文)质量 30 综述简练完整,有见解;立论正确,论述充分,结论严谨合理;实验正确,分析处理科学。 11 创新 10 对前人工作有改进或突破,或有独特见解。 成绩 指导教师评语 指导教师签名: 年 月 日 目 录 摘要 5 1 问题描述6 1.1 基本要求6 2 概要设计7 2.1
6、 系统模块划分及定义7 2.2 流程图7 2.3 算法思想8 3 详细设计9 3.1 选择排序源代码9 3.2 插入排序源代码9 3.3 冒泡排序源代码 10 4 调试分析12 5 测试结果13 6 总结14 参考文献15 摘要 排序是计算机程序设计中的一种重要操作,在数据处理中占有极其重要的位置。有资料表明,在当今计算机系统中,CPU 有 50%以上的处理时间是用在数据排序上的1。排序有很多种,如插入排序、交换排序、选择排序、归并排序等。而选择法排序是其中一个比较简单而有效的排序方法,也是 C 语言中一维数组的经典算法。因此我们不得不熟练的掌握选择排序法。 1. 问题描述 用程序实现对一组数
7、据的排序,分别使用选择、冒泡和插入排序方法 冒泡算法特点:相邻元素两两比较,每趟将最值沉底即可确定一个数在结果的位置,确定元素位置的顺序是从后往前,其余元素可能作相对位置的调整。可以进行升序或降序排序。 选择算法特点:每趟是选出一个最值确定其在结果序列中的位置,确定元素的位置是从前往后,而每趟最多进行一次交换,其余元素的相对位置不变。可进行降序排序或升序排序。 插入算法特点:每趟从无序序列中取出第一个数插入到有序序列的合适位置,元素的最终位置在最后一趟插入后才能确定位置。也可是先用循环查找插入位置(可从前往后或从后往前) ,再将插入位置之后的元素(有序列中)逐个后移一个位置,最后完成插入。该算
8、法的特点是在寻找插入位置的同时完成元素的移动。因为元素的移动必须从后往前,则可将两个操作结合在一起完成,提高算法效率。仍可进行升序或降序排序。 1.1 基本要求 可以选择按从小到大的顺序排列,也可以选择从大到小的顺序排列; 显示最好情况下及最坏情况下数据交换的次数; 可以选择一种方法排序,也可以同时选择两种及两种以上的方法排序; 输出每一种选择后的排序输出结果。 2. 概要设计 2.1 系统模块划分及定义 Include,头文件,功能是对函数进行声明。 main,主函数,功能是作为程序的入口并实现对问题的处理。 a,数组,功能是方便对 main 函数中的数据进行相应的处理运算。 for(, ,
9、 , )语句,功能是对 main 函数中的数据进行循环比较。 scanf,printf,数据库函数,功能分别是输入原始数据,输出运行结果。 2.2 流程图 图 2.2.1-1 选择排序流程图 图 2.2.1-2 插入排序流程图 图 2.2.1-3 冒泡排序流程图 2.3 算法思想 选择排序(Selection Sort)的基本思想是:每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的子文件的最后,直到全部记录排序完毕。 插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置, 直到全部记录插入完成为止。
10、交换排序的基本思想是:两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。 3. 详细设计 3.1 选择排序源代码 # include main() int a10,i,j,k,t,n=10; int count=0; printf(Please input 10 numbers:); for(i=0;i10;i+) scanf(%d,&ai); for(i=0;in-1;i+) /*外循环控制趟数,n 个数选 n-1 趟*/ k=i; /*假设当前趟的第一个数为最值,记在 k 中 */ for(j=i+1;jn;j+) /*从下一个数到最后一个数之间找最值
11、*/ if(akaj) /*若其后有比最值更大的*/ k=j; /*则将其下标记在 k 中*/ if(k!=i) /*若 k 不为最初的 i 值, 说明在其后找到比其更大的数*/ t=ak; ak=ai; ai=t; /*则交换最值和当前序列的第一个数*/ count+; printf(The sorted numbers: ); for(i=0;i10;i+) printf(%d ,ai); printf(n); printf(%dn,count); 3.2 插入排序源代码 # include main() int a10,i,j,t,count=0; printf(Please input
12、 10 numbers: ); for(i=0;i10;i+) scanf(%d,&ai); for(i=1;i=0 & taj ; j- ) /*在有序序列(下标 0 i-1)中寻找插入位置*/ aj+1=aj; /*若未找到插入位置,则当前元素后移一个位置*/ aj+1=t; /*找到插入位置,完成插入*/ count+; printf(The sorted numbers: ); for(i=0;i10;i+) printf(%d ,ai); printf(n); printf(%dn,count); 3.3 冒泡排序源代码: #include main() int i,j,temp,c
13、ount=0; int a10; for(i=0;i10;i+) scanf (%d,&ai); for(j=0;j10;j+) for (i=0;i10-j;i+) if (aiai+1) temp=ai; ai=ai+1; ai+1=temp; count+; for(i=0;i10;i+) printf(%5d,ai ); printf(n); printf(交换次数:%dn,count); 4. 调试分析 4.1 调试分析: 输入参数:9 6 4 7 8 2 0 1 5 3 理论排序:9 8 7 6 5 4 3 2 1 0 理论排序次数:选择排序 9 次 插入排序 9 次 冒泡排序 1
14、0 次 5. 测试结果 5.1 运行结果截图: 图 5.1-1 选择排序运行结果截图 图 5.1-2 插入排序运行结果截图 图 5.1-3 冒泡排序运行结果截图 6. 总结 这次的程序设计实验是对我们进入大学以来学习程序设计语言结果的一次大检验。自己动手,自己发现和解决问题。发现了自己的许多不足。平时没有掌握好的知识在这次实验中彻底暴露出来,经过不断思考,不断查阅资料和上机运行,解决其中大部分问题,当然还存在一些问题没有解决。我相信在以后的学习能够解决好它们。 但是, 收获还是不小的, 我不仅对 C 的操作有了进一步的掌握,还了解到了程序设计的书写风格及其注释的格式。 通过本次试验巩固和加深了对 C 语言课程的基本知识的理解和掌握;基本掌握了 C 语言编程和程序调试的基本技能; 学会了利用 C 语言进行简单软件设计的基本思路和方法;显著提高了运用 C 语言解决实际问题的能力。为以后学习 c语言及其他相关课程打下了坚实的基础,对以后的学习生活起到了非常大的帮助。 参考文献 1 潭浩强, C 程序设计 ,清华大学出版社 2 王声决, C 语言程序设计 ,中国铁道出版社 3 潭浩强, C 程序设计题解与上机指导 ,清华大学出版社 4 刘玲等, C 语言程序设计应用教程 ,西南师范大学出版社