程序设计大作业文档格式.docx
《程序设计大作业文档格式.docx》由会员分享,可在线阅读,更多相关《程序设计大作业文档格式.docx(10页珍藏版)》请在冰豆网上搜索。
1.1设计题目3
1.2设计内容3
1.3开发工具3
1.4应用平台3
2详细设计3
2.1程序结构3
2.2主要功能3
2.3函数实现3
2.4开发日志4
3程序调试及运行4
3.1程序运行结果4
3.2程序使用说明4
3.3程序开发总结4
4附件(源程序)4
1摘要
1.1设计题目
查找算法
1.2设计内容
本程序建立了一个CZSF.cbp的C程序工程。
具体内容为如下:
#include<
stdio.h>
/*预处理命令*/
stdlib.h>
#include"
kspx.h"
/*自定义的头文件,包含快速排序函数kspx的相关信息*/
intmain()
{
voidsearch(inta[],intb,intn);
/*对能够实现程序查找功能的search函数进行声明*/
inta[50],b,n,i;
/*定义整形数组和变量*/
printf("
inputthesumofthenumbers:
"
);
scanf("
%d"
&
n);
/*输入所要查找得数的范围*/
printf("
input%dnumbers:
n);
for(i=0;
i<
n;
i++)scanf("
a[i]);
/*依次输入各个数,并存储到数组中去*/
printf("
theneednumber:
b);
/*输入所要查找得数*/
kspx(a,n);
/*调用快速排序函数对该组数进行排序*/
search(a,b,n);
/*利用查找函数进行查找*/
return0;
}
voidsearch(inta[],intb,intn)/*search函数的定义*/
intx1=0,x2=n-1,mid,j=0;
/*定义变量想,x1,x2,mid和j*/
while(x1<
=x2)/*循环条件,x1和x2分别为区间左右端点*/
{
mid=(x1+x2)/2;
/*mid为区间中值*/
if(b<
a[mid])x2=mid-1;
elseif(b>
a[mid])x1=mid+1;
/*依据查找数b和a[mid]的大小关系确定新区间*/
else
++mid);
/*输出b所在该顺序数组中的位置*/
j=1;
break;
/*发现b,跳出循环*/
}
if(j==0)printf("
nofound!
/*判断b是否在该组数中*/
1.3开发工具
CodeBlocks10.05
1.4应用平台
Windows2000/XP/Vista32位
2详细设计
2.1程序结构
该程序功能的实现是有三个函数来共同完成的,其中main函数是系统主调函数,为顺序结构,其余两个函数在main函数中被调用。
kspx函数为排序函数,不属于报告范围。
Search函数为查找函数,它主要是由一个当型循环体内部穿插选择语句所构成的。
main函数中的局部变量n和b通过值传递的方式传给search函数中的形参变量n和b,指针常量a通过地址传递的方式传给search函数中的指针变量a,这样search函数就可以调用主函数中的数值了。
函数调用结束后形参变量释放,并得到返回值传给主调函数。
2.2主要功能
该程序的主要功能是判断一组数中是否含有某一已知变量,若有,就对该组数进行顺序排列,并输出该变量在数组中的位置,若没有,就输出“nofound!
”。
功能的实现主要是由kspx函数和search函数来完成的。
2.3函数实现
本程序的主要功能,即查找,是由search函数来实现的,以下详细介绍该函数的算法和结构:
Search函数的功能是调用主函数中的数组a和局部变量b,n.进而利用折半查找算法进行数据查找的。
其具体内容如下:
voidsearch(inta[],intb,intn)
=x2)
}
它的算法是这样的:
对于一组已经按从小到大顺序排列的数组a,取其元素个数为n,x1和x2分别为待查找数字b所在区间的左端点和右端点,mid=(x1+x2)/2为区间中点。
⑴如果b<
a[mid]就x2=mid-1改变区间右端点,缩小区间长度,进入下一层循环。
⑵如果b>
a[mid]就x1=mid+1改变区间右端点,缩小区间长度,进入下一层循环。
⑶如果b=a[mid]就printf("
把b所在的位置输出,并j=1跳出循环。
⑷判断j的值确定该数组中是否存在b值没有就输出“nofound!
”结束程序。
它的结构是这样的:
利用当型循环语句while,执行上述算法的⑴⑵⑶部分,循环条件是x1<
=x2,⑴⑵⑶部分是靠选择语句if有机组合到一起的。
循环结束后执行算法第四步,并最终结束函数的调用。
main函数整体是顺序结构。
2.4开发日志
我最初是想在利用折半查找算法的基础上,通过对search函数的直接递归调用来实现其查找功能的,不过没有调试正确,所以利用当型循环语句,外加循环终止条件进行控制,这表明C程序许多地方都是相通的,同一种算法可能有多种不同的C语句表达形式,只是其空间复杂性和时间复杂性不一样而已。
C程序的很多地方,我还不能灵活的加以应用,这就需要我沉下心来,仔细分析,多上机,多做例题,从而真正掌握这门描述抽象事物的基本工具。
3程序调试及运行
3.1程序运行结果
上面所显示的是程序某一次运行所得到的结果图,如图所示,第一行输入所查找数的范围,即数组的大小,第二行依次输入数各个数组元素,第三行输入所要查找的数,回车后,即得到第五行,查询的结果。
各行均有提示,按要求输入即可。
3.2程序使用说明
程序的主要作用:
判断一组数中是否含有某一已知变量,若有,就对该组数进行顺序排列,并输出该变量在数组中的位置,若没有,就输出“nofound!
程序的使用方法:
在CodeBlocks10.05下运行C源程序,执行.exe程序,并按提示输入相关数据,即可运行得到最终结果。
3.3程序开发总结
C程序大作业能够将简单的算法扩展为实现一定作用的应用程序,从而锻炼了一名程序员在多个方面的能力,如程序结构的组成,相关函数的调用,函数参数的传递,循环体和选择语句的合理构成等等。
这对一名初涉C程序的新手而言,无疑是有很重要的意义的!
4附件(源程序)
inta[50],b,n,i;
return0;
其中头文件kspx.h的具体内容如下:
#ifndefZBPX_H_INCLUDED
#defineZBPX_H_INCLUDED
voidkspx(inta[],intn)
inti,j,k,t;
n-1;
i++)
k=i;
for(j=i+1;
j<
j++)
if(a[k]>
a[j])k=j;
elsecontinue;
if(k!
=i)
t=a[i];
a[i]=a[k];
a[k]=t;
#endif//ZBPX_H_INCLUDED