程序设计基础22699

上传人:无*** 文档编号:181929360 上传时间:2023-01-18 格式:DOC 页数:11 大小:104KB
收藏 版权申诉 举报 下载
程序设计基础22699_第1页
第1页 / 共11页
程序设计基础22699_第2页
第2页 / 共11页
程序设计基础22699_第3页
第3页 / 共11页
资源描述:

《程序设计基础22699》由会员分享,可在线阅读,更多相关《程序设计基础22699(11页珍藏版)》请在装配图网上搜索。

1、程序设计基础大作业姓 名:刘欢学 号:201001051118班 级: 信管10-1班成 绩:信息科学与工程学院2011年7月1日设计C一套排序过程的演示函数1.1 需求陈述用户可以自己根据需要编写排序函数,但是自己编写的函数只是能够根据输入的数来排序这些数,而不能在具体的演示到底是怎么样排出来的。最后也是用户只能在屏幕上看到排好序的一列数而已!所以我们需要具体的演示排序的过程是怎么样的,因此就有了下面的排序演示函数,这些函数根据排序的原理,比如冒泡排序,一步一步的演示各个数只见的比较。可以使用后看的更清楚!为了方便函数的测试,我们还专们设计了一个测试系统,对每一个设计好的函数进行测试,使得函

2、数测试更加具有针对性和说服力。1.2需求分析1.2.1功能分析表1 函数功能分析项目功能函数排序的过程演示排序演示函数的基本功能冒泡排序 BubbleSort选择排序 SelectSort插入排序 InsertSort排序演示所需函数的封装随机得到数组 Timelygetarry随机和用户输入得到数组 GetArry交换两数 Swap按数大小输出其个数用“*”表示 PrintfD按数大小输出其个数用“=”表示 PrintfA输出个别特殊元素的大小其他不变 AAprintf输出最初数组的元素的大小 Beforeprint输出排序后的数组元素的大小 Afterprint1.2.2数据分析 该排序过

3、程的演示大多使用for语句和if语句。对于数组的定义是必须要知道数组的大小(对于静态数组而言),把数组的大小通过用户从键盘输入,并把这个操作放在main函数之中,其他的排序演示函数只要把数组名和数组大小作为其参数就很容易解决在封装函数中定义数组的麻烦。这样可以是程序可读性更高,更方便使用!,对于不同的排序演示函数从主屏幕上用户可以自己选择使用,这方便了演示.同时用户还可以通过自己从键盘上输入数来进行排序演示.1.2.3技术约束本函数库的测试系统已在code blocks下编译通过。1.3总体设计1.3.1 全局数据结构 这个排序演示函数是通过for语句的嵌套使用的到的,在main函数中是用wh

4、ile语句来得到个主循环体,在这个主循环体中先选择要排序的方法,然后是输入要排序的个数,之后就是调用到已经封装的函数,如BubbleSort即冒泡排序,SelectSort即选择排序,和InsertSort即插入排序,就进入了排序演示的过程!1.3.2 排序演示函数设计A. 排序的基本函数1 冒泡排序函数原型:int BubbleSort (int a,int size ) 功能: 冒泡排序是一种比较常见的排序方法,主要功能是通过传入一列数然后经过冒泡排序的到一个有序的数,而本程序所要表达的是把数的大小通过图形的的个数来表示,然后比较相邻的两个数的大小,把较小的交换上来。依次下去直到最后一个数

5、比较完为止。最后是输出排序好的数(用输出图形的个数的多少表示其大小)。实现思路: 通过在冒泡排序的最初的循环体中表达首先调用Beforeprint函数输出 未排序的数,然后清屏根据条件输出不同的数用不同的图形表示。最后是调用Afterprin函数输出排列过之后的数。2. 选择排序函数原型:int SelectSort (int a,int size )功能: 选择排序是也一种比较常见的排序方法,主要功能是通过传入一列数然后经过选择排序的到一个有序的数,而本程序所要表达的是把数的大小通过图形的的个数来表示,然后按顺序一个数和其余的数比较,把较小的数交换上来。依次下去知道最后一个数。最后是输出排序

6、好的数(用输出图形的个数的多少表示其大小)。实现思路:通过在选择排序的最初的循环体中表达首先调用Beforeprint函数输出未排序的数,然后清屏根据条件输出不同的数用不同的图形表示。最后是调用Afterprin函数输出排列过之后的数。 3.插入排序 函数原型:int InsertSort (int a,int size ) 功能: 插入排序是另一种比较常见的排序方法,主要功能是通过传入一列数然后经过选择排序的到一个有序的数,而本程序所要表达的是把数的大小通过图形的的个数来表示,与选择,冒泡不同,插入是通过先选好一个数,待插入的的数和已排好序的数一次比较,找到一个合适的位置,然后把这个数插入进

