查找排序的应用Word文档下载推荐.docx
- 文档编号:1126227
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:19
- 大小:236.91KB
查找排序的应用Word文档下载推荐.docx
《查找排序的应用Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《查找排序的应用Word文档下载推荐.docx(19页珍藏版)》请在冰点文库上搜索。
二、实验内容
[问题描述]
对学生的基本信息进行管理。
[基本要求]
设计一个学生信息管理系统,学生对象至少要包含:
学号、姓名、性别、成绩1、成绩2、总成绩等信息。
要求实现以下功能:
1.总成绩要求自动计算;
2.查询:
分别给定学生学号、姓名、性别,能够查找到学生的基本信息(要求至少用两种查找算法实现);
3.排序:
分别按学生的学号、成绩1、成绩2、总成绩进行排序(要求至少用两种排序算法实现)。
[测试数据]
由学生依据软件工程的测试技术自己确定。
三、算法设计
本程序指定的人数进行输入学号,姓名,性别,成绩1,和成绩2,进行建立学生信息。
姓名和性别分别用字符串型,学号、成绩1和成绩二用浮点型,并顺序表作为储存结构。
建立好后,实现:
查找、排序、退出功能。
查找:
三种查找选择,分别对学号以折半查找的方式查找,对姓名和性别以顺序查找。
排序:
分别以插入排序对学号进行排序,选择排序对成绩1、成绩2和总成绩进行排序。
以下是具体实现:
定义记录结构:
typedefstruct//定义每个记录(数据元素)的结构
{
stringxingming;
//姓名
stringxingbei;
//性别
floatxuehao;
//学号
floatchengji1,chengji2;
//成绩1,成绩2
floatzong;
//总分
}RecordType;
定义顺序表结构:
typedefstruct//定义顺序表的结构
RecordTyper[MAXSIZE+1];
//存储顺序表的向量
intlength;
//顺序表的长度
}SqList;
建立学生信息:
voidCreatList(SqList&
ST)//创建学生的相关信息
{
cout<
<
"
输入学生个数"
endl;
cin>
>
ST.length;
for(inti=0;
i<
i++)
{
cout<
输入第"
i+1<
学生的信息"
cout<
学号"
cin>
ST.r[i].xuehao;
姓名"
ST.r[i].xingming;
性别"
ST.r[i].xingbei;
成绩1"
ST.r[i].chengji1;
成绩2"
ST.r[i].chengji2;
}
输入完毕"
}
建立完后,计算每一个学生的成绩总分并把结构输出。
总分在voidzong(SqList&
ST)这个函数中实现,具体见源程序。
输出在voidshuchu(SqList&
ST)函数中实现代码如下:
voidshuchu(SqList&
ST)//输出
学生的信息如下"
学号姓名性别成绩1成绩2总分"
ST.r[i].xuehao<
"
ST.r[i].xingming<
ST.r[i].xingbei<
ST.r[i].chengji1<
ST.r[i].chengji2<
<
ST.r[i].zong<
为了使操作简单美观用菜单的形式进行选择相应操作,调用相应函数。
查找voidchaxun(SqList&
ST):
对学号、姓名、性别查找具体见源程序,退出回到主菜单的功能。
排序voidpaixu(SqList&
对学号、成绩1、成绩2和总成绩排序,并有退出此排序回到主菜单的功能。
四、调试测试
输入学生个数:
为了简单方便学生数为4个输入时,学号性别成绩1成绩2进以乱序输入:
如下:
可以看到输入的信息没有明显的什么顺序。
查询:
输入1回车
根据学号查询:
查找学号为2和3的同学的信息:
可以看到查找成功。
输入2回车:
根据姓名查询:
查找姓名为小明和小李同学的信息:
输入3回车:
根据性别查询:
分别分找为男和女同学的信息:
在上次的操作基础上按4退出子菜单进入主菜单再选择2进行排序操作子菜单:
根据学号排序:
按1回车如下:
可以看到已经按照学号的升序顺序变得有序;
根据成绩1排序:
按下2回车如下:
可以看到已经按照成绩1的升序变得有序;
根据成绩2排序:
按下3回车如下:
可以看到已经按照成绩2的升序变得有序;
按总成绩排序:
按下4回车如下:
可以看到已经按照总成绩的升序变得有序;
测试完毕测试结果成功。
五、总结:
本实验是关于查找和排序的实验,查找和排序都有很多种方法。
只要给定相关的关键字就能查找出相关的信息,也能按照关键字重新排序信息。
本实验综合性非常强,它包含顺序表的存储、查找、排序,而且多处用到调用的方法,调用贯穿于整个程序之中,用到折半查找和顺序查找,用到插入排序和选择排序。
通过本实验我对查找和排序这两个章节的内容更加了解,虽然这两个章节内容学习的时候时间非常紧,有很多不懂和疑问,但是通过这次实验,有了很好的补充,同时对顺序表和调用做了一次很好的复习。
在本次实验的过程中,我也遇到了许多的问题,主要的就是不能很好的对查找和排序进行综合性的运用,在层次方面,不能做到成功的调用等等很多疑问,但是我通过查阅课本和上网查找相关的问题,最终得到了解决。
本程序还有待完善的地方,比如当输入数据有错误的时候,会出现死锁的现象,导致程序不能正常工作,学号和性别的输入也没有什么限制,可以在定义的类型内任意输入,显然这不能和事实相符,以后可以加一个判断输入内容的代码。
六、源代码
#include<
iostream>
usingnamespacestd;
string>
#defineMAXSIZE100//设记录不超过20个
//姓名
//性别
voidcaidan(SqList&
ST);
voidzong(SqList&
ST)//计算总分
ST.r[i].zong=ST.r[i].chengji1+ST.r[i].chengji2;
voidchaxun(SqList&
ST)//查询信息
l1:
(1)根据学号查询"
(2)根据姓名查询"
(3)根据性别查询"
(4)退出"
intn,m;
stringname;
stringxb;
m;
if(m==1)//折半查找
RecordTypeLI;
//使学号变为有序
for(inti=1;
for(intj=i;
j>
=1;
j--)
if(ST.r[j].xuehao<
ST.r[j-1].xuehao)
{
LI=ST.r[j];
ST.r[j]=ST.r[j-1];
ST.r[j-1]=LI;
}
l2:
inta=0;
输入要查找的学号"
n;
intlow,high,mid;
low=0;
high=ST.length-1;
//置区间初值
while(low<
=high)
mid=(low+high)/2;
if(n==ST.r[mid].xuehao)
ST.r[mid].xuehao<
ST.r[mid].xingming<
ST.r[mid].xingbei<
ST.r[mid].chengji1<
ST.r[mid].chengji2<
ST.r[mid].zong<
a=1;
break;
elseif(n<
ST.r[mid].xuehao)
high=mid-1;
//继续在前半区间进行查找
else
low=mid+1;
//继续在后半区间进行查找
if(!
a)
所查信息不存在!
请重新输入"
gotol2;
gotol1;
if(m==2)//顺序查找
l3:
输入要查找的姓名"
name;
if(name==ST.r[i].xingming)
gotol3;
if(m==3)//顺序查找
l4:
输入要查找性别"
xb;
if(xb==ST.r[i].xingbei)
gotol4;
}
if(m==4)
caidan(ST);
voidpaixu(SqList&
ST)//排序
intn;
(1)根据学号排序"
(2)根据成绩1排序"
(3)根据成绩2排序"
(4)根据总成绩排序"
(5)退出"
;
if(n==1)//按学号排序,使用插入排序
{
//定义存储学号向量
shuchu(ST);
排序完毕"
gotol1;
if(n==2)//按成绩1排序,用选择排序
for(inti=0;
i<
for(intj=i+1;
j<
j++)
{
if(ST.r[i].chengji1>
ST.r[j].chengji1)
{
LI=ST.r[j];
ST.r[j]=ST.r[i];
ST.r[i]=LI;
}
}
shuchu(ST);
if(n==3)//根据成绩2排序,使用选择法排序
if(ST.r[i].chengji2>
ST.r[j].chengji2)
if(n==4)//根据总成绩排序,使用选择法排序
if(ST.r[i].zong>
ST.r[j].zong)
if(n==5)//退出
caidan(ST);
voidcaidan(SqList&
ST)//选择菜单
请选择要进入的模块"
(1)查询"
(2)排序"
(3)退出"
intc;
c;
if(c==1)
chaxun(ST);
if(c==2)
paixu(ST);
if(c==3)
exit(0);
voidmain()
SqListST;
CreatList(ST);
zong(ST);
shuchu(ST);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 查找 排序 应用
![提示](https://static.bingdoc.com/images/bang_tan.gif)