课程设计数据结构之 折半查找职工信息管理.docx
- 文档编号:10558814
- 上传时间:2023-02-21
- 格式:DOCX
- 页数:12
- 大小:83.05KB
课程设计数据结构之 折半查找职工信息管理.docx
《课程设计数据结构之 折半查找职工信息管理.docx》由会员分享,可在线阅读,更多相关《课程设计数据结构之 折半查找职工信息管理.docx(12页珍藏版)》请在冰豆网上搜索。
课程设计数据结构之折半查找职工信息管理
目录
1问题描述1
2需求分析1
3概要设计1
3.1设计思路1
3.2模块划分2
3.3流程图2
4详细设计3
4.1数据类型的定义3
4.2程序分析3
4.3程序清单6
5测试分析8
6课程设计总结9
参考文献10
1问题描述
设计一个职工管理程序,输出10个职工的姓名和职工号,按职工号由大到小排序,姓名顺序也随之调整,要求输入一个职工号,用折半查找法找出该职工的姓名。
从主函数输入要查找的职工号,输出该职工姓名。
2需求分析
由题目分析可知道:
要编写一个职工数据管理程序,输入职工号和姓名并按职工号由大到小排序,则需建立一个子函数input-e(),其功能是输入职工的数据。
输入完成后,我们需对职工信息进行排序,此时需用到sort函数。
为提高效率,sort函数是用选择法进行排序。
排序后就是查找,题目要求输入一个职工号,用折半查找找出该职工的姓名。
所以查找需建立子函数search,用来查找职工的信息。
那么,整个程序主函数main就包括三个子函数,分别是输入函数input-e、排序函数sort和查找函数search。
3概要设计,
3.1设计思路
(1)首先建立主函数main,在main中有三个子函数,输入、排序、查找。
Main函数中用flag作为循环开关变量。
先赋值flag=1,输入要查找的职工号,显示查找结果,当不再继续查找时,flag=0.循环结束。
否则flag=1.
(2)接下来分析第一个子函数---输入函数input-e。
用一个一维数组存储职工号,为整型。
职工的姓名用一个二维数组存储,为字符串。
定义一个变量i用i的循环递增输入职工号和职工姓名。
(3)接着用选择法进行排序,建立子函数sort。
每趟排序从待排记录中找到最大的记录,并与第一个记录进行交换。
这样就完成了从大到小排序,是整个记录成递减序列。
(4)建立一个查找函数search。
功能为对指定的职工号查找出职工的姓名。
用loca作为开关变量,赋值loca=0。
用一个if语句判断待查的职工号与输入的职工姓名是否相符。
若待查找的变量n不在查找范围,则loca=-1.结束。
折半查找算法思想是考察表中中间记录,其关键字与给定的信息相符,则查找成功。
若大于给定值,则在前半部分再实施折半查找;若小于给定值,则下一步在后半部分查找。
一直到查找成功,或确定关键字与所给信息不存在。
3.2模块划分
本程序包括四个模块:
(1)主程序模块,
voidmain()
{
初始化;
输入职工号和职工姓名;
按职工号从大到小排序;
输入职工号查找职工姓名;
}
(2)输入模块——实现职工号与职工姓名的输入
(3)排序模块——实现将职工号从大到小排序
(4)查找模块——实现输入一个职工号查找该职工的姓名
3.3N-S图
调用input_e函数输入职工的数量
调sort函数进行排序
循环开关变量flag=1
输入要查找的职工号
调search函数进行查找并显示结果
T
不查找了?
F
Flag=0
图3.3实验系统N-S图
4详细设计
4.1数据类型的定义
(1)数组类型
#defineN10
charname[N][8]
(2)整数类型
inti,j,min,temp1,top,bott,loca;
4.2程序分析
此程序分为四个部分:
(1)主函数部分;
(2)输入部分;(3)选择排序部分;(4)查找部分。
(1)主函数
voidmain()
{intnum[N],number,flag,c,;
charname[N][8];/*定义num[]来存储职工号,name[N][8]来存储职工的姓名*/
input_e(num,name);/*输入职工信息*/
sort(num,name);/*由大到小排序*/
for(flag=1;flag;)
{printf("\nqingshuruyaochazhaodezhigongming:
");
scanf(“%d”,&number);/*从键盘输入要查找的职工号*/
search(number,num,name);/*通过职工号查找职工姓名*/
printf("shifoujixuchazhao?
y/n!
");
getchar();
c=getchar();
if(c=='N'||c=='n')/*判断是否继续查找*/
flag=0;
}
}
(2)输入职工号与职工姓名部分(input_e)
voidinput_e(num,name)
intnum[];
charname[N][8];/*定义num[]来存储职工号,name[N][8]来存储职工的姓名*/
{inti;
for(i=0;i {printf("\nshuruzhigonghao: "); scanf("%d",&num[i]);/*输入职工号*/ printf("\nshuruzhigongming: "); getchar(); gets(name[i]);/*输入职工的姓名*/ } } (3)选择法排序部分(sort) voidsort(num,name) intnum[]; charname[N][8]; { inti,j,max,temp1; chartemp2[8]; for(i=0;i { max=i; for(j=i;j if(num[max]>num[j])/*选择*/ max=j; temp1=num[i];/*排序*/ strcpy(temp2,name[i]);/*交换*/、 num[i]=num[max]; strcpy(name[i],name[max]); num[max]=temp1; strcpy(name[min],temp2); } printf("\npaixujieguoruxia: \n"); for(i=N-1;;i>0;i--)/*由大到小依次输出职工信息*/ printf("\n%5d%10s",num[i],name[i]); } (4)查找部分(search) voidsearch(n,num,name) intn,num[]; charname[N][8]; {inttop,bott,min,loca; loca=0; top=0; bott=N-1; if((n loca=-1;/*loca重新赋值*/ while((loca==0)&&(top<=bott))/*条件为真就循环*/ {min=(bott+top)/2;/*折半查找,取中间值*/ if(n==num[min])/*比较*/ {loca=min;/*查找成功*/ printf("%dhaozhigongdexingmingshi%s\n",name[loca]);/*根据职工号输出职工姓名*/ } elseif(n bott=min-1; else top=min+1; } if(loca==0||loca==-1)/*所要查找的记录不在输入的职工信息范围*/ printf("%dbuzaibiaozhong.\n",n); } 4.3程序清单 #include"stdio.h" #defineN10 voidinput_e(num,name) intnum[]; charname[N][8]; {inti; for(i=0;i {printf("\nshuruzhigonghao: "); scanf("%d",&num[i]); printf("\nshuruzhigongming: "); getchar(); gets(name[i]); } } voidsort(num,name) intnum[]; charname[N][8]; { inti,j,max,temp1; chartemp2[8]; for(i=0;i {max=i; for(j=i;j if(num[max]>num[j]) max=j; temp1=num[i]; strcpy(temp2,name[i]); num[i]=num[max]; strcpy(name[i],name[max]); num[max]=temp1; strcpy(name[max],temp2); } printf("\npaixujieguoruxia: \n"); for(i=N-1;i>0;i--) printf("\n%5d%10s",num[i],name[i]); } voidsearch(n,num,name) intn,num[]; charname[N][8]; {inttop,bott,min,loca; loca=0; top=0; bott=N-1; if((n loca=-1; while((loca==0)&&(top<=bott)) {min=(bott+top)/2; if(n==num[min]) {loca=min; printf("%dhaozhigongdexingmingshi: %s\n",n,name[loca]); } elseif(n bott=min-1; else top=min+1; } if(loca==0||loca==-1) printf("%dbuzaibiaozhong.\n",n); } main() { intnum[N],number,flag,c,n; charname[N][8]; input_e(num,name); sort(num,name); for(flag=1;flag;) {printf("\nqingshuruyaochaozhaodezhigonghao: "); scanf("%d",&number); search(number,num,name); printf("shifoujixuchazhao? y/n! "); getchar(); c=getchar(); if(c=='N'||c=='n') flag=0; } } 5测试分析 测试数据及结果如下: 按照题目所给的职工信息在键盘上进行输入,并得到测试数据。 按从大到小的排序结果: 从结果显示来看,确实是按从大到小排序的。 查找结果也与编程的理论值一样,所以,此程序正确。 6课程设计总结 这次,我选择的题目是折半查找。 通过这个课程设计让我对数据结构的算法有了更深的认识和理解,当然也学到了怎样将已学过的知识融会贯通以便更加灵活地运用这些知识来编写程序。 折半查找这个题目看起来虽然不是很难,在课本里我也有学过。 但在实际自己编写时还是会遇到一些问题。 在遇到问题时,我很高兴能与我的伙伴们一起分析、一起思考,然后一起想办法解决。 所谓三个臭皮匠赛过一个诸葛亮。 当然在这过程中,我们的思路意见可能不同。 但通过交流我们还是达到了一致。 每个人也会有缺点,比如我就有些粗心。 在word排版上总是会有一些失误。 我很感谢我的伙伴们能指出我的缺点,并帮助我。 因此每完成一件事时,都不可必免的会遇到问题。 在这次课程设计,让我懂得了在面对问题出现时,我们应该怎样做怎样解决,才是重要的。 之前冷静地分析问题也是相当重要的。 当然,在课程设计这段时期我们小组成员一起互相帮助一起学习,慢慢地磨合相处。 这些对我以后的学习以及工作、为人处事等都有所帮助。 从中也深刻地体会到了团队合作的重要性。 同时也非常感谢我的辅导老师傅篱老师,感谢老师尽职尽职帮助我们指点我们。 总之,通过这次课程设计,我获益良多。 参考文献 [1]黄同成,黄俊民,董建寅.数据结构[M].北京: 中国电力出版社,2008 [2]董建寅,黄俊民,黄同成.数据结构实验指导与题解[M].北京: 中国电力出版社,2008 [3]严蔚敏,吴伟民.数据结构(C语言版)[M].北京: 清华大学出版社,2002 [4]刘振鹏,张晓莉,郝杰.数据结构[M].北京: 中国铁道出版社,2003
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计数据结构之 折半查找职工信息管理 课程设计 数据结构 折半 查找 职工 信息管理