收藏 分销(赏)

数制转换-c语言程序设计课程设计报告.doc

上传人:a199****6536 文档编号:2493585 上传时间:2024-05-30 格式:DOC 页数:29 大小:338.95KB
下载 相关 举报
数制转换-c语言程序设计课程设计报告.doc_第1页
第1页 / 共29页
数制转换-c语言程序设计课程设计报告.doc_第2页
第2页 / 共29页
数制转换-c语言程序设计课程设计报告.doc_第3页
第3页 / 共29页
数制转换-c语言程序设计课程设计报告.doc_第4页
第4页 / 共29页
数制转换-c语言程序设计课程设计报告.doc_第5页
第5页 / 共29页
点击查看更多>>
资源描述

1、计算机学院高级语言程序设计课程设计报告学号2016-2017学年 第二学期C语言程序设计课程设计报告题目:数制转换专业:网络工程(对口)班级:姓名:指导教师:成绩:计算机学院2017 年 4月 25日目录一、转换概述21、需求分析22、概要设计23.详细设计41.十进制转化为任意进制函数:42.任意进制转化十进制函数:53.程序流程图64.运行环境115.开发工具和编程语言12二、数学原理13十进制转二进制:13十进制转八进制:13十进制转十六进制:14二进制转十进制:14二进制转八进制:14二进制转十六进制:15八进制转十进制:15八进制转十六进制:16十六进制转二进制:16十六进制转八进制

2、:16三、附:源代码17测试结果22参考文献25四、小结26致谢26一、转换概述1、需求分析 进制数制是人们利用符号进行计数的科学方法。数制有很多种,在计算机中常用的数制有:十进制,二进制、八进制和十六进制。十六进制数有两个基本特点:它由十六个字符09以及A,B,C,D,E,F组成(它们分别表示十进制数015),十六进制数运算规律是逢十六进一。要求: (1) 输入一个十进制数N,将它转换成R进制数输出,并可以进行逆转换。(2) 输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2=R=16, R10)。(3) 为每个测试实例输出转换后的数,每个输出占一行。如果R大于10,

3、则对应的数字规则参考16进制(比如,10用A表示,等等)。(4) 界面友好。2、概要设计 数制转换器程序是要求任意两种数间的相互转化,本次课程设计以任意进制间转换为中心实现二进制、八进制、十进制、十六进制、十八进制之间的相互转化。对输入的任意进制的数字进行转换,实现常见进制间的转换以及用户自定义需要转换的目标进制数,这样大大提高了本程序的用途。常见的二进制、八进制、十进制、十六进制、十六进制之间的固定转换,其转换方式大同小异,从低进制数向高进制数转换进行乘数累加,反之则逐步求余,最终进行分布计算得到想要的结果,对以上思想进行扩展,使其不仅仅局限于那些常见进制间的转换,更多的应用到任意进制之间的

4、转换。本次系统程序,主要有两大模块组成,即任意进制转换为十进制、十进制转换为任意进制,这两部分共同组成了对任意进制数的转换的实现,通过菜单选择,让用户实现自己想要的结果,同时也在程序的简洁上有所压减,达到简洁的应用程序实现相对较复杂的功能。最后打印输出结果,清屏执行下次任务。 该程序包括七个子函数模块,其中菜单函数模块定义为整型,其余字符转换函数处理模块都根据函数所需定义数据类型。数制转换器处理系统中用数组来储存处十进制以外的数,将一个指定进制的数,从低到低高一位一位取出,并计算出每位的十进制值,然后乘以其数基的特定幂指数,得出这一位数的十进制值,将所有各位的十进制值相加得出这个数的十进制值,

5、然后再将该十进制数转换为指定数制的数,此过程采用求余法进行,用这个十进制数作为被除数,用指定的数基作除数,连续求余,得出的余数依由个位到十位等的顺序组成新数,即得指定数制的数。(1)逻辑设计如图所示: 图2.1(2) 程序中各函数简单说明见如表1、1函数说明所示:表2.1返回值函数名参数表函数说明intmainvoid主函数voidint ANY_ten()int x,int num任意进制转换为十进制voidInt ten_ANY()int num,int y十进制转换为任意进制voidten_ANY()num,2十进制转换为二进制voidlist1()num进制转换菜单voidlist2(

6、)num主菜单voidANY_ch ()num,num任意进制间的转换3.详细设计1.十进制转化为任意进制函数:十进制整数num转换为任意(x)进制整数采用除x取余,逆序排列法。具体做法是:用x去除十进制整数,可以得到一个商和余数;再用x去除商,又会得到一个商和余数,如此进行,直到商为一时为止,然后把先得到的余数作为x进制数的低位有效位,后得到的余数作为x进制数的高位有效位,结构图如图3.4所示: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

7、%10)*i;num=num/10;if(j=1)printf(原数据出错!请重新输入:n);elseprintf(转换为十进制:%dnn,s);return s;2.任意进制转化十进制函数:从最后一位开始算,依次列为第0、1、2.位第n位的数乘以任意进制数y的n次方得到的结果相加结构图如图3.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 : pri

