数制转换课程设计说明书_第1页
数制转换课程设计说明书_第2页
数制转换课程设计说明书_第3页
数制转换课程设计说明书_第4页
数制转换课程设计说明书_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

专业基础综合课程设计设计说明书进制转换的实现学生姓名学号班级成绩指导教师数学与计算机科学学院2023年6月29日

数据结构课程设计评阅书题目进制转换的实现学生姓名学号指导教师评语及成绩成绩:教师署名:年月日答辩教师评语及成绩成绩:教师署名:年月日教研室意见总成绩:室主任署名:年月日注:指导教师成绩60%,答辩成绩40%,总成绩合成后按五级制记入。

课程设计任务书2023—2023学年第二学期专业:计算机应用技术学号:姓名:课程设计名称:数据结构课程设计设计题目:进制转换的实现完毕期限:自2023年6月18日至2023年6月29日共2周设计依据、规定及重要内容(可另加附页):计算机中数据的存储形式是0,1代码,也就是以二进制的形式进行存储,运用c或vc++结合数据结构等基础知识,按以下规定实现各种进制的转换。任务规定:1)阐述设计思想,画出流程图;2)能完毕用户输入的十进制数转换为二进制、八进制、十六进制及其他进制数,以及将其他任意进制数转换成十进制的功能;3)除十进制认为的其他进制之间的互相转换功能的实现;4)将用户的输入及规定的结果能相应打印输出;5)应用较好的界面设计,说明程序测试方法;6)按照格式规定完毕课设说明书。设计规定:1)问题分析和任务定义:根据设计题目的规定,充足地分析和理解问题,明确问题规定做什么?(而不是怎么做?)限制条件是什么?拟定问题的输入数据集合。2)逻辑设计:对问题描述中涉及的操作对象定义相应的数据类型,并按照以数据结构为中心的原则划分模块,定义主程序模块和各抽象数据类型。逻辑设计的结果应写出每个抽象数据类型的定义(涉及数据结构的描述和每个基本操作的功能说明),各个重要模块的算法,并画出模块之间的调用关系图;3)具体设计:定义相应的存储结构并写出各函数的伪码算法。在这个过程中,要综合考虑系统功能,使得系统结构清楚、合理、简朴和易于调试,抽象数据类型的实现尽也许做到数据封装,基本操作的规格说明尽也许明确具体。具体设计的结果是对数据结构和基本操作做出进一步的求精,写出数据存储结构的类型定义,写出函数形式的算法框架;4)程序编码:把具体设计的结果进一步求精为程序设计语言程序。同时加入一些注解和断言,使程序中逻辑概念清楚;5)程序调试与测试:采用自底向上,分模块进行,即先调试低层函数。可以纯熟掌握调试工具的各种功能,设计测试数据拟定疑点,通过修改程序来证实它或绕过它。调试对的后,认真整理源程序及其注释,形成格式和风格良好的源程序清单和结果;6)结果分析:程序运营结果涉及对的的输入及其输出结果和具有错误的输入及其输出结果。算法的时间、空间复杂性分析;7)编写课程设计报告;以上规定中前三个阶段的任务完毕后,先将设计说明数的草稿交指导老师面审,审查合格后方可进入后续阶段的工作。设计工作结束后,经指导老师验收合格后将设计说明书打印装订,并进行答辩。指导教师(签字):教研室主任(签字):批准日期:年月日摘要:本次课程设计设计了一个任意进制之间转换的软件程序系统,开发本系统,解决任意进制之间的互相转换,系统重要有以下几个模块:任意进制转换为十进制、十进制转换为任意进制以及两者组合实现任意进制间的互相转换。本软件程序系统在windows2023/XP系统下,以MicrosoftVisualC++6.0为运营软件环境,采用C/C++语言进行编写,操作简朴明了,实际解决各进制数之间的转换。

目录1课题描述……………12问题分析和任务定义………………23逻辑设计……………34具体设计……………75程序调试与测试…………………105.1十进制转换为任意进制………………105.2任意进制转化为十进制………………115.3任意进制间的转换……………………12总结…………………18参考文献……………19

1课题描述在计算机内部,数据是以二进制表达的,而人们习惯上使用的是十进制数,所以计算机从我们这里接受到十进制数后,要通过翻译,把十进制数转换为二进制数才干进行解决,该系统可以根据用户的规定,用C语言来编写这个程序,实现二进制、八进制、十进制、十六进制之间的互相转化,以及任意进制间的互相转换。系统开发基于Windows2023/Xp平台,以VisualC++6.0等作为开发工具。

2问题分析和任务定义数制转换程序是规定任意两种数间的互相转化,本次课程设计以任意进制间转换为中心实现二进制、八进制、十进制、十六进制、十八进制之间的互相转化。其转换方式大体相同,从低进制数向高进制数转换进行乘数累加,反之则逐步求余,最终进行分布计算得到想要的结果。本次系统程序,重要有两大模块组成,即任意进制转换为十进制、十进制转换为任意进制,这两部分共同组成了对任意进制数的转换的实现,通过菜单选择,让用户实现自己想要的结果。最后打印输出结果。

