学院*****************
目录
1 摘要 (3)
1.1设计题目 (3)
1.2设计内容 (3)
1.3开发工具 (3)
1.4应用平台 (4)
2 详细设计 (4)
2.1程序结构 (4)
2.2主要功能 (10)
2.3函数实现 (13)
2.4开发日志 (18)
3 程序调试及运行 (20)
3.1程序运行结果 (20)
3.2程序使用说明 (22)
3.3程序开发总结 (22)
4 附件(源程序) (22)
1 摘要
1.1 设计题目
折半法查找演示程序
1.2 设计内容
本程序是一个演示折半查找算法的演示程序。由用户输入查找的数据表列和查找的数据,系统在将数表排序后可以在屏幕上演示在排序后的表列中按折半查找法查找该数据的具体过程(通过每次查找的中间数据、下次查找表列等,具体效果见下图),支持多次演示、错误提醒,程序暂停演示功能。
1.3 开发工具
Visual C++ 6.0和Win32。
1.4 应用平台
Windows 2000/XP/Vista 32位
2 详细设计
2.1 程序结构
程序功能模块:
本程序主要由五大模块组成:程序说明模块、输入模块、排序模块、折半法查找及显示模块、进程选择模块。各模块的主要功能如下:
程序说明模块:给使用者营造一个较为友好的界面,同时提供程序开发人员的相关信息以及程序操作的相关说明信息。
此部分模块主函数源代码如下:
int a[N];
/*存储要查找的数表,用户输入*/
int i,n,num,count;
/*count为折半次数计数器,n为数表数据个数,num存储所查数据*/
int top,bottom,mid;
char c;
/*存储选择函数中的输入的字符y或n*/
int flag=1;
/*折半法循环标志变量*/
int loc=-1;
/*存储所查找数据位置*/
double k=0;
p_s(76);puts("\n");
/*引用p_s函数,打出一行'*'*/(p_s函数位于print_star.cpp文件中,参见下文)
printf("****欢****迎****使****用****折****半****查****找****法****演****示****器****\n");
puts("\n");
/*程序欢迎语*/
p_s(13);
printf("制作者:***************** ");
/*作者信息*/
p_s(4);
printf("Email:************************ ");
/*电子邮件*/
p_s(11);puts("\n");
p_s(76);puts("\n");
/*再次引用p_s函数,程序说明部分结束*/
附:print_star.cpp文件源代码
#include
void p_s(int k)
{
int i;
for(i=1;i<=k;i++)
/*连续输出ka个'*'*/
printf("*");
}
输入模块:引导使用者输入要在其中查找数据的数表的数据个数和数表数据。并通过一个judge函数判断输入是否合法,若不合法提醒用户继续输入。
此部分模块主函数源代码如下:
printf("请输入你想要在其中查找数据的数据表列的数据个数(1--50):\n");//
scanf("%d",&n);
n=judge(n);
/*引用judge函数,判断n值是否合法*/ (judge函数位于judge.cpp文件,参见下文)printf("请输入你要在其中查找数据的数据表列(%d个数据用空格间隔大小排序不限):\n",n);
/*输入要查找的n 个数据*/
for(i=0;i<=n-1;i++)
scanf("%d",&a[i]);
/*将要查找的n个数据存入数组a*/
sort(a,n);
/*引用sort函数,将数表排序*/
printf("\n输出表列(从小到大排列)\n");
附:judge.cpp文件源代码
#include
int judge(int n2)
/*函数作用:判断n2的值是否在1—50范围内*/
{ int n3;
while(n2<1 || n2>50)
{
printf("你输入的数不正确,请重新输入。\n");
printf("请输入你想要在其中查找数据的数据表列的数据个数(1--50):\n");
/*不合法重新输入并传递给主函数*/
scanf("%d",&n3);
return n3;
}
return n2;
}
排序模块:将用户输入数表的按升序排列并输出,为接下来的折半法查找做准备。
此部分模块主要通过sort.cpp文件中的sort函数实现
此部分模块主函数源代码如下:
sort(a,n);
/*引用sort函数,将数表排序*/
printf("\n输出表列(从小到大排列)\n");
putout(a,0,n-1);
/*引用putout函数,输出排序后数表*/
附:sort.cpp 文件源代码
#include
void sort(int A[],int n1)
/*将数组A的元素按从下到大顺序排序*/
{
int x,y,z;
for(x=0;x for(y=0;y { if(A[y]>A[y+1]) /*二重循环将n1个数据由小到大排序*/ { z=A[y]; /*z暂时存储a[y]的值*/ A[y]=A[y+1]; A[y+1]=z; } } } 折半法查找及显示模块:提醒用户输入要查找的数据并判断是否合法。若合法则进入折半法查找循环,在每次折半法查找过程中输出数表中间数据、查找数据与该数据的大小关系、下次再左还是右部分查找,并输出该次折半法后要查找的数表的,用来演示折半法的查找过程,并在每次折半过程中设定程序暂停一次,方便演示,最后输出该数据在排序后数表的位置,然后进入进程选择模块;若非法,则输出“这个数在表列中没有找到”,然后进入进程选择模块。 此部分模块主函数源代码如下: r_s: printf("请你输入要查找的数:\n"); /*输出要查找的数据*/ scanf("%d",&num); count=0; /*折半次数计数器初值赋0*/ flag=1; top=n-1; bottom=0; mid=(top+bottom)/2; while(flag) { count++; /*折半次数计数器自加1*/