西工大C语言期末大作业.pdf
《西工大C语言期末大作业.pdf》由会员分享,可在线阅读,更多相关《西工大C语言期末大作业.pdf(22页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、学院班级学号姓名目录1 摘要.31.1 设计题目.31.2 设计内容.31.3 开发工具.31.4 应用平台.42 详细设计.42.1 程序结构.42.2 主要功能.92.3 函数实现.112.4 开发日志.163 程序调试及运行.163.1 程序运行结果.163.2 程序使用说明.183.3 程序开发总结.184 附件(源程序).18Email:.cn21 1 摘要摘要1.1 设计题目折半法查找演示程序1.2 设计内容本程序是一个演示折半查找算法的演示程序。由用户输入查找的数据表列和查找的数据,系统在将数表排序后可以在屏幕上演示在排序后的表列中按折半查找法查找该数据的具体过程(通过每次查找的
2、中间数据、下次查找表列等,具体效果见下图),支持多次演示、错误提醒,程序暂停演示功能。1.3 开发工具CodeBlocksEmail:.cn31.4 应用平台Windows 2000/XP/Vista 32位2 2 详细设计详细设计2.1 程序结构程序功能模块:程序功能模块:本程序主要由五大模块组成:程序说明模块、输入模块、排序模块、折半法查找及显示模块、进程选择模块。各模块的主要功能如下:程序说明模块程序说明模块:给使用者营造一个较为友好的界面,同时提供程序开发人员的相关信息以及程序操作的相关说明信息。此部分模块主函数源代码如下:int aN;/*存储要查找的数表,用户输入*/int i,n
3、,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(11
4、);puts(n);p_s(76);puts(n);/*再次引用 p_s 函数,程序说明部分结束*/附:void p_s(int k)Email:*.cn4int i;for(i=1;i=k;i+)/*连续输出 k 个*/printf(*);输入模块输入模块:引导使用者输入要在其中查找数据的数表的数据个数和数表数据。并通过一个judge 函数判断输入是否合法,若不合法提醒用户继续输入。此部分模块主函数源代码如下:printf(请输入你想要在其中查找数据的数据表列的数据个数(1-50):n);/scanf(%d,&n);n=judge(n);/*引用 judge 函数,判断 n 值是否合法*/(
5、judge 函数位于 judge.cpp 文件,参见下文)printf(请输入你要在其中查找数据的数据表列(%d 个数据 用空格间隔 大小排序不限):n,n);/*输入要查找的 n 个数据*/for(i=0;i=n-1;i+)scanf(%d,&ai);/*将要查找的 n 个数据存入数组 a*/QuickSort(a,n);/*引用 QuickSort 函数,将数表排序*/printf(n 输出表列(从小到大排列)n);附:int judge(int n2)/*函数作用:判断 n2 的值是否在 150 范围内*/int n3;while(n250)printf(你输入的数不正确,请重新输入。n
6、);printf(请输入你想要在其中查找数据的数据表列的数据个数(1-50):n);/*不合法重新输入并传递给主函数*/scanf(%d,&n3);return n3;return n2;排序模块排序模块:将用户输入数表的按升序利用快速排序法排列并输出,为接下来的折半法查找做准备。此部分模块主要通过 QuickSort 函数实现此部分模块主函数源代码如下:void QuickSort(int A,int s,int m)/*函数作用:将数组A的元素按从下到大顺序快速排序*/int x,y,z;if(sm)Email:*.cn5x=s;y=m+1;while(1)while(x+1s+m&A+x
7、-1&A-yAs);if(x=y)break;z=Ax,Ax=Ay,Ay=z;z=As,As=Ay,Ay=z;QuickSort(A,s,y-1);QuickSort(A,y+1,m);折半法查找及显示模块:提醒用户输入要查找的数据并判断是否合法。若合法则进入折半法查找循环,在每次折半法查找过程中输出数表中间数据、查找数据与该数据的大小关系、下次再左还是右部分查找,并输出该次折半法后要查找的数表的,用来演示折半法的查找过程,并在每次折半过程中设定程序暂停一次,方便演示,最后输出该数据在排序后数表的位置,然后进入进程选择模块;若非法,则输出“这个数在表列中没有找到”,然后进入进程选择模块。此部分
8、模块主函数源代码如下: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*/if(numatop)|(numnum)printf(第%d 次折半n,count);/*利用折半次数计数器和循环显示每次折半查找后的表列*/printf(中间数据为%dn,amid);/*输出此次折半后中间数据*/printf(因为%d%d,num,amid);/*说明下步
9、折半查找原因*/printf(所以在左半部分查找n折半后查找数表为:n);top=mid-1;mid=(top+bottom)/2;putout(a,bottom,top);/*引用 putout 函数,输出该次折半后数表*/system(pause);else if(amid%d,num,amid);/*说明下步折半查找原因*/printf(所以在右半部分查找n折半后查找数表为:n);bottom=mid+1;mid=(top+bottom)/2;putout(a,bottom,top);Email:*.cn7/*引用 putout 函数,输出该次折半后数表*/system(pause);i
10、f(loc=-1)printf(%d 这个数在表列中没有找到。n,num);/*若查找数据非法,提示查找错误*/printf(请重新输入要查找的数据n);goto r_s;/*利用 goto 语句转职 r_s 语句重新查找*/此段函数会用到 putout 函数,因上文已经提到,在此不做赘述。进程选择模块进程选择模块:通过判断用户输入的字符决定程序下一步的走向,若为“y”则进入下一次折半法查找演示过程,若为“n”则进入程序退出模块。此部分模块主函数源代码如下:c_e:fflush(stdin);/*利用 fflush 语句清除按键缓存*/printf(请选择是否继续查找n);printf(是y,
11、否nn);/*选择步骤操作说明*/c=getchar();if(c!=y&c!=n)printf(选择错误!);/*若选择错误,继续选择*/goto c_e;elseif(c=y)goto r_s;/*选择 y,转至 r_s 语句继续查找*/else goto end;/*选择 n,转至 end 语句结束程序*/程序退出模块程序退出模块:与程序说明模块呼应,友好的退出程序。此部分模块源代码如下:end:printf(程序结束n);system(pause);Email:*.cn8printf(谢谢使用,再见!n);for(k=0;k1.9e8;k+)/*延时程序*/;exit(0);/*利用
12、exit 语句退出主函数*/2.2 主要功能本程序的主要功能是演示折半法在一组升序排列的数表中查找某个数据的查找过程,同时兼有数表排序、多次演示、错误提醒等功能。各功能的实现具体说明如下:演示折半法查找功能演示折半法查找功能:运用计数器的规律和选择、循环结构实现折半法的程序特点,在一般折半法的程序模块上加以改动,增加一个折半次数计数器(程序中用count 变量表示),同时在每次折半的选择结构中加入一个 for 循环语句,输出此次折半后的查找数表,配上相关的 printf 语句、程序暂停语句并输出相关文字说明,就能很好的演示折半法的查找原理和过程。具体参见下图。数表排序功能数表排序功能:通过一个
13、简单的二重循环将无序的数表按升序排列,主要运用快速排序算法。运行效果如下图。Email:*.cn9多次演示功能多次演示功能:通过提示用户做相应的操作,实现程序的多次演示或者退出,提高程序的实用性。程序中主要通过 goto 语句和若干标号的语句实现。此部分程序运行截图如下:错误提醒功能错误提醒功能:判断用户输入的数据及相关操作是否合法,如不合法提醒用户改正,增加了程序德使用性和操作便捷性。主要是通过while 循环和输入输出函数实现。相关运行截图如下:n 值输入错误的错误提醒及修正:Email:.cn10进程选择错误的错误提醒及修正程序暂停功能程序暂停功能:主要运用system(pause)语句
14、和一段延时小程序,增加程序演示时的可操作性和可讲解性。运行效果如下;2.3 函数实现本程序中含有一个主函数,四个子函数以及主函数中若干个起重要作用的函数语句,现将它们的功能、算法、数据结构等说明如下:主函数:主函数:主要思想为:由用户自主输入 n 个数据,将其排序后,在传统折半法的基础上,增加一些必要的输入输出及控制语句,输出不同阶段循环控制变量所决定的数、特征值,伴以相关文字说明,延时折半法的原理过程。再嵌套一些进程控制的语句,达到多次使用的效果。主函数代码及相关说明如下:Email:.cn11p_s(76);puts(n);printf(“欢迎使用折半查找法演示器n);puts(n);p_
15、s(13);printf(制作者:吴辉);p_s(11);puts(n);p_s(76);puts(n);以上为程序说明部分,主要通过程简单的输入输出函数序说明程序功能和操作信息。printf(请输入你想要在其中查找数据的数据表列的数据个数(1-50):n);/scanf(%d,&n);n=judge(n);在此调用 judge 函数,将输入 n 值代入 judge 函数检验是否合法。printf(请输入你要在其中查找数据的数据表列(%d 个数据 用空格间隔 大小排序不限):n,n);/for(i=0;iatop)|(numnum)printf(第%d 次折半n,count);printf(中
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 西工大 语言 期末 作业
限制150内