3逻辑设计数值转换转换系统,涉及八个子函数模块,其中菜单函数模块定义为整型,其余字符转换函数解决模块都根据函数所需定义数据类型。数制转换解决系统中用栈来储存处十进制以外的数,将一个指定进制的数,从低到高一位一位取出,并计算出每位的十进制值,然后乘以其数基的特定幂指数,得出这一位数的十进制值,将所有各位的十进制值相加得出这个数的十进制值,然后再将该十进制数转换为指定数制的数,此过程采用求余法进行,用这个十进制数作为被除数,用指定的数基作除数,连续求余,得出的余数依由个位到十位等的顺序组成新数,即得指定数制的数。逻辑设计如图3.1所示。结束结束主菜单始开数函择选退出程序进制转换返回主菜单任意进制之间任意进制到十十到任意进制图3.1设计思想流程图3.1程序流程图(1)主函数main()流程图,如图3.2所示主菜单始开主菜单始开作操择选0操作1操作十到任意进制任意进制到十任意进制之间结束(2)十进制转换为任意进制流程图,如图3.3所示开始开始intq,i=0,b,c=0,n=0;传的参数赋b,b>0?i++对b求余,赋给qq=q+48将q值转换为十六进制补码压栈操作,调用入栈函数求商操作,将商赋给bi=ni>0输出转换结果i--结束nnnyyy判断b是否为要转换的数字类型y重新输入n图3.3为十进制到任意进制转换流程图(3)任意进制到十进制的转换,如图3.4所示开始开始inti=0,j=0,y,d,c=-1;intv=0,r=0,sum=0;inti=0,j=0,y,d,c=-1;intv=0,r=0,sum=0;i++,n++,q=b%m传的参数赋b,b>0?输出转换结果i=nnyi--结束i>0yy对b求余,赋给qq=q+48nn将q值转换为十六进制补码入栈操作,对栈顶元素操作i++,n++,q=b%m传的参数赋b,b>0?输出转换结果i=nnyi--结束i>0yy对b求余,赋给qq=q+48nn将q值转换为十六进制补码入栈操作,对栈顶元素操作图3.4为任意进制到十进制转换流程图4具体设计#include<stdio.h>#include<stdlib.h>#include<math.h>#include<ctype.h>#include<process.h>#include<malloc.h>#include<string.h>#defineOK1#defineERROR0#defineSTACK_INIT_SIZE100#defineSTACKINCREMENT10typedefcharStatus;typedefstruct{ int*base;int*top; intstacksize;//当前已分派的存储空间,以元素为单元}SqStack;chars1[20];chars2[10];intInitStack(SqStack&S)//构造一个空栈{ S.base=(int*)malloc(STACK_INIT_SIZE*sizeof(int)); if(!S.base)//空栈的标志return(ERROR); S.top=S.base; S.stacksize=STACK_INIT_SIZE; returnOK;} Statusclearstack(SqStack&S)//清空栈{ S.top=S.base; returnOK;}StatusPush(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)return(OVERFLOW);//存储分派失败 S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; }S.top=S.base; S.top++; //先插入数据元素,再移动栈顶指针 *S.top=e; returnOK;}charStackEmpty(SqStack*S)//判断栈是否为空{if(S->top==S->base)returnOK;elsereturnERROR;}intANY_TEN(intn)//任意进制转化为十进制{ inti=0,j=0,y,d,c=-1;intv=0,r=0,sum=0; chart[20];printf("请输入您要转化的数:");scanf("%s",&t);printf("\n"); fflush(stdin); while(t[j]!='\0') {j++;}for(i=0;t[i]!='\0';i++) {if((int)(t[i])>=48&&(int)(t[i])<=57||(t[i])>='A'&&(int)(t[i])<='J'); else{ printf("输入有误!请输入数字:\n"); printf("请输入您要转化的数:");scanf("%s",&t); } c++; y=j-i-1; if(t[i]<='9'); else { d=t[i]; t[i]=d-7; }r=(int)(t[i]-48)*pow(n,y); sum=sum+r; } returnsum;}voidTEN__ANY(SqStack&S,inta,intm)//十进制转换为任意进制{intq,i=0,b,c=0,n=0; b=(int)a; if(isdigit(b)) printf("输入错误\n");else{while(b>0){i++;n++;q=b%m;if(q>9)q=toupper(q+55); else {q=q+48;} Push(S,q); b=b/m; s1[i]=*S.top;}}printf("最终转换结果为:"); for(i=n;i>0;i--) printf("%c",s1[i]);}intANY_ANY(SqStack&S)//任意进制间的转换{ intm,z,n,sum; printf("请输入源进制和目的进制(2,8,10,16):");scanf("%d",&n);scanf("%d",&m);printf("\n");printf("将%d进制转换为%d进制",n,m); printf("\n");printf("\n"); sum=ANY_TEN(n); InitStack(S); TEN__ANY(S,sum,m); return(OK);}intmenu_select(){ intc;do{printf("\n");printf("\t\t2、8、10、16进制间的互相转换\t\n\n\n");printf("\t\t1.进制转换\t\n\n");printf("\t\t0.谢谢使用\t\n\n");printf("\t\t请输入你需要进行的操作1/0:\n\n\n");fflush(stdin);scanf("%d",&c);}while(c<0||c>1);return(c);}voidmain(){SqStackS;intn,m;floata;for(;;){switch(menu_select()) {case1:printf("\t\t\t进制转换\n\n");ANY_ANY(S); break;case0:printf("\t\t\t谢谢使用!再见!:\n"); printf("\t\t\t"); exit(0); } }}

5程序调试与测试在vc++6.0运营界面如图5.1所示:数制转换函数调试结果截图图5.1为数制转换程序运营界面5.1十进制转换为任意进制,结果如图5.2—5.5所示:(1)输入合法数据:图5.2为十进制到二进制的转换图5.3为十进制到八进制的转换图5.4为十进制到十六进制的转换(2)输入非法数据:图5.5输入非法数据5.2任意进制转化为十进制,结果如图5.6—5.9所示:(1)输入合法数据:图5.6为二进制到十进制的转换图5.7为八进制到十进制的转换图5.8为十六进制到十进制的转换

温馨提示

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

评论

0/150

提交评论