7、去。依次下去直到最后一个数也被插入到序列当中。最后是输出排序好的数(用输出图形的个数的多少表示其大小)。 实现思路: 通过在插入排序的最初的循环体中表达首先调用Beforeprint函数输出未排序的数,然后清屏根据条件输出不同的数用不同的图形表示,这里输出的是已经插入好的序列,对于未插入的数,把它们放在输出图形的下方以便观察。最后是调用Afterprin函数输出排列过之后的数。B排序演示所需函数的封装1 随机和用户输入得到数组函数原型:int GetArry(int a,int size) char ch;getchar();/*接受回车符*/ printf(y or Y for yes an

8、d n or N for no:n); scanf(%c,&ch); if(ch=y|ch=Y) srand(unsigned)time(NULL); for(i=0;isize;i+) ai=rand()%20+1; if(ch=n|ch=N) for(i=0;isize;i+) scanf(%d,&ai);功能:用户通过在屏幕上选择是否由程序自动生成,得到数组。实现思路:通过用户的选择执行不同的语句,如果是不由程序生成则由用户输入,通过一个for语句把用户输入的数分别赋值给数组的各个元素。如果是有程序自动生成则调用头文件产生随机数并赋给数组的各个元素,至此完成的到数组的操作! 2.交换两数

9、 函数原型:int Swap (int *p,int *q) if(*p*q) temp=*p,*p=*q,*q=temp; return 1; else return 0;功能: 交换两个数实现思路:通过传入两个数的地址,如果前者大于后者则交换两数并返回1,否则返回0. 3. 按数大小输出其个数用“*”表示 函数原型:int PrintfD (int a) printf(%d ,a); for(i=0;ia;i+) printf(*); printf(n);功能: 根据a的大小输出a个“*”。实现思路: 通过一个for语句输出a个“*”。 4. 按数大小输出其个数用“=”表示函数原型:int

10、 PrintfA (int a) printf(%d ,a); for(i=0;ia;i+) printf(=); printf(n);功能: 根据a的大小输出a个“=”。实现思路:通过一个for语句输出a个“=”。 5. 输出个别特殊元素的大小其他不变 函数原型:int AAprintf (int a,int size,int j,int i) for(k=0;ksize;k+)/*交换之前的清屏输出*/ printf( %d ,k+1); if(k=j|k=i) PrintfD( ak);/*输出*/ else PrintfA( ak);/*输出=*/ 功能: 当ak满足一定条件时分别输出

11、“*”和“=”。实现思路: 用一个for循环,当k等于传入参数j或者i时调用PrintfD函数,否则调用PrintfA函数。6. 输出最初数组的元素的大小 函数原型:int Beforeprint (int a,int size) printf( output the original arry:n); for(i=0;isize;i+)/*输出开始的数组*/ printf(%2d ,ai); for(j=0;jai;j+) printf(+); printf(n); Sleep(1000);system(cls);功能: 输出整个程序运行时最初得到未排序数组的所有元素。实现思路: 通过一个f

12、or语句输出排序前各个元素的的大小(其大小是通过输出“*”来表现的)。 7 输出排序后的数组元素的大小 函数原型:int Afterprint(int a,int size) printf( ouput the sorted number:); for(j=1;j=size;j+) printf(n %d %d ,j,aj-1); for(i=0;iaj-1;i+) printf(=); 功能: 和Beforeprint类似输出排序之后数组元素的大小实现思路: 一样是通过一个for语句的输出经过排序之后的数组大小(其大小是通过输出“=”个数来表现的)。1.3.2 测试系统设计为了方便说明,我们

13、利用程序执行后的界面来说明系统的界面设计和使用方法。1 主界面说明主界面如图1.1图1.1主界面中菜单各选项是按照作业顺序排列的,输入1-3可以进入各个排序演示的测试模块,输入0则退出系统,输入其它的则会提示重新输入。2各函数测试模块使用说明以“插入排序演示”为例进入主界面后,选择3进下入一级菜单,如图1.2下面是由程序自动生成的一列数。 图1.2 下面是由用户手动输入要排序的数。 图1.3 当不需要由程序自动生成时,先选择n或者N,则就需要用户手动输入自己定义的数组大小,如图示用户输入的数。之后就可以进行排序演示了。 3.各个演示函数的部分过程。 冒泡排序演示 图 1.4 上图体现了比较次数

