数制转换-C语言程序设计课程设计报告_第1页
数制转换-C语言程序设计课程设计报告_第2页
数制转换-C语言程序设计课程设计报告_第3页
数制转换-C语言程序设计课程设计报告_第4页
数制转换-C语言程序设计课程设计报告_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

计算机学院《高级语言程序设计》课程设计报告(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硬件环境处理器:IntelPentium166MX或更高内存:32MB以上硬盘空间:1GB以上显卡:SVGA显示适配5.开发工具和编程语言C语言

二、数学原理

实现进制转换需要编个函数(进制转换器),每一函数完成相应进制的转换,下面是各个进制之间转换的数学方法的算法。

十进制转二进制:

十进制数转换成二进制数,是一个连续除2的过程;把要转换的数,除以2,得到商和余数,将商继续除以2,直到商为0.最后将所有余数倒序排列,得到数就是转换结果。

例如:

302/2

=

151

余0

151/2

=

75

余1

75/2

=

37

余137/2

=

18

余118/2

=

9

余0

9/2

=

4

余14/2

=

2

余02/2

=

1

余0

所以302转换为2进制,结果:100101110

.

十进制转八进制:

十进制数转换成八进制的方法和转换为二进制的方法类似,唯一变化:除数由2变成8。

例如:

120/8=15余0

15/8=1余71/8=0余1

所以120转换为8进制,结果:170.

十进制转十六进制:

十进制数转换成十六进制数的方法和转换为二进制的方法类似,唯一变化:除数由2变成16。

不过,十六进制数:(10~15)是用英文大写字母(A~F)表示。

例如:

123/16=7余11

所以123转换为16进制,结果:7B.

二进制转十进制:

二进制数转换为十进制数按权展开,第0位的权值是2的0次方,第1位的权值是2的1次方······

例如:

1010转换成十进制数:第0位:0*2^0=0

第1位:1*2^1=2第2位:0*2^2=0第3位:1*2^3=8所以1010转换成十进制数,结果:0+2+0+8=10.

二进制转八进制:

利用421,从后往前每三位一组,缺位补0,然后按十进制方法进行转换。

例如:

(11001)

001=1

011=3

然后将结果按从下往上顶顺序书写:31.

二进制转十六进制:

二进制和十六进制的互相转换比较重要。不过这二者的转换却不用计算;利用8421,对于任意一个4位的二进制数,都可以很快算出它对应的10进制值。

例如:

1111=8+4+2+1=15

又因为十六进制数:10~15用大写字母A~F表示,所以15为F.

八进制转二进制:

利用421;从后往前每三位一组,缺位处用0填补,然后按十进制方法进行转化;

例如:

1—>001

3-011

然后我们将结果按从下往上的顺序书写就是:11001,那么这个11001就是八进制31的二进制形式。

八进制转十进制:

八进制就是逢8进1,八进制数采用

0~7这八数来表达一个数;八进制数第0位的权值为8的0次方,第1位权值为8的1次方,第2位权值为8的2次方……

例如:

1507转换成十进制数:第0位:7*8^0=7第1位:0*8^1=0

第2位:5*8^2=320

第3位:1*8^3=512

所以换算成十进制:7+0+320+512=839

.八进制转十六进制:

八进制转换成十六进制:有两种方法:一种是先将八进制转换成二进制,在将二进制转换成十六进制。另一种方法是将八进制转换成十进制,在将十进制转换成十六进制。

十六进制转二进制:

上面已经提到二进制转换成十六进制的方法,记住8421,每一位的权值,所以十六进制转成二进制就是一段四位分别转成二进制。

例如:F1111

,D1101,A1010,50101.

十六进制转八进制:

十六进制转八进制也不能直接转换,需要将十六进制转换成十进制或者二进制,才能由十进制或者二进制转换成八进制。

十六进制转十进制:

16进制就是逢16进1,但我们只有0~9这十个数字,所以我们用A,B,C,D,E,F这六个字母来分别表示10,11,12,13,14,15。

十六进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方······

所以,在第N(N从0开始)位上,如果是数

X

(X

大于等于0,并且X小于等于

15,即:F)表示的大小为

X

*

16的N次方。

例如:

2AF5

第0位:5*16^0=5第1位:F*16^1=240

第2位:A*16^3=2560

第3位:2*16^4=8192

所以转换

成十进制数为:10997.三、附:源代码#include<stdio.h>#include<stdlib.h>#include<string.h>list2();intANY_ten(intx,intnum){ inti,j=0; ints=0; for(i=1;num!=0;i*=x) { if(num%10>(x-1)) { j=1; break; } else { s+=(num%10)*i; num=num/10; } } if(j==1) printf("原数据出错!请重新输入:\n"); else printf("转换为十进制:%d\n\n",s); returns;}voidten_ANY(intnum,inty){ inti; intarr[30]; for(i=0;;i++) { arr[i]=num%y; num=num/y; if(num==0) { break; } } printf("转换为%d进制:",y); for(;i>=0;i--) { switch(arr[i]) { case10:printf("A");break; case11:printf("B");break; case12:printf("C");break; case13:printf("D");break; case14:printf("E");break; case15:printf("F");break; case16:printf("G");break; case17:printf("H");break; case18:printf("I");break; case19:printf("J");break; default:printf("%d",arr[i]); } } printf("\n\n");}voidlist1(){ inti,a,m,num; charch[100]; FILE*f; do{ getchar(); 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&&a<9) {st:printf("\n输入要转换的数:"); scanf("%s",&ch); f=fopen("num.txt","w"); for(i=0;i<=(int)strlen(ch);i++) fputc(ch[i],f); fclose(f); } for(i=0;i<(int)strlen(ch);i++) { if((int)(ch[i])>=48&&(int)(ch[i])<=57||(ch[i])>='A'&&(int)(ch[i])<='J') continue; else printf("输入有误!请输入数字:");gotost;break; } f=fopen("num.txt","r"); fscanf(f,"%d",&num);//读出文件num.txt中权值 fclose(f); switch(a) { case0:list2();break;/*返回上一层*/ case1:ten_ANY(num,2);break;/*十进制转二进制*/ case2:ten_ANY(num,8);break;/*十进制转八进制*/ case3:ten_ANY(num,16);break;/*十进制转十六进制*/ case4:ANY_ten(2,num);break;/*二进制转十进制*/ case5:ANY_ten(8,num);break;/*八进制转十进制*/ case6:ANY_ten(16,num);break;/*十六进制转十进制*/ case7:m=ANY_ten(2,num);ten_ANY(m,8);break;/*二进制转八进制*/ case8:m=ANY_ten(2,num);ten_ANY(m,16);break;/*二进制转十六进制*/ default:printf("您的输入有误,请重新选择!\n");gotoloop;break; } getchar(); }while(a>0);}voidANY_ch(){ inta,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) { case1:printf("转换的目标进制数为:"); scanf("%d",&y); ten_ANY(m,y);break; case2:printf("\t转换结束!");break; default:printf("选择有误!请重选:");gotoloop2;break; } getchar();}intlist2(){ intb; do{ printf("************************************************\n"); printf("***二十进制内任意进制转换!***\n"); printf("************************************************\n"); printf("\t\t按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) { case1:list1();break;/*常见进制转换菜单*/ case2:ANY_ch();break;/*任意进制数之间转换*/ case0:exit(0);break; default:printf("\n您的输入有误,请重新选择!\n\n");gotoloop1;break; } getchar(); }while(b>0); return0;}voidmain(){ list2();}

测试结果按Enter键进入主菜单,如图3.1所示:图3.1十进制转换为二进制选择1,进入常见进制转换菜单,如图3.2所示:图3.2十进制转换为二进制选择1,十进制转换为二进制函数,输入12,结果如图3.3所示:图3.3十进制转换为二进制选择2,十进制转换为八进制函数,输入20,结果如图3.4所示:图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,二进制转换为十六进制函数,输入11111,结果如图3.11所示:图3.11二进制转换为十六进制选择0,返回主菜单如图3.12所示:图3.12返回主菜单选择2,自定义进制转换,输入进制数为2,数字为110101,选择1.是,结果如图3.13所示:图3.13自定义进制转换参考文献[1]谭浩强.C程序设计(第三版).北京:清华大学出版社.2005:34[2]李建忠.大学计算机基础.西安:西北大学出版社.2005:104[3]谭浩强.C程序设计题解与上机指导(第三版).北京:清华大学出版社.2005:68[4]罗建军、朱丹军、顾刚.C++程序设计教程(第2版).北京:高等教育出版社.2007:76

四、小结本次课程设计,完成的数制转换器系统实现了二进制、八进制、十六进制和十进制之间相互转换等功能,同时也实现了二十进制内任意进制之间的转化功能。并且加入了对输入数字的判定是否符合要求,对输入不合法字符检验并提示的功能。当输入的数字太大而无法实现转化时,主要是因为数字超过了定义的长度,无法实现两个数制转化。除此之外本程序不能实现小数的转化等问题。我希望以后可以实现上述两个问题,首先是改进程序,使其能实现小数的转化,其次改进定义的长度问题,使其能够转化更大的数。这次课程设计使我对C语言知识进行了系统的、有条理的复习,对许多知识点都加强了记忆。通过本次数据结构课程设计,我进一步学习了用C语言设计代码的思想,并把它运用到实际操作中。C语言是工具,数据结构是思想,把两者结合起来,熟练运用,才能设计出符合要求的算法。设计过程中,我也遇到很多麻烦,并通过翻阅资料、询问同学来解决。在这个过程中,我知道了与他人合作的重要性,学会了与他人合作。以后,我会更认真的学习C语言,不断提高自己的编程水平。致谢在这次C语言课程设计中,我的老师和同学给了我及大的帮助。特别是我的指导老师熊茜老师,还有我的C语言任课老师金尚柱老师。在此,我对他们表示感谢!感谢他们在我面对困难时给了我帮助和支持。也感谢那些给我帮助的所有同学!基于C8051F单片机直流电动机反馈控制系统的设计与研究基于单片机的嵌入式Web服务器的研究MOTOROLA单片机MC68HC(8)05PV8/A内嵌EEPROM的工艺和制程方法及对良率的影响研究基于模糊控制的电阻钎焊单片机温度控制系统的研制基于MCS-51系列单片机的通用控制模块的研究基于单片机实现的供暖系统最佳启停自校正(STR)调节器单片机控制的二级倒立摆系统的研究基于增强型51系列单片机的TCP/IP协议栈的实现基于单片机的蓄电池自动监测系统基于32位嵌入式单片机系统的图像采集与处理技术的研究基于单片机的作物营养诊断专家系统的研究基于单片机的交流伺服电机运动控制系统研究与开发基于单片机的泵管内壁硬度测试仪的研制基于单片机的自动找平控制系统研究基于C8051F040单片机的嵌入式系统开发基于单片机的液压动力系统状态监测仪开发模糊Smith智能控制方法的研究及其单片机实现一种基于单片机的轴快流CO〈,2〉激光器的手持控制面板的研制基于双单片机冲床数控系统的研究基于CYGNAL单片机的在线间歇式浊度仪的研制基于单片机的喷油泵试验台控制器的研制基于单片机的软起动器的研究和设计基于单片机控制的高速快走丝电火花线切割机床短循环走丝方式研究基于单片机的机电产品控制系统开发基于PIC单片机的智能手机充电器基于单片机的实时内核设计及其应用研究基于单片机的远程抄表系统的设计与研究基于单片机的烟气二氧化硫浓度检测仪的研制基于微型光谱仪的单片机系统单片机系统软件构件开发的技术研究基于单片机的液体点滴速度自动检测仪的研制基于单片机系统的多功能温度测量仪的研制基于PIC单片机的电能采集终端的设计和应用基于单片机的光纤光栅解调仪的研制气压式线性摩擦焊机单片机控制系统的研制基于单片机的数字磁通门传感器基于单片机的旋转变压器-数字转换器的研究基于单片机的光纤Bragg光栅解调系统的研究单片机控制的便携式多功能乳腺治疗仪的研制基于C8051F020单片机的多生理信号检测仪基于单片机的电机运动控制系统设计Pico专用单片机核的可测性设计研究基于MCS-51单片机的热量计基于双单片机的智能遥测微型气象站MCS-51单片机构建机器人的实践研究基于单片机的轮轨力检测基于单片机的GPS定位仪的研究与实现基于单片机的电液伺服控制系统用于单片机系统的MMC卡文件系统研制基于单片机的时控和计数系统性能优化的研究基于单片机和CPLD的粗光栅位移测量系统研究单片机控制的后备式方波UPS提升高职学生单片机应用能力的探究基于单片机控制的自动低频减载装置研究基于单片机控制的水下焊接电源的研究基于单片机的多通道数据采集系统基于uPSD3234单片机的氚表面污染测量仪的研制基于单片机的红外测油仪的研究96系列单片机仿真器研究与设计基于单片机的单晶金刚石刀具刃磨设备的数控改造基于单片机的温度智能控制系统的设计与实现基于MSP430单片机的电梯门机控制器的研制基于单片机的气体测漏仪的研究基于三菱M16C/6N系列单片机的CAN/USB协议转换器基于单片机和DSP的变压器油色谱在线监测技术研究基于单片机的膛壁温度报警系统设计基于AVR单片机的低压无功补偿控制器的设计基于单片机船舶电力推进电机监测系统基于单片机网络的振动信号的采集系统基于单片机的大容量数据存储技术的应用研究基于单片机的叠图机研究与教学方法实践基于单片机嵌入式Web服务器技术的研究及实现基于AT89S52单片机的通用数据采集系统基于单片机的多道脉冲幅度分析仪研究机器人旋转电弧传感角焊缝跟踪单片机控制系统基于单片机的控制系统在PLC虚拟教学实验中的应用研究基于单片机系统的网络通信研究与应用基于PIC16F877单片机的莫尔斯码自动译码系统设计与研究基于单片机的模糊控制器在工业电阻炉上的应用研究基于双单片机冲床数控系统的研究与开发基于Cygnal单片机的μC/OS-Ⅱ的研究基于单片机的一体化智能差示扫描量热仪系统研究基于TCP/IP协议的单片机与Int

温馨提示

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

评论

0/150

提交评论