《C语言程序设计》-综合性实验-冒泡排序Word格式.doc
《《C语言程序设计》-综合性实验-冒泡排序Word格式.doc》由会员分享,可在线阅读,更多相关《《C语言程序设计》-综合性实验-冒泡排序Word格式.doc(5页珍藏版)》请在冰豆网上搜索。
(1)对某门科目的成绩进行排序并显示输出;
(2)求出每门科目的最高分、最低分和平均分的信息;
学生成绩的数据用结构数组表示,包括:
学号、姓名、三门科目的考试成绩,其结构格式如下:
学号
姓名
无机化学
大学英语
高等数学
intnum
charname[10]
intscore[3]
二、设计方法
1.冒泡排序(BubbleSort)
(1)基本思想:
两两比较待排序数据元素的大小,发现两个数据元素的次序相反时即进行交换,直到没有反序的数据元素为止。
(2)排序过程:
设想被排序的数组R[1..N]垂直竖立,将每个数据元素看作有重量的气泡,根据轻气泡不能在重气泡之下的原则。
从下往上扫描数组R。
凡扫描到违反本原则的轻气泡。
就使其向上"
漂浮"
。
如此反复进行,直至最后任何两个气泡都是轻者在上,重者在下为止。
冒泡排序的程序代码:
voidBubbleSort(inta[],intn)
{inttemp;
for(inti=0;
i<
n;
i++)
for(intj=0;
j<
i-1;
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<
iostream.h>
iomanip.h>
#defineSN10//学生人数
#defineCN3//课程数目
intcourse;
//要排序的那门课程
structstudent
{intnum;
charname[10];
intscore[CN];
};
voidbubble(structstudent*pstu)//冒泡排序(从大到小)
{structstudenttmp;
for(inti=0;
SN;
i++)//要排SN个数,则应排SN遍:
{
for(intj=0;
SN-i-1;
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<
<
setw(8)<
"
学号"
;
setw(10)<
姓名"
无机化学"
大学英语"
高等数学"
endl;
for(inti=0;
i<
SN;
i++)
{cout<
pstu[i].num;
cout<
pstu[i].name;
for(intj=0;
j<
CN;
j++)
cout<
pstu[i].score[j];
cout<
voidavgscore(structstudent*pstu)
intsum[CN],n;
for(n=0;
n<
n++)
{sum[n]=0;
for(intj=0;
j<
sum[n]+=pstu[j].score[n];
}
cout<
各科课程的平均成绩:
n<
cout<
setw(5)<
sum[n]/SN;
voidmaxmin(structstudent*pstu)
intmax[CN],min[CN],n;
{max[n]=0;
min[n]=100;
{if(pstu[j].score[n]>
max[n])
max[n]=pstu[j].score[n];
if(pstu[j].score[n]<
min[n])
min[n]=pstu[j].score[n];
}
各科课程的最高分:
"
max[n];
各科课程的最低分:
min[n];
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;
setw(30)<
***学生成绩管理***"
endl<
要对第几门课程的成绩排序:
"
cin>
>
//输入要排序的第几门课程
course=n-1;
structstudent*pstu=stu;
bubble(pstu);
output(pstu);
maxmin(pstu);
avgscore(pstu);
三、验证结果
四、总结
本实验的程序有一定的实用性,是对所学过的知识的综合运用。
程序的核心是对数据进行排序,必须要对排序算法有深入的领会,由于学生的数据是使用结构体数组表示,因此在调用排序函数时,需要对排序算法的原代码作相应的修改,还要注意函数参数引用的格式。
此外在程序调试时,会出现一些编译错误,其中包括语法错误和逻辑错误,必须要对其修改,在编写和调试程序过程中,提高了本人编程技能。
五、参考资料与网上资源
(1)《C语言程序设计实验指导与习题解答》蒋清明主编人民邮电出版社
(2)《C++程序设计技能百练》蒋立翔编著中国铁道出版社
(3)唯C世界,
(4)C语言编程网,
(5)C语言编程宝典,
(6)C语言程序基础,