查找算法演示程序
学院
目录
1 摘要 (3)
1.1设计题目 (3)
1.2设计内容 (3)
1.3开发工具 (3)
1.4应用平台 (3)
2 详细设计 (3)
2.1程序结构 (3)
2.2主要功能 (4)
2.3函数实现 (4)
2.4开发日志 (4)
3 程序调试及运行 (5)
3.1程序运行结果 (5)
3.2程序使用说明 (9)
3.3程序开发总结 (9)
4 附件(源程序) (9)
1 摘要
1.1 设计题目
(1)算法型大作业7.查找算法。
1.2 设计内容
本程序是一个演示顺序查找算法和折半查找算法的演示程序。由用户输入查找的数据表列和查找的数据并选择查找方法,系统在将数表排序后,可以在屏幕上演示在排序后的表列中按所选查找法查找该数据的具体过程,支持多次演示、错误提醒,程序暂停演示功能。
1.3 开发工具
开发工具为Visual C++ 6.0和CB西北工业大学课堂教学版10.5.7600j。
1.4 应用平台
Windows 2000/XP/7
2 详细设计
2.1 程序结构
1、本程序的工程含有6个文件,其中main.cpp、shunxufa.cpp、zhabanfa.cpp、sort.cpp、putout.cpp5个cpp文件和include.h1个头文件,两者共同存在于工程“大作业”中。其中main.cpp文件为程序的主体部分,main函数调用4个cpp文件中的函数。
2、四个cpp文件中的函数分别为sort、putout、shunxufa、zhabanfa四个函数形参互不影响,在头文件include.h中声明。
3、整个运行过程中,有主函数输入输出数据。main函数调用其余函数执行功能,查找完成后选择性退出。
2.2 主要功能
1、该程序的主要功能为实现查找算法的演示程序。主函数实现了数据的输入和输出及让用户选择哪个排序方法,子函数则分别完成,排序、输出折半后的数表、顺序排序和折半排序功能。
2、操作通过输入控制,用户输入数据选择性调用函数执行功能,程序运行后显示相应结果,最后选择性退出。
2.3 函数实现
1、本程序中含有一个主函数,四个子函数以及主函数中若干个起重要作用的函数语句。4个子函数依次为sort、putout、shunxufa、zhabanfa,分别执行排序、输出折半后的数表、顺序排序和折半排序功能,按要求显示结果。
2、main函数通过调用4个子函数并根据用户输入的相关信息执行程序,输出结果反馈给用户。
2.4 开发日志
6月16日,选定题目,开始基本构思,考虑大体的程序算法及程序结构;
6月17日,考虑选用多文件结构程序,复习多文件结构程序的并深入理解,通过编写sinx、cosx数学函数演示程序进一步熟练运用多文件结构程序。
6月18日,开始分段编写调试部分程序,借鉴已有程序对所编程序优化。
6月19日,编写主要程序,构建多文件工程,并不断调试,完善功能。
多文件工程如下图:
6月21日,进一步完善演示功能,加入更多的提示性信息和控制语句,使程序基本上达到了演示效果。
6月22日,完善代码,总体调试检查程序并完成开发报告。
3 程序调试及运行
3.1 程序运行结果
1、主功能菜单
2、初始数据输入与排序
3、选择顺序法查找
4、选择折半法查找
5、程序选择性退出
3.2 程序使用说明
在CB西北工业大学课堂教学版10.5.7600j下运行该程序
本程序使用较为简单,只需要按照程序提示做符合要求的操作,就可以完成查找算法演示的功能,若不小心做了错误的操作,在程序允许的范围内可以重新操作,因此要仔细阅读程序说明部分和运行中的相关提示,按要求操作。另外,在程序演示过程中有很多暂停语句,用户只要按任意键就可继续运行。
3.3 程序开发总结
通过这次程序开发,我对程序员有了更深刻的认识。我意识到程序员不仅要有过人的思维,还要有足够的耐心,以及合作的意识、独立解决困难的意识和应用已有知识解决问题的能力。
通过这次程序开发,我明白了网络对与学习,特别是程序设计方面的巨大推动作用,通过上网搜索,我基本了解了system、exit、fllush(清除文件缓冲区)等语句的一些用法,并且获得了许多优化方法,还知晓了很多有用的网站,以后在学习中我会更多的利用这点。
编写该大作业使我对规范化编写程序有了了解,也使我对程序的调试有所了解,知道了如何写程序报告。这对我们的程序理解有很大的帮助,能使我们对自己编写的程序有更深的了解,使我们更了解自己的算法思想。
同时,这次出现开发也让我看到了自己知识的匮乏,为我以后的努力学习提供了鞭策和动力。
4 附件(源程序)
源程序代码分为6个文件,main.cpp、sort.cpp、putout.cpp、shunxufa.cpp和zhabanfa.cpp以及一个头文件include.h,六者共同存在于工程“大作业”中。
各文件源代码如下:
main.cpp文件源代码:
#include
#include
#include
#define N 501
#include "include.h"
int main()
{
int a[N];
int i,n,num,xx;
char c;
double k=0;
puts("\n");
printf(" 查找算法演示器\n");
puts("\n");
printf("**********系统功能菜单********** \n\n");
printf("—----------------------------------— \n");
printf(" 1.对输入的数据表列进行排序\n ");
printf("2.演示顺序查找功能\n ");
printf("3.演示折半查找功能\n ");
printf("4.多次演示功能\n ");
printf("5.数据输入错误提醒功能及程序暂停功能\n ");
printf("—----------------------------------— \n");
printf("**********开始演示********** \n");
s_e:printf("请输入你想要在其中查找数据的数据表列的数据个数(1--500):\n");// scanf("%d",&n);
while(n<1 || n>500)
{
printf("你输入的数不正确,请重新输入。\n");
goto s_e;}
printf("请输入你要在其中查找数据的数据表列(%d个数据用空格间隔大小排序不限):\n",n);
for(i=0;i<=n-1;i++)
scanf("%d",&a[i]);
sort(a,n);
printf("\n输出表列(从小到大排列)\n");
putout(a,0,n-1);
r_s: printf("请你输入要查找的数:\n");
scanf("%d",&num);
printf("\n请选择输入1(顺序查找)或2(折半查找)\n");
scanf("%d",&xx);
if(xx==1) shunxufa(a,num,n);
else zhebanfa(a,num,n);
c_e:{ fflush(stdin);
printf("请选择是否继续查找\n");
printf("是——y,否——n\n");
c=getchar();
if(c!='y'&&c!='n')
{
printf("选择错误!");
goto c_e;
}
else
{
if(c=='y') goto r_s;
else goto end;
}
}
end: printf("程序结束\n");
system("pause");
printf("谢谢使用,再见!\n");
for(k=0;k<1.9e8;k++)
;
exit(0);
return 0;
}
include.h文件源代码:
int zhebanfa(int a[],int num,int n);
void sort(int A[],int n1);
void putout(int B[],int m1,int m2);
int shunxufa(int a[],int num,int n);
shunxufa.cpp文件源代码:
#include
int shunxufa(int a[],int num,int n)
{
int yy=0,i;
for(i=0;i<=n-1;i++)
if(a[i]==num) {yy=1;
printf("找到数%6d 排序后的位置%2d\n",num,i+1);} if(yy==0) {
printf("%d 这个数在表列中没有找到。\n",num);
}
return 0;
}
zhebanfa.cpp文件源代码:
#include
#include
#include
#include "include.h"
int zhebanfa(int a[],int num,int n)
{
int count;
int top,bottom,mid;
int flag=1;
int loc=-1;
count=0;
flag=1;
top=n-1;
bottom=0;
mid=(top+bottom)/2;
while(flag)
{
count++;