为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > 软件算法设计说明书

软件算法设计说明书

2020-05-18 3页 doc 246KB 51阅读

用户头像

is_769254

暂无简介

举报
软件算法设计说明书科信学院课程设计说明书(2012/2013学年第二学期)课程名称:软件综合算法设计题目:数制转换问题专业班级:学生姓名:学号:指导教师:设计周数:2周设计成绩:2013年7月2日目录TOC\o"1-5"\h\zHYPERLINK\l"bookmark24"\o"CurrentDocument"一、实验目的-2-HYPERLINK\l"bookmark26"\o"CurrentDocument"二、实验要求及目标-2-HYPERLINK\l"bookmark28"\o"CurrentDocument"三、算法...
软件算法设计说明书
科信学院课程说明(2012/2013学年第二学期)课程名称:软件综合算法设计题目:数制转换问题专业班级:学生姓名:学号:指导教师:设计周数:2周设计成绩:2013年7月2日目录TOC\o"1-5"\h\zHYPERLINK\l"bookmark24"\o"CurrentDocument"一、实验目的-2-HYPERLINK\l"bookmark26"\o"CurrentDocument"二、实验要求及目标-2-HYPERLINK\l"bookmark28"\o"CurrentDocument"三、算法思想-3-1、用数组实现该问题:-.3-2、用栈实现该问题:-3-HYPERLINK\l"bookmark30"\o"CurrentDocument"四、模块划分-3-1、用数组实现该问题:-..3.-2、用栈实现该问题:-..4.-HYPERLINK\l"bookmark32"\o"CurrentDocument"五、数据结构-4-1、用数组实现该问题-..4.-2、用栈实现该问题-..4.-HYPERLINK\l"bookmark34"\o"CurrentDocument"六、程序源代码及结果-5-(一)数组-..5..-1、源代码-..5..-2、运行结果-..9.-(二)栈-..1..2-1、源代码-.1..2-2.运行结果-..1..7-七、心得体会-20-软件综合算法设计报告实验名称:数值转换问题指导老师:杨荣爱组员1:黄静南学号:110212203组员2:赵兴凡学号:110212216完成时间:2013年7月2日一、实验目的了解并掌握软件算法设计的与步骤,具备初步的独立分析问题、解决问题的能力。初步掌握软件开发过程的问题分析、系统设计、程序编码和测试等基本方法和技能。积累项目设计及程序调试、测试的经验,提高综合运用所学的理论知识和方法,锻炼独立分析和解决问题的能力.训练用系统的观点和软件开发一般规范进行软件的开发,培养软件工作者所具备的科学工作方法和作风。二、实验要求及目标要求:任意给定一个M进制的数x,请实现如下要求:1)求出此数x的10进制值(用MD示);2)实现对x向任意的一个非M进制的数的转换;3)至少用两种或两种以上的方法实现上述要求(用栈解决,用数组解决,其它方法解决)。目标:完成实验要求,实现源代码的运行,进而实现要求中的基本功能三、算法思想1、用数组实现该问题:DTOM)函数和MTO()函数是实现该问题的主要函数。DTOM(函数是实现十进制转换。为其它进制的函数,它是将输入的十进制数x取首先对需要转换的进制M取余,然后再对其取整,接着通过递归调用DTOM(函数依次将得到的整数部分依次先取余后取整,并将所得的余数依次存入一个数组中,然后逆向取出数组中的元素,即得到转换后的结果。而MTOD(函数则是实现其他进制M转换为十进制,并将其转换为非M进制的数。M进制转十进制则是从该M进制数的最后一位开始算,依次列为第0、1、2…n位并分别乘以M的0、1、2…n次方,将得到的次方相加便得到对应的十进制数,再调用DTOM)函数将其转换为非M进制的数。2、用栈实现该问题:同样是利用DTOM)和MTOM)两个函数实现.两个函数的思想同利用数组实现时相同。只是栈具有后进先出的性质,故其用Pop()取数较数组的逆向取数方便些.四、模块划分1、用数组实现该问题⑴i,j,y,n,s,m,r,reminder,x是定义的全局变量,初始值都为0;⑵DTOMintg,inth)是实现十进制数转换为M进制数的函数;⑶MTOD)是实现M(仅指二进制数和八进制数)进制数转换为十进制数的函数,并在其中调用DTOM(intg,inth)实现向非M进制数的转换;⑷HTODMintf)是实现十六进制数转换为十进制数的函数,并在其中调用DTOM(intg,inth)实现向非十六进制数的转换;⑸voidmain()是主函数,功能是给出测试的数据,并在特定条件下调用DTOM)(函数和MTO(D)函数。2、用栈实现该问题:⑴SqStack定义栈,说明base为栈底指针,top为栈顶指针,stacksize为栈容量;⑵intlnitStack(SqStack&S)至UintDestroyStack(SqStack&S)六大模块分别表示构造一个空栈、用e表示栈元素、插入元素、删除元素、判断栈是否为空以及摧毁栈;⑶SqStackS是指定义栈S;⑷DTO(inta,intb)的功能是将十进制数转换成M进制的函数;⑸MTOD(的功能是M进制转换为十进制的函数;⑹voidmain()是主函数。其功能是输入需要测试的数据以及需要转换的进制,并在特定情形下调用DTOM)函数和MTOD)函数,而且实现M进制数向任意非M进制数的转换。五、数据结构1、用数组实现该问题:使用简单一维数组inta[N],intb[N],intc[N]2、用栈实现该问题:数据类型定义如下:typedefstruct{int*base;int*top;intstacksize;}SqStack;六、程序源代码及结果(一)数组1、源代码#include〈stdio。h〉#include=65)printf("%c",c[j]);elseprintf(”%,dc”[j]);return0;}MTOD(inte)//二进制和八进制数转换为十进制数,并这转换为其他进制数{inta[N];printf(”请输入%d进制位数:”,m);scanf("%d”,&n);printf(”请输入%d进制的每位并使每位用空格隔开:”m);for(i=0;i〈n;i++)scanf("%d”,&a[i]);for(i=n—1;i>=0;i——){y+=(int)pow(e,j)*a[i];//强制类型转换,以免造成数据丢失j++;}printf(”请输出所得的10进制的结果:”);printf("%d”,y);printf("\n需要转换的进制M:");scanf(%”d”,&s);printf("请输出转换成%d进制的结果:”,s);DTOM(y,s);return0;}HTOD(intf)//十六进制数转换为十进制数,并转换为其他进制数{intb[N];printf(”请输入%d进制位数:",m);scanf("%d",&n);printf(”请输入%d进制的每位并使每位用空格隔开:",m);for(i=0;i:16anyksytocontinue叵]・E!Vl^fi6\£HUZU\Debug\ghd芒炖图1-3图1—4(二)栈1、源代码#include#include#includevstdlib。h>#include〈math.h〉#defineSTACK_INIT_SIZE100//存储空间初始分配量#defineSTACKINCREMENT10//存储空间分配增量inte,m,x,s,t;〃x为要转换的十进制数,e为临时用的的int型变量intr,y,i,n;typedefstruct{int*base;//栈底int*top;//栈顶intstacksize;//栈容量}SqStack;intInitStack(SqStack&S){//构造一个空栈S。base=(int*)malloc(STACK_INIT_SIZE*sizeof(int))if(!S。base)exit(0);//存储空间失败S.top=S.base;S。stacksize=STACK_INIT_SIZE;return0;intGetTop(SqStackS,int&e){//若栈不为空,则用e返回S的栈顶元素,并返回0,否则返回1if(S。top==S。base)return1;e=*(S。top—1);return0;}intPush(SqStack&S,inte){//插入元素e为新的栈顶元素if(S。top-S.base〉=S.stacksize){//栈满,追加存储空间S.base=(int*)realloc(S。base,(S.stacksize+STACKINCREMENT)*sizeof(int));if(!S.base)return1;//存储分配失败S.top=S.base+S.stacksize;S。stacksize+=STACKINCREMENT;}*S.top++=e;return0;}intPop(SqStack&S,int&e){//若栈不空,则删除S的栈顶元素,用e返回其值,并返回0,否则返回1if(S.top==S。base)return1e=*-—S.top;return0;intStackEmpty(SqStackS){//若栈空,则返回1,否则返回0if(S。top==S。base)return1;return0;}intDestroyStack(SqStack&S){//销毁栈S,栈S不再存在free(S。base);S。top=NULL;//防止程序后面不小心使用了它S.base=S。top;return0;}SqStackS;//定义栈S//十进制转换成其他进制的函数D2M()DTOM(inta,intb){while(a){r=a%b;if(r〉9)r=r+55;Push(S,r);//压入栈printf(”该数转换成%d进制的结果:”,b);while(!StackEmpty(S)){Pop(S,e);//弹出栈if(e>=65)printf("%c”,e);elseprintf("%d",e);}return0;}MTOD()//其他进制转换为十进制的函数M2D(){charc[1000];printf("请输入需要转换的数的位数:”);scanf("%d",&n);printf("请输入需要转换的数的每位并用空格隔开:”);for(i=0;i=币1&隔"格1B空or用期=4井20^=!^M<魯:1:旳的:舶toISMy拠成y需需需^8-人入入成農仔sst-图2—2该数转换成?进制的结臬池曲Pi*eESAni/]<&ytocantinue^KiS'S,lM<2(jr3orl0ci'l&>=10学转谀嘗谥制数聞碱的逑制数:3啣的结果:仙020S3回'E:V_^A的垃中EHAhl.exe'开隔格空13IBM0一8|4>T61r10茁薯4524nu贩舊:4呂ft=ti制的矍M:譜on进数数果穆G的的彎瑯.榻諭.另的£'VS夢要进换也y需需需10赛an兀入入成翼仔込:n亥片青青圭图2-4七、心得体会组员一(黄静南):通过这次软件算法设计,我对研究算法设计的重要性有了更加深刻的认知,算法的选择对解决实际问题的效率有很大的影响,实验使我对设计思想有了更加深刻的理解,对以后的实验解决方案有了更多的选择,开阔了我的设计思路。软件算法设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。在实验设计过程中,我还发现了很多学习中的盲点,上理论课时认为已经理解的在程序中运行起来又是另一回事,所以实践与理论结合是学习中非常重要的,尤其是在软件设计方面。随着科学技术发展的日新月异,当今计算机应用在生活中可以说得是无处不在。而计算机应用与编程相互依存,在学好基础的情况下增加实践是最好的选择.经过这一次两周完整的成功的编程练习,对我产生的莫大的激励,也让我对编程有了更大的兴趣。这次的软件算法设计对我们的锻炼很大,让我们学到了老师没法交给我们的,也让我们明白程序设计的大体步骤,让我们对我们的专业又有更进一步的了解。我不仅体会到自己解决问题的乐趣,也体验到了同学合作的美好.两周时间说长不长,说短也不短,我们不停地翻阅资料和讨论,有过迷茫有过喜悦,不过最后我们终于成功了!满足感油然而生,如果有人问我物质和精神哪个更让人满足,那答案一定是精神那种感觉只有自己体会了才能懂.总之,这次设计程序让我受益良多,我很珍惜像这种难得的机会组员二(赵兴凡):通过这次实验设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,这毕竟独立做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。独立自主固然重要,但是分工合作也必不可少.通过这次与同学的合作,了解到自身的不足,与同伴做到了互补。我们选的题目看着简单,但是做起来很难,虽然刚学完数据结构,期间还是遇到了很多问题.程序不是一气呵成的,需要一点一点的修改补充,直到可以成功运行出需要的功能。这次课程设计给了我以后编程莫大的激励,因为我认为所谓算法通过老师的传授每个人都只会一点点,而课外的东西需要自己去学习。仅靠自己学的那些基础知识是无法编程的,需要融会贯通并且熟练运用.这段时间虽然很不好受,但是我体会到了编程的乐趣,这使我对自己有了信心。这学期学的数据结构也起到了很大的作用,有了数据结构的只是,加上程序设计技术则对以后对计算机技术的深入学习应该会有很大的帮助。最后感谢各位老师的教导,感谢老师给我们这次实践的机会。参考文献严蔚敏,吴伟民。数据结构(C语言版)。清华大学出版社,2007陈良银,游洪跃,李伟旭。C语言程序设计(C99版).清华大学出版社,2006(2007重印)谭浩强。C++程序设计(第二版)。清华大学出版社,2011.8课程设计评语课程设计成绩指导教师(签字)年月日
/
本文档为【软件算法设计说明书】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索