8、ntf(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);3.程序流程图(1)主函数main()流程图,如图3

9、.1所示:图3.1 main函数流程图(2)主菜单list2()流程图,如图3.2所示:图3.2 list2()函数流程图6(3)常见进制转换菜单list1()函数流程图,如图3.3所示:图3.3常见进制转换菜单list1()函数流程图(4)十进制转换为任意进制函数ten_ANY ()函数流程图,如图3.4所示:图3.4十进制转换为任意进制函数ten_ANY ()函数流程图(5)任意进制转换为十进制函数ANY _ch()函数流程图,如图3.5所示:图3.5任意进制数之间的转换ANY_ch ()函数流程图4.运行环境 软件环境 操作系统:Windows7 硬件环境 处理器:Intel Penti

10、um 166MX 或更高 内存:32MB以上 硬盘空间:1GB以上 显卡:SVGA 显示适配5.开发工具和编程语言 C语言二、数学原理 实现进制转换需要编个函数(进制转换器),每一函数完成相应进制的转换,下面是各个进制之间转换的数学方法的算法。十进制转二进制: 十进制数转换成二进制数,是一个连续除2的过程;把要转换的数,除以2,得到商和余数,将商继续除以2,直到商为0.最后将所有余数倒序排列,得到数就是转换结果。例如:302/2=151余0151/2=75余175/2=37余137/2=18余118/2=9余09/2=4余14/2=2余02/2=1余0所以302转换为2进制,结果:100101

11、110.十进制转八进制: 十进制数转换成八进制的方法和转换为二进制的方法类似,唯一变化:除数由2变成8。例如:120/8=15余015/8=1余71/8=0余1所以120转换为8进制,结果:170.十进制转十六进制: 十进制数转换成十六进制数的方法和转换为二进制的方法类似,唯一变化:除数由2变成16。不过,十六进制数:(1015)是用英文大写字母(AF)表示。例如:123/16=7余11所以123转换为16进制,结果:7B.二进制转十进制: 二进制数转换为十进制数按权展开,第0位的权值是2的0次方,第1位的权值是2的1次方例如:1010转换成十进制数:第0位:0*20=0第1位:1*21=2第

12、2位:0*22=0第3位:1*23=8所以1010转换成十进制数,结果:0+2+0+8=10.二进制转八进制: 利用421,从后往前每三位一组,缺位补0,然后按十进制方法进行转换。例如:(11001)001=1011=3然后将结果按从下往上顶顺序书写:31.二进制转十六进制: 二进制和十六进制的互相转换比较重要。不过这二者的转换却不用计算;利用8421,对于任意一个4位的二进制数,都可以很快算出它对应的10进制值。例如:1111=8+4+2+1=15又因为十六进制数:1015用大写字母AF表示,所以15为F.八进制转二进制: 利用421;从后往前每三位一组,缺位处用0填补,然后按十进制方法进行

13、转化;例如:10013-011然后我们将结果按从下往上的顺序书写就是:11001,那么这个11001就是八进制31的二进制形式。八进制转十进制: 八进制就是逢8进1,八进制数采用07这八数来表达一个数;八进制数第0位的权值为8的0次方,第1位权值为8的1次方,第2位权值为8的2次方例如:1507转换成十进制数:第0位:7*80=7第1位:0*81=0第2位:5*82=320第3位:1*83=512所以换算成十进制:7+0+320+512=839.八进制转十六进制: 八进制转换成十六进制:有两种方法:一种是先将八进制转换成二进制,在将二进制转换成十六进制。另一种方法是将八进制转换成十进制,在将十

14、进制转换成十六进制。十六进制转二进制: 上面已经提到二进制转换成十六进制的方法,记住8421,每一位的权值,所以十六进制转成二进制就是一段四位分别转成二进制。例如:F1111,D1101,A1010,50101.十六进制转八进制: 十六进制转八进制也不能直接转换,需要将十六进制转换成十进制或者二进制,才能由十进制或者二进制转换成八进制。十六进制转十进制: 16进制就是逢16进1,但我们只有09这十个数字,所以我们用A,B,C,D,E,F这六个字母来分别表示10,11,12,13,14,15。 十六进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方所以,在

15、第N(N从0开始)位上,如果是数X(X大于等于0,并且X小于等于15,即:F)表示的大小为X*16的N次方。例如:2AF5第0位:5*160=5第1位:F*161=240第2位:A*163=2560第3位:2*164=8192所以转换成十进制数为:10997.29三、附:源代码#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)prin

