《C语言程序设计》-综合性实验-冒泡排序.doc
- 文档编号:73497
- 上传时间:2022-10-02
- 格式:DOC
- 页数:5
- 大小:70.50KB
《C语言程序设计》-综合性实验-冒泡排序.doc
《《C语言程序设计》-综合性实验-冒泡排序.doc》由会员分享,可在线阅读,更多相关《《C语言程序设计》-综合性实验-冒泡排序.doc(5页珍藏版)》请在冰豆网上搜索。
《C语言程序设计》综合性实验
一、实验名称:
学生成绩管理程序
二、实验目的:
(1)了解数组和结构体的概念
(2)掌握使用结构体数组存储数据的方法
(3)掌握一种常用的排序算法
(4)能够使用顺序结构、选择结构、循环结构语句编写程序求解问题
三、实验内容:
假设有一个班级学生n人,期末考试老师要对成绩从高到低列出,并对各科的考试成绩求出其最高分、最低分和平均成绩。
试设计一个成绩管理程序,按要求显示输出学生的记录和相关的成绩。
(1)学生成绩的数据来源于程序的结构数组,定义若干个(不少于10)学生的记录,学生记录包括:
学号、姓名、三至五门科目的考试成绩;
(2)使用一种排序算法对上述某门科目的成绩进行排序;
(3)将排序后的成绩,以每个学生记录的形式显示输出;
(4)求出每门科目的最高分、最低分和平均分的信息;
(5)输出的数据要清晰,排列整齐。
四、实验摘要:
通过学生成绩管理程序教师可以轻易地了解学生学习情况,传统手工的学生成绩管理,操作效率低,并且易于出错,查询不方便。
本程序实现了对一个班的学生考试成绩按科目进行排序,并统计出各科目的最高分、最低分和平均分的数据。
一、基本设计思想
假设有一个班级的学生n人,期末考试老师要对成绩从高到低列出,并对各科的考试成绩求出其最高分、最低分和平均成绩。
现在设计一个成绩管理程序,能够实现以下的功能:
(1)对某门科目的成绩进行排序并显示输出;
(2)求出每门科目的最高分、最低分和平均分的信息;
学生成绩的数据用结构数组表示,包括:
学号、姓名、三门科目的考试成绩,其结构格式如下:
学号
姓名
无机化学
大学英语
高等数学
intnum
charname[10]
intscore[3]
二、设计方法
1.冒泡排序(BubbleSort)
(1)基本思想:
两两比较待排序数据元素的大小,发现两个数据元素的次序相反时即进行交换,直到没有反序的数据元素为止。
(2)排序过程:
设想被排序的数组R[1..N]垂直竖立,将每个数据元素看作有重量的气泡,根据轻气泡不能在重气泡之下的原则。
从下往上扫描数组R。
凡扫描到违反本原则的轻气泡。
就使其向上"漂浮"。
如此反复进行,直至最后任何两个气泡都是轻者在上,重者在下为止。
冒泡排序的程序代码:
voidBubbleSort(inta[],intn)
{inttemp;
for(inti=0;i for(intj=0;j if(a[j]>a[j+1]) {temp=a[j];a[j]=a[j+1];a[j+1]=temp;} } 2.程序流程图 (1)排序算法---冒泡的排序 定义学生人数SN、考试科目数CN 定义学生数据记录的结构体student 定义实现排序算法的函数bubble() 定义输出学生数据的函数output() 定义求最高、最低分函数maxmin()和求平均分函数avescore() 初始化学生数据记录 输入执行排序的科目 调用排序算法的函数bubble() 调用输出学生函数output()显示排序后的结果 调用函数maxmin()输出最高分和最低分 调用函数avescore()输出各各科的平均分 i从0到n j从0到i-1 如果a[j]>a[j+1] 真交换a[j],a[j+1] (2)学生成绩管理程序 3.程序实现 #include #include #defineSN10//学生人数 #defineCN3//课程数目 intcourse;//要排序的那门课程 structstudent {intnum; charname[10]; intscore[CN]; }; voidbubble(structstudent*pstu)//冒泡排序(从大到小) {structstudenttmp; for(inti=0;i { for(intj=0;j { if(pstu[j+1].score[course]>pstu[j].score[course])//比较相邻的两个数: {tmp=pstu[j+1]; pstu[j+1]=pstu[j]; pstu[j]=tmp; }//对调两个数,需要有"第三者"参以 } } } voidoutput(structstudent*pstu) { cout< cout< cout< cout< cout< for(inti=0;i {cout< cout< for(intj=0;j cout< cout< } voidavgscore(structstudent*pstu) { intsum[CN],n; for(n=0;n {sum[n]=0; for(intj=0;j sum[n]+=pstu[j].score[n]; } cout<<"各科课程的平均成绩: "; for(n=0;n cout< cout< } voidmaxmin(structstudent*pstu) { intmax[CN],min[CN],n; for(n=0;n {max[n]=0; min[n]=100; for(intj=0;j {if(pstu[j].score[n]>max[n]) max[n]=pstu[j].score[n]; if(pstu[j].score[n] min[n]=pstu[j].score[n]; } } cout<<"各科课程的最高分: "; for(n=0;n cout< cout< cout<<"各科课程的最低分: "; for(n=0;n cout< cout< } voidmain() { structstudentstu[SN]={ {2004101,"花拓也",95,97,93}, {2004102,"梁慕橙",94,99,92}, {2004103,"梁晓乐",96,89,96}, {2004104,"任光晞",88,86,83}, {2004105,"花痴心",72,73,85}, {2004106,"何以茜",79,81,93}, {2004107,"花泽类",85,86,76}, {2004108,"道明寺",100,100,100}, {2004109,"西门",65,63,75}, {2004110,"美作",62,60,87}, }; intn; cout< cout<<"要对第几门课程的成绩排序: "; cin>>n;//输入要排序的第几门课程 course=n-1; structstudent*pstu=stu; cout< bubble(pstu); output(pstu); cout< maxmin(pstu); avgscore(pstu); } 三、验证结果 四、总结 本实验的程序有一定的实用性,是对所学过的知识的综合运用。 程序的核心是对数据进行排序,必须要对排序算法有深入的领会,由于学生的数据是使用结构体数组表示,因此在调用排序函数时,需要对排序算法的原代码作相应的修改,还要注意函数参数引用的格式。 此外在程序调试时,会出现一些编译错误,其中包括语法错误和逻辑错误,必须要对其修改,在编写和调试程序过程中,提高了本人编程技能。 五、参考资料与网上资源 (1)《C语言程序设计实验指导与习题解答》蒋清明主编人民邮电出版社 (2)《C++程序设计技能百练》蒋立翔编著中国铁道出版社 (3)唯C世界, (4)C语言编程网, (5)C语言编程宝典, (6)C语言程序基础,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言程序设计 语言程序设计 综合性 实验 冒泡 排序