程序设计基础.docx
- 文档编号:8183782
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:13
- 大小:61.35KB
程序设计基础.docx
《程序设计基础.docx》由会员分享,可在线阅读,更多相关《程序设计基础.docx(13页珍藏版)》请在冰豆网上搜索。
程序设计基础
《程序设计基础》大作业
姓名:
刘欢
学号:
201001051118
班级:
信管10-1班
成绩:
信息科学与工程学院
2011年7月1日
设计C一套排序过程的演示函数
1.1需求陈述
用户可以自己根据需要编写排序函数,但是自己编写的函数只是能够根据输入的数来排序这些数,而不能在具体的演示到底是怎么样排出来的。
最后也是用户只能在屏幕上看到排好序的一列数而已!
所以我们需要具体的演示排序的过程是怎么样的,因此就有了下面的排序演示函数,这些函数根据排序的原理,比如冒泡排序,一步一步的演示各个数只见的比较。
可以使用后看的更清楚!
为了方便函数的测试,我们还专们设计了一个测试系统,对每一个设计好的函数进行测试,使得函数测试更加具有针对性和说服力。
1.2需求分析
1.2.1功能分析
表1函数功能分析
项目
功能
函数
排序的过程演示
排序演示函
数的
基本功能
冒泡排序BubbleSort
选择排序SelectSort
插入排序InsertSort
排序演示所需函数的封装
随机得到数组Timelygetarry
随机和用户输入得到数组GetArry
交换两数Swap
按数大小输出其个数用“*”表示PrintfD
按数大小输出其个数用“=”表示PrintfA
输出个别特殊元素的大小其他不变AAprintf
输出最初数组的元素的大小Beforeprint
输出排序后的数组元素的大小Afterprint
1.2.2数据分析
该排序过程的演示大多使用for语句和if语句。
对于数组的定义是必须要知道数组的大小(对于静态数组而言),把数组的大小通过用户从键盘输入,并把这个操作放在main函数之中,其他的排序演示函数只要把数组名和数组大小作为其参数就很容易解决在封装函数中定义数组的麻烦。
这样可以是程序可读性更高,更方便使用!
对于不同的排序演示函数从主屏幕上用户可以自己选择使用,这方便了演示.同时用户还可以通过自己从键盘上输入数来进行排序演示.
1.2.3技术约束
本函数库的测试系统已在codeblocks下编译通过。
1.3总体设计
1.3.1全局数据结构
这个排序演示函数是通过for语句的嵌套使用的到的,在main函数中是用while语句来得到个主循环体,在这个主循环体中先选择要排序的方法,然后是输入要排序的个数,之后就是调用到已经封装的函数,如BubbleSort即冒泡排序,SelectSort即选择排序,和InsertSort即插入排序,就进入了排序演示的过程!
1.3.2排序演示函数设计
A.排序的基本函数
1.冒泡排序
函数原型:
intBubbleSort(inta[],intsize)
功能:
冒泡排序是一种比较常见的排序方法,主要功能是通过传入一列数然后经过冒泡排序的到一个有序的数,而本程序所要表达的是把数的大小通过图形的的个数来表示,然后比较相邻的两个数的大小,把较小的交换上来。
依次下去直到最后一个数比较完为止。
最后是输出排序好的数(用输出图形的个数的多少表示其大小)。
实现思路:
通过在冒泡排序的最初的循环体中表达首先调用Beforeprint函数输出未排序的数,然后清屏根据条件输出不同的数用不同的图形表示。
最后是调用Afterprin函数输出排列过之后的数。
2.选择排序
函数原型:
intSelectSort(inta[],intsize)
功能:
选择排序是也一种比较常见的排序方法,主要功能是通过传入一列数然后经过选择排序的到一个有序的数,而本程序所要表达的是把数的大小通过图形的的个数来表示,然后按顺序一个数和其余的数比较,把较小的数交换上来。
依次下去知道最后一个数。
最后是输出排序好的数(用输出图形的个数的多少表示其大小)。
实现思路:
通过在选择排序的最初的循环体中表达首先调用Beforeprint函数输出未排序的数,然后清屏根据条件输出不同的数用不同的图形表示。
最后是调用Afterprin函数输出排列过之后的数。
3.插入排序
函数原型:
intInsertSort(inta[],intsize)
功能:
插入排序是另一种比较常见的排序方法,主要功能是通过传入一列数然后经过选择排序的到一个有序的数,而本程序所要表达的是把数的大小通过图形的的个数来表示,与选择,冒泡不同,插入是通过先选好一个数,待插入的的数和已排好序的数一次比较,找到一个合适的位置,然后把这个数插入进去。
依次下去直到最后一个数也被插入到序列当中。
最后是输出排序好的数(用输出图形的个数的多少表示其大小)。
实现思路:
通过在插入排序的最初的循环体中表达首先调用Beforeprint函数输出未排序的数,然后清屏根据条件输出不同的数用不同的图形表示,这里输出的是已经插入好的序列,对于未插入的数,把它们放在输出图形的下方以便观察。
最后是调用Afterprin函数输出排列过之后的数。
B.排序演示所需函数的封装
1随机和用户输入得到数组
函数原型:
intGetArry(inta[],intsize)
{
charch;getchar();/*接受回车符*/
printf("yorYforyesandnorNforno:
\n");
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
{srand((unsigned)time(NULL));
for(i=0;i a[i]=rand()%20+1;} if(ch=='n'||ch=='N') for(i=0;i scanf("%d",&a[i]); } 功能: 用户通过在屏幕上选择是否由程序自动生成,得到数组。 实现思路: 通过用户的选择执行不同的语句,如果是不由程序生成则由用户输入,通过一个for语句把用户输入的数分别赋值给数组的各个元素。 如果是有程序自动生成则调用头文件 2.交换两数 函数原型: intSwap(int*p,int*q) { if(*p>*q) {temp=*p,*p=*q,*q=temp; return1; } else return0; } 功能: 交换两个数 实现思路: 通过传入两个数的地址,如果前者大于后者则交换两数并返回1,否则返回0. 3.按数大小输出其个数用“*”表示 函数原型: intPrintfD(inta) { printf("%d",a); for(i=0;i printf("*"); printf("\n"); } 功能: 根据a的大小输出a个“*”。 实现思路: 通过一个for语句输出a个“*”。 4.按数大小输出其个数用“=”表示 函数原型: intPrintfA(inta) { printf("%d",a); for(i=0;i printf("="); printf("\n"); } 功能: 根据a的大小输出a个“=”。 实现思路: 通过一个for语句输出a个“=”。 5.输出个别特殊元素的大小其他不变 函数原型: intAAprintf(inta[],intsize,intj,inti) { for(k=0;k { printf("[%d]",k+1); if(k==j||k==i) PrintfD(a[k]);/*输出**/ else PrintfA(a[k]);/*输出=*/ } } 功能: 当a[k]满足一定条件时分别输出“*”和“=”。 实现思路: 用一个for循环,当k等于传入参数j或者i时调用PrintfD函数,否则调用PrintfA函数。 6.输出最初数组的元素的大小 函数原型: intBeforeprint(inta[],intsize) { printf("outputtheoriginalarry: \n"); for(i=0;i { printf("%2d",a[i]); for(j=0;j printf("+"); printf("\n"); }Sleep(1000);system("cls"); } 功能: 输出整个程序运行时最初得到未排序数组的所有元素。 实现思路: 通过一个for语句输出排序前各个元素的的大小(其大小是通过输出“*”来表现的)。 7输出排序后的数组元素的大小 函数原型: intAfterprint(inta[],intsize) { printf("ouputthesortednumber: "); for(j=1;j<=size;j++) { printf("\n[%d]%d",j,a[j-1]);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 基础
![提示](https://static.bdocx.com/images/bang_tan.gif)