14、,交换次数,以及在这时应该交换哪两个数。 图 1.5 上面的是冒泡演示排序最后的结果,当按Enter键时,界面将返回主页面。 选择排序演示 图 1.6 选择排序中在比较某两个数时,输出在这之前已经交换次数,和比较次数。 图 1.7输出选择排序的最终结果,并输出比较次数,和交换次数。 图 1.8 已经插入到已知序列的数在上面和未插入有序数列的数。 图 1.9 插入排序演示最终的结果,后面的“=”多少表示它前面数字的大小。1.3 关键设计说明在2.3我们已经对函数苦的各个函数进行简要说明。在这部分,我们将对这套函数库中的几个关键函数,也是最有代表性的函数进行详细的说明,并给出相应设计说明,函数代码

15、以及测试结果。 几个函数的设计1.冒泡(1)说明 冒泡排序是一种比较常见的排序方法,主要功能是通过传入一列数然 后经过冒泡排序的到一个有序的数,而本程序所要表达的是把数的大小通过图形的的个数来表示,然后比较相邻的两个数的大小,把较小的交换上来。依次下去直到最后一个数比较完为止。最后是输出排序好的数(用输出图形的个数的多少表示其大小)。 首先是调用Beforeprint函数,输出最初数组。然后进行比较过程。第一是交换输出交换数组,清屏。之后在输出交换后的的数,再清屏,这样就给人一种动态的感觉,这样一直下去知道把最后一个的数也比较完。用函数Afterprint输出最后结果。 (2).代码 Bubb

16、leSort(int a,int size) Beforeprint(a,size);/*调用输出最初的数组函数*/ for(i=0;isize;i+) /*比较的过程*/ for(j=0;jsize-i-1;j+) comparetimes+; AAprintf(a,size,j,j+1);/*交换之前的清屏输出函数*/ Sleep(1000);system(cls); p=Swap(&aj,&aj+1);/*调用Swap函数*/ AAprintf(a,size,j,j+1);/*交换之后的清屏输出函数*/ printf(-n); if(p)printf( now Swap a%d,a%d

17、n,j,j+1),+count;/*是否交换*/ printf( comparetimes : %dn Swap times :%d n,comparetimes,count); Sleep(1000),system(cls);system(cls); Afterprint(a,size);/*调用排序后的输出函数*/ printf(n comparetimes : %d n Swap times :%d n,comparetimes,count); 2.选择(1).说明 通过在选择排序的最初的循环体中表达首先调用Beforeprint函数输出未排序的数,然后清屏根据条件输出不同的数用不同的图

18、形表示。最后是调用Afterprin函数输出排列过之后的数。(2).代码 int SelectSort(int a,int size) int count=0,comparetimes=0; Beforeprint(a,size);/*调用输出最初的数组函数*/ for(i=0;isize;i+) /*比较的过程*/ for(j=i+1;jsize;j+) comparetimes+; AAprintf(a,size,j,i); printf( n compare a%d,a%dn,j,i); Sleep(1000);system(cls); p=Swap(&ai,&aj);/*调用Swap函

19、数*/ AAprintf(a,size,j,i); if(p)printf( Swap a%d,a%dn ,i,j),+count;/*是否交换*/ printf( comparetimes : %dn Swap times :%d n,comparetimes,count); Sleep(1000),system(cls),system(cls); Afterprint(a,size);/*调用排序后的输出函数*/ printf(n comparetimes : %d n Swap times :%d n,comparetimes,count);3 插入 (1).说明 通过在插入排序的最初的

20、循环体中表达首先调用Beforeprint函数输出未排序的数,然后清屏根据条件输出不同的数用不同的图形表示,这里输出的是已经插入好的序列,对于未插入的数,把它们放在输出图形的下方以便观察。最后是调用Afterprin函数输出排列过之后的数。(2).代码 Int InsertStor(int a,int size) Beforeprint(a,size);/*输出开始数据*/ printf(n-n);/system(cls); for(i=1;isize;i+)/*插入排序*/ for(j=0;ji;j+)/*循环比较*/ AAprintf(a,i,j,-1); printf( %d %d ,i

21、+1,ai); for(k=0;kai;k+)/*输出ai*/ printf(*);printf(n); for(n=i+1;n=0&ajx) aj+1=aj; j-; aj+1=x; AAprintf(a,i+1,j+1,-2); Sleep(1000);system(cls);/*延迟一幅画面的时间*/ Afterprint(a,size);/*输出排序后的数*/1.4 完整代码 完整的代码见此文档所在文件夹中。(C程序设计基础)1.5 函数库及测试系统的评价该函数库能够比较方便,安全地解决字符串的越界问题,但是由于时间原因,没有对函数库中的函数进行深入优化,存在算法设计不够精妙,执行效率不高等问题,这些都需要改正。该测试系统能够对已设计好的函数进行比较全面的测试,可以测试许多特殊情况,避免函数执行出现死角。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!