关闭

关闭

关闭

封号提示

内容

首页 西北工业大学C语言大作业实验报告.doc

西北工业大学C语言大作业实验报告.doc

西北工业大学C语言大作业实验报告.doc

上传者: he建香 2017-09-30 评分 0 0 0 0 0 0 暂无简介 简介 举报

简介:本文档为《西北工业大学C语言大作业实验报告doc》,可适用于IT/计算机领域,主题内容包含西北工业大学C语言大作业实验报告*****************学院**********班级***********学号********姓名目录摘要符等。

西北工业大学C语言大作业实验报告*****************学院**********班级***********学号********姓名目录摘要设计题目设计内容开发工具应用平台详细设计程序结构主要功能函数实现开发日志程序调试及运行程序运行结果程序使用说明程序开发总结附件(源程序)Email:wangqiancom摘要设计题目折半法查找演示程序设计内容本程序是一个演示折半查找算法的演示程序。由用户输入查找的数据表列和查找的数据系统在将数表排序后可以在屏幕上演示在排序后的表列中按折半查找法查找该数据的具体过程(通过每次查找的中间数据、下次查找表列等具体效果见下图)支持多次演示、错误提醒程序暂停演示功能。开发工具VisualC和Win。Email:wangqiancom应用平台WindowsXPVista位详细设计程序结构程序功能模块:本程序主要由五大模块组成:程序说明模块、输入模块、排序模块、折半法查找及显示模块、进程选择模块。各模块的主要功能如下:程序说明模块:给使用者营造一个较为友好的界面同时提供程序开发人员的相关信息以及程序操作的相关说明信息。此部分模块主函数源代码如下:intaN*存储要查找的数表用户输入*inti,n,num,count*count为折半次数计数器n为数表数据个数num存储所查数据*inttop,bottom,midcharc*存储选择函数中的输入的字符y或n*intflag=*折半法循环标志变量*intloc=*存储所查找数据位置*doublek=ps()puts("n")*引用ps函数,打出一行'*'*(ps函数位于printstarcpp文件中参见下文)printf("****欢****迎****使****用****折****半****查****找****法****演****示****器****n")puts("n")*程序欢迎语*ps()printf("制作者:*****************")*作者信息*ps()printf("Email:************************")*电子邮件*Email:wangqiancomps()puts("n")ps()puts("n"),程序说明部分结束**再次引用ps函数附:printstarcpp文件源代码#include<stdioh>voidps(intk){intifor(i=i<=ki)*连续输出ka个'*'*printf("*")}输入模块:引导使用者输入要在其中查找数据的数表的数据个数和数表数据。并通过一个judge函数判断输入是否合法若不合法提醒用户继续输入。此部分模块主函数源代码如下:printf("请输入你想要在其中查找数据的数据表列的数据个数():n")scanf("d",n)n=judge(n)*引用judge函数判断n值是否合法*(judge函数位于judgecpp文件参见下文)printf("请输入你要在其中查找数据的数据表列(d个数据用空格间隔大小排序不限):n",n)*输入要查找的n个数据*for(i=i<=ni)scanf("d",ai)*将要查找的n个数据存入数组a*sort(a,n)*引用sort函数将数表排序*printf("n输出表列(从小到大排列)n")附:judgecpp文件源代码#include<stdioh>intjudge(intn)*函数作用:判断n的值是否在范围内*{intnwhile(n<||n>){printf("你输入的数不正确请重新输入。n")printf("请输入你想要在其中查找数据的数据表列的数据个数():n")*不合法重新输入并传递给主函数*scanf("d",n)returnnEmail:wangqiancom}returnn}排序模块:将用户输入数表的按升序排列并输出为接下来的折半法查找做准备。此部分模块主要通过sortcpp文件中的sort函数实现此部分模块主函数源代码如下:sort(a,n)*引用sort函数将数表排序*printf("n输出表列(从小到大排列)n")putout(a,,n)*引用putout函数输出排序后数表*附:sortcpp文件源代码#include<stdioh>voidsort(intA,intn)*将数组A的元素按从下到大顺序排序*{intx,y,zfor(x=x<nx)for(y=y<nxy){if(Ay>Ay)*二重循环将n个数据由小到大排序*{z=Ay*z暂时存储ay的值*Ay=AyAy=z}}}折半法查找及显示模块:提醒用户输入要查找的数据并判断是否合法。若合法则进入折半法查找循环在每次折半法查找过程中输出数表中间数据、查找数据与该数据的大小关系、下次再左还是右部分查找并输出该次折半法后要查找的数表的用来演示折半法的查找过程并在每次折半过程中设定程序暂停一次方便演示最后输出该数据在排序后数表的位置然后进入进程选择模块若非法则输出“这个数在表列中没有找到”然后进入进程选择模块。此部分模块主函数源代码如下:rs:printf("请你输入要查找的数:n")*输出要查找的数据*scanf("d",num)count=Email:wangqiancom*折半次数计数器初值赋*flag=top=nbottom=mid=(topbottom)while(flag){count*折半次数计数器自加*if((num>atop)||(num<abottom))*查找数据非法loc为*{loc=flag=}elseif(amid==num)*折半法查找到该数据*{loc=midprintf("第d次折半n",count)*输出此次折半后中间数据*printf("中间数据为dn",amid)system("pause")*利用该语句暂停程序便于演示以下同理*printf("找到数d排序后的位置dn",num,loc)*输出结果*loc=gotoce*转至选择语句ce判断是否继续查找*}elseif(amid>num){printf("第d次折半n",count)*利用折半次数计数器和循环显示每次折半查找后的表列*printf("中间数据为dn",amid)*输出此次折半后中间数据*printf("因为d<d",num,amid)*说明下步折半查找原因*printf("所以在左半部分查找n折半后查找数表为:n")top=midmid=(topbottom)Email:wangqiancomputout(a,bottom,top)*引用putout函数输出该次折半后数表*system("pause")}elseif(amid<num){d次折半n",count)printf("第*利用折半次数计数器和循环显示每次折半查找后的表列*printf("中间数据为dn",amid)*输出此次折半后中间数据*printf("因为d>d",num,amid)*说明下步折半查找原因*printf("所以在右半部分查找n折半后查找数表为:n")bottom=midmid=(topbottom)putout(a,bottom,top)*引用putout函数输出该次折半后数表*system("pause")}}if(loc==){printf("d这个数在表列中没有找到。n",num)*若查找数据非法提示查找错误*printf("请重新输入要查找的数据n")gotors*利用goto语句转职rs语句重新查找*}此段函数会用到putout函数,因上文已经提到在此不做赘述。进程选择模块:通过判断用户输入的字符决定程序下一步的走向若为“y”则进入下一次折半法查找演示过程若为“n”则进入程序退出模块。此部分模块主函数源代码如下:ce:{fflush(stdin)*利用fflush语句清除按键缓存*printf("请选择是否继续查找n")printf("是y,否nn")*选择步骤操作说明*c=getchar()if(c!='y'c!='n'){printf("选择错误!")*若选择错误继续选择*Email:wangqiancomgotoce}else{if(c=='y')gotors*选择y,转至rs语句继续查找*elsegotoend*选择n,转至end语句结束程序*}}程序退出模块:与程序说明模块呼应友好的退出程序。此部分模块源代码如下:end:printf("程序结束n")system("pause")printf("谢谢使用再见~n")for(k=k<ek)*延时程序*exit()*利用exit语句退出主函数*工程文件结构本程序的工程含有个文件其中maincpp、printstarscpp、judgecpp、sortcpp、putoutcpp个cpp文件和includeh个头文件(参见下图)两者共同存在于工程“折半法查找演示程序”中。其中maincpp文件包含了程序的主体部分程序说明模块、输入、排序、折半查找及显示、程序退出模块按线性排列进程选择模块穿插于其中根据用户操作决定进程执行。其中输入、排序模块一般执行一次进程选择模块可调控程序多次执行折半查找及显示模块也可以调控执行程序退出模块。Email:wangqiancom主要功能本程序的主要功能是演示折半法在一组升序排列的数表中查找某个数据的查找过程同时兼有数表排序、多次演示、错误提醒等功能。各功能的实现具体说明如下:运用计数器的规律和选择、循环结构实现折半法的程序特点在一般折半法的演示折半法查找功能:程序模块上加以改动增加一个折半次数计数器(程序中用count变量表示)同时在每次折半的选择结构中加入一个for循环语句输出此次折半后的查找数表配上相关的printf语句、程序暂停语句并输出相关文字说明就能很好的演示折半法的查找原理和过程。具体参见下图。数表排序功能:通过一个简单的二重循环将无序的数表按升序排列主要运用冒泡算法。运行效果如下图。多次演示功能:通过提示用户做相应的操作实现程序的多次演示或者退出提高程序的实用性。程序中主要通过goto语句和若干标号的语句实现。此部分程序运行截图如下:Email:wangqiancom多次演示及程序结束的运行效果:错误提醒功能:判断用户输入的数据及相关操作是否合法如不合法提醒用户改正增加了程序德使用性和操作便捷性。主要是通过while循环和输入输出函数实现。相关运行截图如下:n值输入错误的错误提醒及修正:Email:wangqiancom进程选择错误的错误提醒及修正:程序暂停功能:主要运用system(pause)语句和一段延时小程序增加程序演示时的可操作性和可讲解性。运行效果如下Email:wangqiancom函数实现本程序中含有一个主函数四个子函数以及主函数中若干个起重要作用的函数语句现将它们的功能、算法、数据结构等说明如下:主函数:参数:主要思想为:由用户自主输入n个数据将其排序后在传统折半法的基础上增加一些必要的输入输出及控制语句输出不同阶段循环控制变量所决定的数、特征值伴以相关文字说明延时折半法的原理过程。再嵌套一些进程控制的语句达到多次使用的效果。Email:wangqiancom主函数代码及相关说明如下:ps()puts("n")****用****折****半****查****找****法****演****示****器****n")printf("****欢****迎****使puts("n")ps()printf("制作者:***************")ps()printf("Email:*********************")ps()puts("n")ps()puts("n")以上为程序说明部分主要通过程简单的输入输出函数序说明程序功能和操作信息。printf("请输入你想要在其中查找数据的数据表列的数据个数():n")scanf("d",n)n=judge(n)在此调用judge函数将输入n值代入judge函数检验是否合法。printf("请输入你要在其中查找数据的数据表列(d个数据用空格间隔大小排序不限):n",n)for(i=i<=ni)scanf("d",ai)sort(a,n)在此引用sort函数将数组aN,n代入sort函数将数表排序。printf("n输出表列(从小到大排列)n")putout(a,,n)*****以“*****”标记的三处都引用了putout函数输出一个一维数组rs:printf("请你输入要查找的数:n")scanf("d",num)count=***************************************************************************flag=top=nbottom=mid=(topbottom)while(flag){countif((num>atop)||(num<abottom)){loc=flag=}Email:wangqiancomelseif(amid==num){loc=midprintf("第d次折半n",count)printf("中间数据为dn",amid)system("pause")利用该语句暂停程序便于演示以下同理printf("找到数d排序后的位置dn",num,loc)loc=gotoce}elseif(amid>num){printf("第d次折半n",count)printf("中间数据为dn",amid)printf("因为d<d",num,amid)printf("所以在左半部分查找n折半后查找数表为:n")top=midmid=(topbottom)putout(a,bottom,top)*****system("pause")}elseif(amid<num)以***间隔部分主要运用了折半法查找数据{printf("第d次折半n",count)printf("中间数据为dn",amid)printf("因为d>d",num,amid)printf("所以在右半部分查找n折半后查找数表为:n")bottom=midmid=(topbottom)putout(a,bottom,top)*****system("pause")}}if(loc==){printf("d这个数在表列中没有找到。n",num)printf("请重新输入要查找的数据n")gotors利用goto语句(文中绿色部分)和标记语句(文中黄色部分)和循环语句实现进程的控制Email:wangqiancom}*********************************************************************************end:printf("程序结束n")system("pause")printf("谢谢使用再见~n")for(k=k<ek)延时程序延时约二秒exit()利用exit语句直接退出主函数ce:{fflush(stdin)fflush语句清除按键缓存避免程序进程混乱printf("请选择是否继续查找n")printf("是y,否nn")c=getchar()if(c!='y'c!='n'){printf("选择错误!")gotoce}else{if(c=='y')gotorselsegotoend}}}judge函数:参数:nn数据交换:导入main函数n的值导出n或n的值函数代码及相关说明:#include<stdioh>intjudge(intn)函数作用:判断n的值是否在范围内{intnwhile(n<||n>){Email:wangqiancomprintf("你输入的数不正确请重新输入。n")printf("请输入你想要在其中查找数据的数据表列的数据个数():n")不合法重新输入并传递给主函数scanf("d",n)returnn}returnn合法直接传回主函数}putout函数:参数:B,m,m数据传递:B导入aN的值m、m视情况而定函数代码及相关说明:#include<stdioh>voidputout(intB,intm,intm)函数作用:将数组B的第m到m个元素在一行输出{intxfor(x=mx<=mx)printf("d",Bx)printf("dn",Bx)}sort函数:参数:A,n数据传递:A导入aN,然后导出n导入n的值函数代码及相关说明:#include<stdioh>voidsort(intA,intn)将数组A的元素按从下到大顺序排序{intx,y,zfor(x=x<nx)for(y=y<nxy){if(Ay>Ay){z=AyAy=Ay冒泡算法Ay=z}}}Email:wangqiancomps函数:参数:k代码及相关说明:#include<stdioh>voidps(intk){inti'*'for(i=i<=ki)函数作用:连续输出k个printf("*")}开发日志程序开发从构思到完成共历时二十天左右基本过程如下:开始基本构思考虑大体的程序算法并分段编写、调试部分程序。编写主要程序并且不断调试直至达到了最基本的折半法演示功能。图片如下:完善演示功能加入更多的描述性语句和控制语句使程序基本达到了如今程序演示折半法的效果。如图示:加入了程序说明模块和程序退出模块完善了程序的引导性说明信息完善程序的可操Email:wangqiancom作性。接受同学的意见加入了进程选择模块使程序可以多次演示。加入system语句使演示过程中可以暂停使演示效果优化。完善源代码将部分程序从主函数剥离写进子函数将程序工程变为多文件工程增加头文件使程序更易维护。总体调试检查程序。完成开发报告。Email:wangqiancom程序调试及运行程序运行结果程序开始运行:排序模块结束:多次执行折半查找及显示模块:Email:wangqiancom执行进程选择模块和程序退出模块:Email:wangqiancom程序使用说明本程序使用较为简单只需要按照程序提示做符合要求的操作就可以完成折半法演示的功能若不小心做了错误的操作在程序允许的范围内可以重新操作因此要仔细钱柜777手机版登陆程序说明部分和运行中的相关提示按要求操作。另外在程序演示过程中有很多暂停语句用户只要按任意键就可继续运行。程序开发总结通过这次程序开发我对程序员有了更深刻的认识。我意识到程序员不仅要有过人的思维还要有足够的耐心以及合作的意识、独立解决困难的意识。通过这次程序开发我明白了网络对与学习特别是程序设计方面的巨大推动作用通过上网搜索我基本了解了system、exit、fllush等语句的一些用法还知晓了很多有用的网站以后在学习中我会更多的利用这点。通过这次程序开发我明白了创造性工作的魅力虽然这段时间经常在数字化一待就是几个小时但看着程序在自己手里不断完善心里有说不出的喜悦。创造性的工作更能激发我们的热情。通过这次程序开发我明白了自己有很多的不足程序也有缺陷但这本来就是一个不断尝试、不断完善的过程有了这次的体验以后我会在这条路上走的更远。附件(源程序)源程序代码分为个文件maincpp、judgecpp、sortcpp、putoutcpp和printstarscpp以及一个头文件includeh六者共同存在于工程“折半法查找演示程序”中。各文件源代码如下:maincpp文件源代码:#include<stdioh>#include<stdlibh>#include<conioh>#defineN#include"includeh"*声明头文件includeh*voidmain(){intaN*存储要查找的数表用户输入*inti,n,num,countEmail:wangqiancom*count为折半次数计数器n为数表数据个数num存储所查数据*inttop,bottom,midcharc*存储选择函数中的输入的字符y或n*intflag=*折半法循环标志变量*intloc=*存储所查找数据位置*doublek=ps()puts("n")*引用ps函数,打出一行'*'*printf("****欢****迎****使****用****折****半****查****找****法****演****示****器****n")puts("n")*程序欢迎语*ps()printf("制作者:****************************")*作者信息*ps()printf("Email:************************************")*电子邮件*ps()puts("n")ps()puts("n")*再次引用ps函数,程序说明部分结束*printf("请输入你想要在其中查找数据的数据表列的数据个数():n")scanf("d",n)n=judge(n)*引用judge函数判断n值是否合法*printf("请输入你要在其中查找数据的数据表列(d个数据用空格间隔大小排序不限):n",n)*输入要查找的n个数据*for(i=i<=ni)scanf("d",ai)*将要查找的n个数据存入数组a*sort(a,n)*引用sort函数将数表排序*printf("n输出表列(从小到大排列)n")putout(a,,n)*引用putout函数输出排序后数表*rs:printf("请你输入要查找的数:n")*输出要查找的数据*scanf("d",num)count=Email:wangqiancom*折半次数计数器初值赋*flag=top=nbottom=mid=(topbottom)while(flag){count*折半次数计数器自加*if((num>atop)||(num<abottom))*查找数据非法loc为*{loc=flag=}elseif(amid==num)*折半法查找到该数据*{loc=midprintf("第d次折半n",count)*输出此次折半后中间数据*printf("中间数据为dn",amid)system("pause")*利用该语句暂停程序便于演示以下同理*printf("找到数d排序后的位置dn",num,loc)*输出结果*loc=gotoce*转至选择语句ce判断是否继续查找*}elseif(amid>num){printf("第d次折半n",count)*利用折半次数计数器和循环显示每次折半查找后的表列*printf("中间数据为dn",amid)*输出此次折半后中间数据*printf("因为d<d",num,amid)*说明下步折半查找原因*printf("所以在左半部分查找n折半后查找数表为:n")top=midmid=(topbottom)Email:wangqiancomputout(a,bottom,top)*引用putout函数输出该次折半后数表*system("pause")}elseif(amid<num){printf("第d次折半n",count)*利用折半次数计数器和循环显示每次折半查找后的表列*printf("中间数据为dn",amid)*输出此次折半后中间数据*printf("因为d>d",num,amid)*说明下步折半查找原因*printf("所以在右半部分查找n折半后查找数表为:n")bottom=midmid=(topbottom)putout(a,bottom,top)*引用putout函数输出该次折半后数表*system("pause")}}if(loc==){printf("d这个数在表列中没有找到。n",num)*若查找数据非法提示查找错误*printf("请重新输入要查找的数据n")gotors*利用goto语句转职rs语句重新查找*}end:printf("程序结束n")system("pause")printf("谢谢使用再见~n")for(k=k<ek)*延时程序*exit()*利用exit语句退出主函数*ce:{fflush(stdin)*利用fflush语句清除按键缓存*printf("请选择是否继续查找n")printf("是y,否nn")*选择步骤操作说明*Email:wangqiancomc=getchar()if(c!='y'c!='n'){printf("选择错误!")*若选择错误继续选择*gotoce}else{if(c=='y')gotors*选择y,转至rs语句继续查找*elsegotoend*选择n,转至end语句结束程序*}}}printstarscpp文件源代码:#include<stdioh>voidps(intk){intifor(i=i<=ki)printf("*")}judgecpp文件源代码:#include<stdioh>intjudge(intn)*函数作用:判断n的值是否在范围内*{intnwhile(n<||n>){printf("你输入的数不正确请重新输入。n")printf("请输入你想要在其中查找数据的数据表列的数据个数():n")*不合法重新输入并传递给主函数*scanf("d",n)returnnEmail:wangqiancom}returnn}sortcpp文件源代码:#include<stdioh>voidsort(intA,intn)*将数组A的元素按从下到大顺序排序*{intx,y,zfor(x=x<nx)for(y=y<nxy){if(Ay>Ay)*二重循环将n个数据由小到大排序*{z=Ay*z暂时存储ay的值*Ay=AyAy=z}}}putoutcpp文件源代码:#include<stdioh>voidputout(intB,intm,intm)*函数作用:将数组B的第m到m个元素在一行输出*{intxfor(x=mx<=mx)printf("d",Bx)printf("dn",Bx)}includeh文件源代码:intjudge(intn)*声明judge函数*voidsort(intA,intn)*声明sort函数*voidputout(intB,intm,intm)*声明putout函数*voidps(intk)*声明ps函数Email:wangqiancomEmail:wangqiancom

用户评论(0)

0/200

精彩专题

上传我的资料

每篇奖励 +2积分

资料评价:

/37
0下载券 下载 加入VIP, 送下载券

意见
反馈

立即扫码关注

爱问共享资料微信公众号

返回
顶部

博聚网