16、tf(原数据出错!请重新输入: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 :pr

17、intf(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( *

18、*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,

19、&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( 是否将当前十进制数进

20、一步转换: 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进入主菜单!

21、);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: AN

22、Y_ch();break; /*任意进制数之间转换*/ case 0: exit(0);break; default: printf(n您的输入有误,请重新选择!nn);goto loop1;break; getchar();while(b0);return 0;void main()list2();测试结果按Enter键进入主菜单,如图3.1所示:图3.1十进制转换为二进制选择1,进入常见进制转换菜单,如图3.2所示:图3.2十进制转换为二进制选择1,十进制转换为二进制函数,输入12,结果如图3.3所示:图3.3十进制转换为二进制选择2,十进制转换为八进制函数,输入20,结果如图3.4所示:

23、图3.4十进制转换为八进制选择3,十进制转换为十六进制函数,输入30,结果如图3.5所示:图3.5十进制转换为十六进制选择4,二进制转换为十进制函数,输入131,结果如图3.6所示:图3.6二进制转换为十进制选择4,二进制转换为十进制函数,输入111,结果如图3.7所示:图3.7二进制转换为十进制选择5,八进制转换为十进制函数,输入171,结果如图3.8所示:图3.8八进制转换为十进制选择6,十六进制转换为十进制函数,输入19AF,结果如图3.9所示:图3.9十六进制转换为十进制选择7,二进制转换为八进制函数,输入1101,结果如图3.10所示:图3.10十六进制转换为十进制选择8,二进制转换

24、为十六进制函数,输入11111,结果如图3.11所示:图3.11二进制转换为十六进制选择0,返回主菜单如图3.12所示:图3.12返回主菜单选择2,自定义进制转换,输入进制数为2,数字为110101,选择1.是,结果如图3.13所示:图3.13自定义进制转换参考文献1谭浩强.C程序设计(第三版).北京:清华大学出版社.2005:342李建忠.大学计算机基础.西安:西北大学出版社.2005:1043谭浩强.C程序设计题解与上机指导(第三版).北京:清华大学出版社.2005:684罗建军、朱丹军、顾刚.C+程序设计教程(第2版).北京:高等教育出版社.2007:76四、小结本次课程设计,完成的数制

25、转换器系统实现了二进制、八进制、十六进制和十进制之间相互转换等功能,同时也实现了二十进制内任意进制之间的转化功能。并且加入了对输入数字的判定是否符合要求,对输入不合法字符检验并提示的功能。当输入的数字太大而无法实现转化时,主要是因为数字超过了定义的长度,无法实现两个数制转化。除此之外本程序不能实现小数的转化等问题。我希望以后可以实现上述两个问题,首先是改进程序,使其能实现小数的转化,其次改进定义的长度问题,使其能够转化更大的数。这次课程设计使我对C语言知识进行了系统的、有条理的复习,对许多知识点都加强了记忆。通过本次数据结构课程设计,我进一步学习了用C语言设计代码的思想,并把它运用到实际操作中

26、。C语言是工具,数据结构是思想,把两者结合起来,熟练运用,才能设计出符合要求的算法。设计过程中,我也遇到很多麻烦,并通过翻阅资料、询问同学来解决。在这个过程中,我知道了与他人合作的重要性,学会了与他人合作。以后,我会更认真的学习C语言,不断提高自己的编程水平。致谢在这次C语言课程设计中,我的老师和同学给了我及大的帮助。特别是我的指导老师熊茜老师,还有我的C语言任课老师金尚柱老师。在此,我对他们表示感谢!感谢他们在我面对困难时给了我帮助和支持。也感谢那些给我帮助的所有同学!目 录第一章 总 论11.1 项目概要11.2 可行性研究报告编制依据11.3 项目区简介及建设单位概况21.4 可研报告研

27、究内容61.5 可研报告研究结论、问题及建议7第二章 项目背景及建设的必要性和可行性92.1 建设背景92.2 项目建设的必要性132.3 项目建设的可行性15第三章 项目建设内容及规模173.1 项目建设内容173.2 建设规模17第四章 场址选择及建设条件194.1 场址现状194.2 建设条件19第五章 工程方案245.1 方案设计指导思想及原则245.2 建筑设计245.3 结构设计295.4 给排水设计335.5 暖通设计365.6 电气及弱电设计395.7 消防设计42第六章 能源和资源节约措施456.1 能源节约措施456.2 建筑节能具体措施466.3 给排水资源节约措施466

28、.4 电气节能具体措施466.5 供热系统节能技术措施47第七章 环境影响评价487.1 环境影响487.2 保护措施507.3 安全保护措施517.4 环境影响评价结论52第八章 组织机构538.1 管理机构538.2 项目组织管理53第九章 工程管理及实施计划549.1 项目建设管理原则549.2 工程管理549.3 项目实施步骤559.4 项目实施进度计划55第十章 劳动安全、卫生与消防5810.1 劳动安全与卫生5810.2 消防安全59第十一章 投资估算及资金筹措6111.1 估算依据及内容6111.2 投资估算6311.3 资金筹措6412.1 招标依据6512.2 工程招标65第十三章 社会影响分析及评价6813.1 项目社会评价的依据6813.2 建设地区基本的社会环境情况6813.3 社会影响分析6813.4 项目在建设、运营中的社会风险分析6913.5 社会评价结论70第十四章 结论及建议7114.1 结论7114.2项目建议71第十五章 附表、附图、附件7315.1 附表7315.2 附图7315.3 附件73

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 通信科技 > 开发语言

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服