数制转换课程设计说明书.docx
《数制转换课程设计说明书.docx》由会员分享,可在线阅读,更多相关《数制转换课程设计说明书.docx(19页珍藏版)》请在冰豆网上搜索。
数制转换课程设计说明书
专业基础综合课程设计
设计说明书
进制转换的实现
学生
学号
班级
成绩
指导教师
数学与计算机科学学院
2012年6月29日
数据结构课程设计评阅书
题目
进制转换的实现
学生
学号
指导教师评语及成绩
成绩:
教师签名:
年月日
答辩教师评语及成绩
成绩:
教师签名:
年月日
教研室意见
总成绩:
室主任签名:
年月日
注:
指导教师成绩60%,答辩成绩40%,总成绩合成后按五级制记入。
课程设计任务书
2011—2012学年第二学期
专业:
计算机应用技术学号:
:
课程设计名称:
数据结构课程设计
设计题目:
进制转换的实现
完成期限:
自2012年6月18日至2012年6月29日共2周
设计依据、要求及主要容(可另加附页):
计算机中数据的存储形式是0,1代码,也就是以二进制的形式进行存储,运用c或vc++结合数据结构等基础知识,按以下要现各种进制的转换。
任务要求:
1)阐述设计思想,画出流程图;2)能完成用户输入的十进制数转换为二进制、八进制、十六进制及其他进制数,以及将其他任意进制数转换成十进制的功能;3)除十进制以为的其他进制之间的相互转换功能的实现;4)将用户的输入及要求的结果能对应打印输出;5)应用较好的界面设计,说明程序测试方法;6)按照格式要求完成课设说明书。
设计要求:
1)问题分析和任务定义:
根据设计题目的要求,充分地分析和理解问题,明确问题要求做什么?
(而不是怎么做?
)限制条件是什么?
确定问题的输入数据集合。
2)逻辑设计:
对问题描述中涉及的操作对象定义相应的数据类型,并按照以数据结构为中心的原则划分模块,定义主程序模块和各抽象数据类型。
逻辑设计的结果应写出每个抽象数据类型的定义(包括数据结构的描述和每个基本操作的功能说明),各个主要模块的算法,并画出模块之间的调用关系图;
3)详细设计:
定义相应的存储结构并写出各函数的伪码算法。
在这个过程中,要综合考虑系统功能,使得系统结构清晰、合理、简单和易于调试,抽象数据类型的实现尽可能做到数据封装,基本操作的规格说明尽可能明确具体。
详细设计的结果是对数据结构和基本操作做出进一步的求精,写出数据存储结构的类型定义,写出函数形式的算法框架;
4)程序编码:
把详细设计的结果进一步求精为程序设计语言程序。
同时加入一些注解和断言,使程序中逻辑概念清楚;
5)程序调试与测试:
采用自底向上,分模块进行,即先调试低层函数。
能够熟练掌握调试工具的各种功能,设计测试数据确定疑点,通过修改程序来证实它或绕过它。
调试正确后,认真整理源程序及其注释,形成格式和风格良好的源程序清单和结果;
6)结果分析:
程序运行结果包括正确的输入及其输出结果和含有错误的输入及其输出结果。
算法的时间、空间复杂性分析;
7)编写课程设计报告;
以上要求中前三个阶段的任务完成后,先将设计说明数的草稿交指导老师面审,审查合格后方可进入后续阶段的工作。
设计工作结束后,经指导老师验收合格后将设计说明书打印装订,并进行答辩。
指导教师(签字):
教研室主任(签字):
批准日期:
年月日
摘要:
本次课程设计设计了一个任意进制之间转换的软件程序系统,开发本系统,解决任意进制之间的相互转换,系统主要有以下几个模块:
任意进制转换为十进制、十进制转换为任意进制以及两者组合实现任意进制间的相互转换。
本软件程序系统在windows2000/XP系统下,以MicrosoftVisualC++6.0为运行软件环境,采用C/C++语言进行编写,操作简单明了,实际解决各进制数之间的转换。
1课题描述……………………………………………………………………………1
2问题分析和任务定义………………………………………………………………2
3逻辑设计……………………………………………………………………………3
4详细设计……………………………………………………………………………7
5程序调试与测试…………………………………………………………………10
5.1十进制转换为任意进制………………………………………………………………10
5.2任意进制转化为十进制………………………………………………………………11
5.3任意进制间的转换……………………………………………………………………12
总结…………………………………………………………………………………18
参考文献……………………………………………………………………………19
1课题描述
在计算机部,数据是以二进制表示的,而人们习惯上使用的是十进制数,所以计算机从我们这里接收到十进制数后,要经过翻译,把十进制数转换为二进制数才能进行处理,该系统能够根据用户的要求,用C语言来编写这个程序,实现二进制、八进制、十进制、十六进制之间的相互转化,以及任意进制间的相互转换。
系统开发基于Windows2000/Xp平台,以VisualC++6.0等作为开发工具。
2问题分析和任务定义
数制转换程序是要求任意两种数间的相互转化,本次课程设计以任意进制间转换为中心实现二进制、八进制、十进制、十六进制、十八进制之间的相互转化。
其转换方式大致相同,从低进制数向高进制数转换进行乘数累加,反之则逐步求余,最终进行分布计算得到想要的结果。
本次系统程序,主要有两大模块组成,即任意进制转换为十进制、十进制转换为任意进制,这两部分共同组成了对任意进制数的转换的实现,通过菜单选择,让用户实现自己想要的结果。
最后打印输出结果。
3逻辑设计
数值转换转换系统,包括八个子函数模块,其中菜单函数模块定义为整型,其余字符转换函数处理模块都根据函数所需定义数据类型。
数制转换处理系统中用栈来储存处十进制以外的数,将一个指定进制的数,从低到高一位一位取出,并计算出每位的十进制值,然后乘以其数基的特定幂指数,得出这一位数的十进制值,将所有各位的十进制值相加得出这个数的十进制值,然后再将该十进制数转换为指定数制的数,此过程采用求余法进行,用这个十进制数作为被除数,用指定的数基作除数,连续求余,得出的余数依由个位到十位等的顺序组成新数,即得指定数制的数。
逻辑设计如图3.1所示。
图3.1设计思想流程图
3.1程序流程图
(1)主函数main()流程图,如图3.2所示
图3.2main函数流程图
(2)十进制转换为任意进制流程图,如图3.3所示
图3.3为十进制到任意进制转换流程图
(3)任意进制到十进制的转换,如图3.4所示
开始
inti=0,j=0,y,d,c=-1;
intv=0,r=0,sum=0;
i++,n++,q=b%m
传的参数赋b,b>0?
输出转换结果
i=n
n
y
i--
结束
i>0
y
y
图3.4为任意进制到十进制转换流程图
4详细设计
#include
#include
#include
#include
#include
#include
#include
#defineOK1
#defineERROR0
#defineSTACK_INIT_SIZE100
#defineSTACKINCREMENT10
typedefcharStatus;
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;
else
returnERROR;}
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为十六进制到十进制的转换
(2)输入非法数据:
图5.9对小数不能正确转换
5.3任意进制间的转换,结果如图5.10—5.13所示:
(1)输入合法数据:
图5.10为二进制到八进制的转换
图5.11为八进制到十六进制的转换
图5.12为十六进制到二进制的转换
(2)输入非法数据:
图5.13对非法数据不能正确判断
5.4程序运行结束,如图5.14所示:
退出界面结果截图:
图5.14为程序退出界面
总结
通过本次课程设计,提高了自己对于程序总体思路的把握,以及对程序的分析和理解。
更能熟练的运用整型数组进行取整求余从而进行进制间的转换。
能通过switch语句进行判断选择处理,使自己通过程序设计,真正的在实践中把课本所学的知识熟练的运用。
所完成的数制转换器系统实现的二进制、八进制十六进制和十进制之间转换等功能,除此之外不能实现小数的转化问题、判断对输入数字的判断是符合要求和对输入不合法字符检验并提示的功能。
希望以后可以实现上述两个问题,首先是改进程序,使其能实现小数的转化,和和判断对输入数字的判断是符合要求,对输入不合法字符检验并提示的功能。
这次课程设计是我对c语言知识进行了系统的、有条理的复习,对许多知识点都加深了记忆。
我了解到c语言的提高,通过编写复杂的程序,这样可以开阔思路,检验自己对各章节使用的灵活度,检验自己在学习中的漏洞。
同时这次课程的制作,为我毕业设计的制作打下了坚定的基础。
参考文献
[1]严蔚敏,吴伟民.数据结构(c语言版)[M]:
清华大学2007
[2]罗建军,朱丹军,顾刚.C++程序设计教程(第2版)[M]:
高等教育2007
[3]虹,静丽.C语言程序设计[M]:
大学2010