进制转换的实现.doc_第1页
进制转换的实现.doc_第2页
进制转换的实现.doc_第3页
进制转换的实现.doc_第4页
进制转换的实现.doc_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

数据结构课程设计设计说明书进制转换的实现学生姓名学号班级成绩指导教师计算机科学与技术系2011 年 月日数据结构课程设计评阅书题 目进制转换的实现学生姓名学号指导教师评语及成绩成绩: 教师签名: 年 月 日答辩教师评语及成绩成绩: 教师签名: 年 月 日教研室意见总成绩: 室主任签名: 年 月 日注:指导教师成绩60%,答辩成绩40%,总成绩合成后按五级制记入。课程设计任务书2010 2011 学年第 二 学期专业: 信息管理与信息系统 学号: 姓名: 课程设计名称: 数据结构课程设计 设计题目: 进制转换的实现 完成期限:自 2011 年 2 月 19 日至 2011 年 3 月 4 日共 2 周设计依据、要求及主要内容(可另加附页):进制数制是人们利用符号进行计数的科学方法。数制有很多种,在计算机中常用的数制有:十进制,二进制、八进制和十六进制。十六进制数有两个基本特点:它由十六个字符09以及A,B,C,D,E,F组成(它们分别表示十进制数015),十六进制数运算规律是逢十六进一,例如:十六进制数4AC8可写成(4AC8)16,或写成4AC8H。要求: (1) 输入一个十进制数N,将它转换成R进制数输出,并可以进行逆转换。(2) 输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2=R=16, R10)。(3) 为每个测试实例输出转换后的数,每个输出占一行。如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,等等)。(4) 界面友好。指导教师(签字): 教研室主任(签字): 批准日期: 年 月 日摘要本次课程设计设计了一个任意进制之间转换的软件程序系统,依据对计算机的发展要求,常见的二进制、八进制、十进制及十六进制数也相应得到广泛使用,从最基本十进制向各个转换以及各进制内部转换相对应用较多,随即出现多种进制数,针对此现实,开发本系统,解决任意进制之间的相互转换,系统主要有以下几个模块:任意进制转换为十进制、十进制转换为任意进制以及两者组合实现任意进制间的相互转换。本软件程序系统在windows 2000/XP系统下,以Microsoft Visual C+ 6.0为运行软件环境,采用C/C+语言进行编写,操作简单明了,实际解决各进制数之间的转换。关键词:二进制;进制数;任意进制;相互转换目 录1 课题描述12 问题分析和任务定义23 逻辑设计34 详细设计44.1十进制转任意进制函数44.2 任意进制转十进制函数44.3程序流程图55 程序编码96 程序调试与测试14总结18文参考献19191 课题描述使用计算机的人每时每刻都在与数打交道,在计算机内部,数是以二进制表示的,而我们习惯上使用的是十进制数,所以计算机从我们这里接收到十进制数后,要经过翻译,把十进制数转换为二进制数才能进行处理,这个过程是由计算机自动完成的。但是对程序员来说,有时需要把十进制数转换为二进制数、十六进制数和八进制数,或者把十六进制数转换为十进制数等,这都不是一件轻松的工作,为了使这项工作变得轻松愉快现在我们用C语言来编写这个程序,该系统能够根据用户的要求,实现二进制、八进制、十进制、十六进制之间的相互转化,以及任意进制间的相互转换。系统开发基于Windows2000/Xp平台,以Visual C+6.0等作为开发工具。2 问题分析和任务定义数制转换器程序是要求任意两种数间的相互转化,本次课程设计以任意进制间转换为中心实现二进制、八进制、十进制、十六进制、十八进制之间的相互转化。对输入的任意进制的数字进行转换,实现常见进制间的转换以及用户自定义需要转换的目标进制数,这样大大提高了本程序的用途。常见的二进制、八进制、十进制、十六进制、十六进制之间的固定转换,其转黄方式大同小异,从低进制数向高进制数转换进行乘数累加,反之则逐步求余,最终进行分布计算得到想要的结果,对以上思想进行扩展,使其不仅仅局限于那些常见进制间的转换,更多的应用到任意进制之间的转换。本次系统程序,主要有两大模块组成,即任意进制转换为十进制、十进制转换为任意进制,这两部分共同组成了对任意进制数的转换的实现,通过菜单选择,让用户实现自己想要的结果,同时也在程序的简洁上有所压减,达到简洁的应用程序实现相对较复杂的功能。最后打印输出结果,清屏执行下次任务。3 逻辑设计竖直转换器系统,包括七个子函数模块,其中菜单函数模块定义为整型,其余字符转换函数处理模块都根据函数所需定义数据类型。数制转换器处理系统中用数组来储存处十进制以外的数,将一个指定进制的数,从低到低高一位一位取出,并计算出每位的十进制值,然后乘以其数基的特定幂指数,得出这一位数的十进制值,将所有各位的十进制值相加得出这个数的十进制值,然后再将该十进制数转换为指定数制的数,此过程采用求余法进行,用这个十进制数作为被除数,用指定的数基作除数,连续求余,得出的余数依由个位到十位等的顺序组成新数,即得指定数制的数。逻辑设计如图3.1所示。 图3.1 系统模块图4 详细设计4.1十进制转任意进制函数十进制整数num转换为任意(x)进制整数采用除x取余,逆序排列法。具体做法是:用x去除十进制整数,可以得到一个商和余数;再用x去除商,又会得到一个商和余数,如此进行,直到商为一时为止,然后把先得到的余数作为x进制数的低位有效位,后得到的余数作为x进制数的高位有效位,结构图如图4.5所示int ANY_ten(int x,int num) int i,j=0;int s=0;for(i=1;num!=0;i*=x)if(num%10(x-1)j=1;break;elses+=(num%10)*i;num=num/10;if(j=1)printf(原数据出错!请重新输入:n);elseprintf(转换为十进制:%dnn,s);return s;4.2 任意进制转十进制函数从最后一位开始算,依次列为第0、1、2.位第n位的数乘以任意进制数y的n次方得到的结果相加结构图如图4.5所示void ten_ANY(int num,int y)int i;int arr30;for(i=0;i+)arri=num%y;num=num/y;if(num=0)break;printf(转换为 %d 进制:,y);for(;i=0;i-)switch(arri)case 10 : printf(A);break;case 11 :printf(B);break;case 12 :printf(C);break;case 13 :printf(D);break;case 14 :printf(E);break;case 15 :printf(F);break;case 16 :printf(G);break;case 17 :printf(H);break;case 18 :printf(I);break;case 19 :printf(J);break;default :printf(%d,arri);printf(nn);4.3程序流程图(1)主函数main()流程图,如图4.1所示图4.1 main函数流程图图4.2 list2()函数流程图(2)主菜单list2()流程图,如图4.2所示(3)常见进制转换菜单list1()函数流程图,如图4.3所示图4.3常见进制转换菜单list1()函数流程图(4)十进制转换为任意进制函数ten_ANY ()函数流程图,如图4.4所示图4.4十进制转换为任意进制函数ten_ANY ()函数流程图(5)十进制转换为任意进制函数ANY _ten()函数流程图,如图4.5所示图4.5任意进制转换为十进制函数ANY_ten ()函数流程图(6)十进制转换为任意进制函数ANY _ch()函数流程图,如图4.6所示图4.6任意进制数之间的转换ANY_ch ()函数流程图5 程序编码#include#include#includelist2();int ANY_ten(int x,int num) int i,j=0;int s=0;for(i=1;num!=0;i*=x)if(num%10(x-1)j=1;break;elses+=(num%10)*i;num=num/10;if(j=1)printf(原数据出错!请重新输入:n);elseprintf(转换为十进制:%dnn,s);return s;void ten_ANY(int num,int y)int i;int arr30;for(i=0;i+)arri=num%y;num=num/y;if(num=0)break;printf(转换为 %d 进制:,y);for(;i=0;i-)switch(arri)case 10 : printf(A);break;case 11 :printf(B);break;case 12 :printf(C);break;case 13 :printf(D);break;case 14 :printf(E);break;case 15 :printf(F);break;case 16 :printf(G);break;case 17 :printf(H);break;case 18 :printf(I);break;case 19 :printf(J);break;default :printf(%d,arri);printf(nn);void list1()int i,a,m,num;char ch100;FILE *f;dogetchar();system(cls);printf( *n);printf( * *n);printf( * 数制转换器 *n);printf( * *n);printf( * 1 - 十进制转二进制 *n);printf( * 2 - 十进制转八进制 *n);printf( * 3 - 十进制转十六进制 *n);printf( * 4 - 二进制转十进制 *n);printf( * 5 - 八进制转十进制 *n);printf( * 6 - 十六进制转十进制 *n);printf( * 7 - 二进制转八进制 *n);printf( * 8 - 二进制转十六进制 *n);printf( * 0 - 返回 *n);printf( * *n);printf( *n);loop:printf(请输入你所选择的序号: ); scanf(%d,&a); if(a!=0&a9) st:printf(n输入要转换的数: ); scanf(%s,&ch); f=fopen(num.txt,w); for(i=0;i=(int)strlen(ch);i+) fputc(chi,f); fclose(f); for(i=0;i=48&(int)(chi)=A&(int)(chi)0);void ANY_ch()int a,m,x,y,num;printf(请输入进制数: );scanf(%d,&x);printf(输入该 %d 进制数:,x);scanf(%d,&num);m=ANY_ten(x,num);printf( 是否将当前十进制数进一步转换: 1.是 2.否n); printf( 请选择: );loop2:scanf(%d,&a); switch(a) case 1:printf(转换的目标进制数为: ); scanf(%d,&y); ten_ANY(m,y);break; case 2:printf(t转换结束!);break; default:printf(选择有误! 请重选: );goto loop2;break; getchar();int list2()int b;doprintf( *n);printf( * 欢迎访问: 二十进制内任意进制转换! *n);printf( *n);printf(tt按Enter进入主菜单!);getchar();system(cls);printf( *n);printf( * 【主菜单】 *n);printf( * *n);printf( * 模式选择 *n);printf( * *n);printf( * 1 - 常见进制转换 *n);printf( * 2 - 自定义进制数转换 *n);printf( * 0 - 退出 *n);printf( * *n);printf( *n);loop1:printf( 请选择要执行的模式: ); scanf(%d,&b); switch(b) case 1: list1();break; /*常见进制转换菜单*/ case 2: ANY_ch();break; /*任意进制数之间转换*/ case 0: exit(0);break; default: printf(n您的输入有误,请重新选择!nn);goto loop1;break; getchar();while(b0);return 0;void main()list2();6 程序调试与测试在vc+6.0运行界面如图6.1所示:数制转换器函数调试结果截图图6.1数制转换器函数调试结果按Enter键进入主菜单,如图6.2所示图6.2十进制转换为二进制选择1,进入常见进制转换菜单,如图6.3所示图6.3十进制转换为二进制选择1,十进制转换为二进制函数,输入12,结果如图6.4所示图6.3十进制转换为二进制选择2,十进制转换为八进制函数,输入20,结果如图6.4所示图6.4十进制转换为八进制选择3,十进制转换为十六进制函数,输入30,结果如图6.5所示图6.5十进制转换为十六进制选择4,二进制转换为十进制函数,输入131,结果如图6.6所示图6.6二进制转换为十进制选择4,二进制转换为十进制函数,输入111,结果如图6.7所示图6.7二进制转换为十进制选择5,八进制转换为十进制函数,输入171,结果如图6.8所示图6.8八进制转换为十进制选择6,十六进制转换为十进制函数,输入19AF,结果如图6.9所示图6.9十六进制转换为十进制选择7,二进制转换为八进制函

温馨提示

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

评论

0/150

提交评论