实验6 内部排序.doc_第1页
实验6 内部排序.doc_第2页
实验6 内部排序.doc_第3页
实验6 内部排序.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验六 内部排序一、实验目的1、掌握插入排序、选择排序、交换排序等各种排序方法的基本思想并能用C/C+语言实现。2、掌握各种排序方法的特点及适用情形,并能在解决实际问题的过程中灵活选用不同的排序方法。3、掌握各种排序方法的操作过程及其依据。,二、实验环境PC微机,Windows,DOS,Turbo C或Visual C+三、实验内容1、学生成绩统计、排序的实现(1)问题描述在学生成绩管理中,经常会遇到求平均成绩,统计不及格学生成绩,统计优秀学生人数,以及按成绩对学生进行排名等。现假设有某个班级的若干名学生,每个学生都考试完成了相同的4门课程,试对所有学生的成绩完成以下工作:1) 求每门课程的平均成绩。2) 输出有课程不及格学生的姓名、学号及其各门课程的成绩。3) 输出个人平均分超过90分的学生姓名、学号。4) 对4门课程中的任何一门,可随意抽取1门按学生成绩进行排序。(2)基本要求由于问题描述中涉及的学生个人信息包含的内容较多,要完成所有工作必须设计较为合理的数据结构,否则在算法实现时,可能会增加不少难度。在对某门课程按成绩进行排序时,要根据实际情况,灵活选用排序方法。在编程实现时,一定要体现清晰的算法思想,注重程序的实现性和通用性。算法: #include stdio.h #include conio.h int i; int temp; int j; int choose; struct int stuid; char stuname20; char obj120; char obj220; char obj320; char obj420; int grade1; int grade2; int grade3; int grade4; info3; /*初始化数据*/ void inputinfo() for(i=0;i3;i+) printf(The %d student id :,i+1); scanf( %d,&infoi.stuid); printf(The %d student name:,i+1); scanf( %c,&infoi.stuname); getchar(); printf(The %d student objectname1:,i+1); scanf( %c,&infoi.obj2); getchar(); printf(The %d student grade1:,i+1); scanf( %d,&infoi.grade1); getchar(); printf(The %d student objectname2:,i+1); scanf( %c,&infoi.obj2); getchar(); printf(The %d student grade2:,i+1); scanf( %d,&infoi.grade2); getchar(); printf(The %d student objectname3:,i+1); scanf( %c,&infoi.obj3); getchar(); printf(The %d student grade3:,i+1); scanf( %d,&infoi.grade3); getchar(); printf(The %d student objectname4:,i+1); scanf( %c,&infoi.obj4); getchar(); printf(The %d student grade4:,i+1); scanf( %d,&infoi.grade4); /*每门课程的平均成绩*/ void getAveGrade() int grade1 = 0; int grade2 = 0; int grade3 = 0; int grade4 = 0; for(i=0;i3;i+) grade1 = grade1 + infoi.grade1; grade2 = grade2 + infoi.grade2; grade3 = grade3 + infoi.grade3; grade4 = grade4 + infoi.grade4; printf(The %c is: %d,info0.obj1,grade1/3); printf(The %c is: %d,info1.obj2,grade2/3); printf(The %c is: %d,info2.obj3,grade3/3); printf(The %c is: %d,info3.obj4,grade4/3); /*输出有课程不及格学生的姓名,学号及其各门课程的成绩*/ void getflunkinfo() for(i=0;i3;i+) if(infoi.grade160 | infoi.grade260 | infoi.grade360 | infoi.grade460) printf(Student id: %d,infoi.stuid); printf(Student Name: %c,infoi.stuname); printf(The %c : %d,infoi.obj1,infoi.obj1); printf(The %c : %d,infoi.obj2,infoi.obj2); printf(The %c : %d,infoi.obj3,infoi.obj3); printf(The %c : %d,infoi.obj4,infoi.obj4); /*输出个人平均分超过90分的学生姓名,学号*/ void getGoodStudent() for(i=0;i=90) printf( The good student id is : %c,infoi.stuid); printf( The good student name is : %c,infoi.stuname); /*对4门课程中的任何一门,可随意抽取1门按学生成绩进行排序*/ void geteachgrade() int count3; printf(Please input the number 14: ); scanf( %d,&choose); if(choose=1) for(i=0;i3;i+) counti = infoi.grade1; else if(choose=2) for(i=0;i3;i+) counti = infoi.grade2; else if(choose=3) for(i=0;i3;i+) counti = infoi.grade3; else if(choose=4) for(i=0;i3;i+) counti = infoi.grade4; /*冒泡排序*/ for(i=0;i10;i+) for(j=0;j10;j+) if(countjcounti) temp = counti; counti = countj; countj = temp; for(i=0;i10;i+) printf( %d ,counti); void main() inputinfo(); printf(Please input the number 14: ); scanf( %d,&choose); if(choose=1) getAveGrade(); else if(choose=2) getflunkinfo(); else if(choose=3) getGoodStudent(); else if(choose=4) geteachgrade(); 2、多种基本内排序方法的实现(1)问题描述教材中关于排序的方法介绍了许多种,如果不深刻理解它们的排序思想,实际应用中非常容易混淆,不易于在算法设计中灵活运用。准确掌握不同排序排序方法的有效手段就是比较。试比较直接插入排序法、冒泡排序、简单选择排序、快速排序的思想,并编程实现它们。(2)基本要求输入各种不同的数据检验在各种排序方法下的结果,比较结果是否

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论