软件算法设计说明书.doc
《软件算法设计说明书.doc》由会员分享,可在线阅读,更多相关《软件算法设计说明书.doc(20页珍藏版)》请在咨信网上搜索。
科 信 学 院 课程设计说明书 (2012/2013学年第二学期) 课程名称 : 软件综合算法设计 题 目 : 数制转换问题 专业班级 : 学生姓名 : 学 号: 指导教师 : 设计周数 : 2周 设计成绩 : 2013年 7 月 2 日 目 录 一、实验目的 - 2 - 二、实验要求及目标 - 2 - 三、算法思想 - 3 - 1、用数组实现该问题: - 3 - 2、用栈实现该问题: - 3 - 四、模块划分 - 3 - 1、用数组实现该问题: - 3 - 2、用栈实现该问题: - 4 - 五、数据结构 - 4 - 1、用数组实现该问题 - 4 - 2、用栈实现该问题 - 4 - 六、程序源代码及结果 - 5 - (一)数组 - 5 - 1、源代码 - 5 - 2、运行结果 - 8 - (二)栈 - 10 - 1、源代码 - 10 - 2.运行结果 - 15 - 七、心得体会 - 17 - 【参考文献】 - 19 - 软 件 综 合 算 法 设 计 报 告 实验名称:数值转换问题 指导老师:杨 荣 爱 组员1:黄静南 学号:110212203 组员2:赵兴凡 学号:110212216 完成时间:2013年7月2日 一、实验目的 了解并掌握软件算法设计的方法与步骤,具备初步的独立分析问题、解决问题的能力。初步掌握软件开发过程的问题分析、系统设计、程序编码和测试等基本方法和技能。积累项目设计及程序调试、测试的经验,提高综合运用所学的理论知识和方法,锻炼独立分析和解决问题的能力。 训练用系统的观点和软件开发一般规范进行软件的开发,培养软件工作者所具备的科学工作方法和作风。 二、实验要求及目标 要求:任意给定一个M进制的数x ,请实现如下要求: 1)求出此数x的10进制值(用MD表示); 2)实现对x向任意的一个非M进制的数的转换; 3)至少用两种或两种以上的方法实现上述要求(用栈解决,用数组解决,其它方法解决)。 目标:完成实验要求,实现源代码的运行,进而实现要求中的基本功能。 三、算法思想 1、用数组实现该问题: DTOM()函数和MTOD()函数是实现该问题的主要函数。 DTOM()函数是实现十进制转换。 为其它进制的函数,它是将输入的十进制数x取首先对需要转换的进制M取余,然后再对其取整,接着通过递归调用DTOM()函数依次将得到的整数部分依次先取余后取整,并将所得的余数依次存入一个数组中,然后逆向取出数组中的元素,即得到转换后的结果。而MTOD()函数则是实现其他进制M转换为十进制,并将其转换为非M进制的数。M进制转十进制则是从该M进制数的最后一位开始算,依次列为第0、1、2…n位并分别乘以M的0、1、2…n次方,将得到的次方相加便得到对应的十进制数,再调用DTOM()函数将其转换为非M进制的数。 2、用栈实现该问题: 同样是利用DTOM()和MTOD()两个函数实现。两个函数的思想同利用数组实现时相同。只是栈具有后进先出的性质,故其用Pop()取数较数组的逆向取数方便些。 四、模块划分 1、用数组实现该问题: ⑴ i,j,y,n,s,m,r,reminder,x是定义的全局变量,初始值都为0; ⑵ DTOM(int g,int h)是实现十进制数转换为M进制数的函数; ⑶ MTOD()是实现M(仅指二进制数和八进制数)进制数转换为十进制数的函数,并在其中调用DTOM(int g,int h)实现向非M进制数的转换; ⑷ HTOD(int f)是实现十六进制数转换为十进制数的函数,并在其中调用DTOM(int g,int h)实现向非十六进制数的转换; ⑸ void main()是主函数,功能是给出测试的数据,并在特定条件下调用DTOM()函数和MTOD()函数。 2、用栈实现该问题: ⑴ SqStack定义栈,说明base为栈底指针,top为栈顶指针,stacksize为栈容量; ⑵ int InitStack(SqStack &S)到int DestroyStack(SqStack &S)六大模块分别表示构造一个空栈、用e表示栈元素、插入元素、删除元素、判断栈是否为空以及摧毁栈; ⑶ SqStack S是指定义栈S; ⑷ DTOM(int a,int b)的功能是将十进制数转换成M进制的函数; ⑸ MTOD()的功能是M进制转换为十进制的函数; ⑹ void main()是主函数。其功能是输入需要测试的数据以及需要转换的进制,并在特定情形下调用DTOM()函数和MTOD()函数,而且实现M进制数向任意非M进制数的转换。 五、数据结构 1、用数组实现该问题: 使用简单一维数组int a[N],int b[N], int c[N]。 2、用栈实现该问题: 数据类型定义如下: typedef struct{ int *base; int *top; int stacksize; }SqStack; 六、程序源代码及结果 (一)数组 1、源代码 #include<stdio.h> #include<math.h> #define N 1000 int i,j,y,n,s; int m,r,reminder; int x; //全局变量默认初始化为0,不必再赋0了 DTOM(int g,int h) //十进制数转换为其他进制数 { int c[N]; i=0; reminder=g%h; g=g/h; if(reminder>9) { c[i]=reminder+55; i++; } else { c[i]=reminder; i++; } if(g>0) DTOM(g,h); for(j=i-1;j>=0;j--) if(c[j]>=65) printf("%c",c[j]); else printf("%d",c[j]); return 0; } MTOD(int e) //二进制和八进制数转换为十进制数,并这转换为其他进制数 { int a[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); return 0; } HTOD(int f) //十六进制数转换为十进制数,并转换为其他进制数 { int b[N]; printf("请输入%d进制位数:",m); scanf("%d",&n); printf("请输入%d进制的每位并使每位用空格隔开:",m); for(i=0;i<n;i++) scanf("%x",&b[i]); for(i=n-1;i>=0;i--) { y+=(int)pow(f,j)*b[i]; //强制类型转换,以免造成数据丢失 j++; } printf("请输出所得的10进制的结果: "); printf("%d",y); printf("\n需要转换的进制M:"); scanf("%d",&s); printf("请输出转换成%d进制的结果:",s); DTOM(y,s); return 0; } void main() { printf("请给定一个需转换的进制M(2or8or10or16):"); scanf("%d",&m); if(m==2||m==8) //二进制和八进制转换成十进制 MTOD(m); else if(m==16) //十六进制转换成十进制 HTOD(m); else if(m==10) //十进制转换成其它进制 { printf("请输入一个%d进制数:",m); scanf("%d",&x); printf("请输入需要转换成的进制M(2or8or16):"); scanf("%d",&r); printf("请输出转换成%d进制的结果:",r); DTOM(x,r); } printf("\n"); } 2、运行结果 图1-1 图1-2 图1-3 图1-4 (二)栈 1、源代码 #include<stdio.h> #include<malloc.h> #include<stdlib.h> #include<math.h> #define STACK_INIT_SIZE 100 //存储空间初始分配量 #define STACKINCREMENT 10 //存储空间分配增量 int e,m,x,s,t; //x为要转换的十进制数,e 为临时用的的int型变量 int r,y,i,n; typedef struct{ int *base; //栈底 int *top; //栈顶 int stacksize; //栈容量 }SqStack; int InitStack(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; return 0; } int GetTop(SqStack S, int &e){ //若栈不为空,则用e返回S的栈顶元素,并返回0,否则返回1 if(S.top==S.base) return 1; e=*(S.top-1); return 0; } int Push(SqStack &S , int e){ //插入元素e为新的栈顶元素 if(S.top-S.base>=S.stacksize){ //栈满,追加存储空间 S.base=(int *)realloc(S.base, (S.stacksize+STACKINCREMENT)*sizeof(int)); if(!S.base) return 1 ; //存储分配失败 S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; } *S.top++=e; return 0; } int Pop(SqStack &S, int &e){ //若栈不空,则删除S的栈顶元素,用e返回其值,并返回0,否则返回1 if(S.top==S.base) return 1; e=*--S.top; return 0; } int StackEmpty(SqStack S){ //若栈空,则返回1,否则返回0 if(S.top==S.base) return 1; return 0 ; } int DestroyStack(SqStack &S){ //销毁栈S,栈S不再存在 free(S.base); S.top=NULL; //防止程序后面不小心使用了它 S.base=S.top; return 0 ; } SqStack S; //定义栈S DTOM(int a,int b) //十进制转换成其他进制的函数D2M() { while(a) { r=a%b; if(r>9) r=r+55; Push(S,r); //压入栈 a/=b; //转换成M进制 } printf("该数转换成%d进制的结果:",b); while(!StackEmpty(S)) { Pop(S,e); //弹出栈 if(e>=65) printf("%c",e); else printf("%d",e); } return 0; } MTOD() //其他进制转换为十进制的函数M2D() { char c[1000]; printf("请输入需要转换的数的位数:"); scanf("%d",&n); printf("请输入需要转换的数的每位并用空格隔开:"); for(i=0;i<n;i++) { scanf("%x",&c[i]); Push(S,c[i]); } i=0; while(!StackEmpty(S)) { Pop(S,e); y+=(int)pow(m,i)*e; i++; } printf("转换成10进制的结果是:"); printf("%d",y); return 0; } void main() { InitStack(S); //构造一个空栈 printf("请输入需要转换的进制M(2or8or10or16):"); scanf("%d",&m); if(m==10) //十进制转换成其他进制 { printf("请给定一个需要转换的10进制数:"); scanf("%d",&x); printf("请输入需要转换成的进制数:"); scanf("%d",&t); DTOM(x,t); } if(m==2||m==8||m==16) //其他进制转换成十进制,且其他任意进制的相互转换 { MTOD(); printf("\n给定要转换成的进制M:"); scanf("%d",&s); DTOM(y,s); } printf("\n"); DestroyStack(S); //销毁栈S,栈S不再存在 } 2.运行结果 图2-1 图2-2 图2-3 图2-4 七、心得体会 组员一(黄静南):通过这次软件算法设计,我对研究算法设计的重要性有了更加深刻的认知,算法的选择对解决实际问题的效率有很大的影响,实验使我对设计思想有了更加深刻的理解,对以后的实验解决方案有了更多的选择,开阔了我的设计思路。软件算法设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。 在实验设计过程中,我还发现了很多学习中的盲点,上理论课时认为已经理解的在程序中运行起来又是另一回事,所以实践与理论结合是学习中非常重要的,尤其是在软件设计方面。随着科学技术发展的日新月异,当今计算机应用在生活中可以说得是无处不在。而计算机应用与编程相互依存,在学好基础的情况下增加实践是最好的选择。 经过这一次两周完整的成功的编程练习,对我产生的莫大的激励,也让我对编程有了更大的兴趣。这次的软件算法设计对我们的锻炼很大,让我们学到了老师没法交给我们的,也让我们明白程序设计的大体步骤,让我们对我们的专业又有更进一步的了解。我不仅体会到自己解决问题的乐趣,也体验到了同学合作的美好。两周时间说长不长,说短也不短,我们不停地翻阅资料和讨论,有过迷茫有过喜悦,不过最后我们终于成功了!满足感油然而生,如果有人问我物质和精神哪个更让人满足,那答案一定是精神,那种感觉只有自己体会了才能懂。总之,这次设计程序让我受益良多,我很珍惜像这种难得的机会 组员二(赵兴凡):通过这次实验设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,这毕竟独立做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。 独立自主固然重要,但是分工合作也必不可少。通过这次与同学的合作,了解到自身的不足,与同伴做到了互补。我们选的题目看着简单,但是做起来很难,虽然刚学完数据结构,期间还是遇到了很多问题。 程序不是一气呵成的,需要一点一点的修改补充,直到可以成功运行出需要的功能。 这次课程设计给了我以后编程莫大的激励,因为我认为所谓算法通过老师的传授每个人都只会一点点,而课外的东西需要自己去学习。仅靠自己学的那些基础知识是无法编程的,需要融会贯通并且熟练运用。这段时间虽然很不好受,但是我体会到了编程的乐趣,这使我对自己有了信心。这学期学的数据结构也起到了很大的作用,有了数据结构的只是,加上程序设计技术则对以后对计算机技术的深入学习应该会有很大的帮助。最后,感谢各位老师的教导,感谢老师给我们这次实践的机会。 参考文献 [1] 严蔚敏,吴伟民。数据结构(C语言版)。清华大学出版社,2007 [2]陈良银,游洪跃,李伟旭。C语言程序设计(C99版)。清华大学出版社,2006(2007重印) [3]谭浩强。C++程序设计(第二版)。清华大学出版社,2011.8 课程设计 评 语 课程设计 成 绩 指导教师 (签字) 年 月 日 - 19 -- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 算法 设计 说明书
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【pc****0】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【pc****0】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【pc****0】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【pc****0】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文