编程实现各进制转换

编程实现各进制转换
编程实现各进制转换

#include

#include

#include

#include

#define N 40

int Judge(char r,char number[]);

int Poro(char number[],int flag);

double Allgoten(char number[],int r);

int Div(float num);

int TenFgo(double c,int r,int ax[]);

int TenIgo(long d,int r,int a[]);

void PNrint(int x);

void Print(int flag,int a[],int ax[],int an,int b);

int main()

{

int q, w;

char op,number[N],r;

int rnq,rnh,ret,a[N],ax[N],counti,countf,flag=1;

long d,sumi;

double num,n,c,sumf;

printf( "*****************************\n" );

printf( "1.五进制转化\n" );

printf( "2.八进制转化\n" );

printf( "3.十进制转化\n" );

printf( "4.十二进制转化\n" );

printf( "5.十六进制转化\n" );

printf( "0.退出\n");

printf( "*****************************\n" );

printf( "请输入功能号:\n");

scanf("%d",&q);

if (q > 5 || q < 0)

{

printf("输入错误,请重新输入:\n");

scanf("%d",&q);

}

else if (q == 1)

{

printf("*****************************\n" );

printf( "1.五进制转八进制\n");

printf( "2.五进制转十进制\n");

printf( "3.五进制转十二进制\n");

printf( "4.五进制转十六进制\n");

printf( "0.返回上一级\n");

printf("*****************************\n");

printf( "请输入功能号:\n");

scanf("%d",&w);

while (w > 4 || w < 0)

{

printf("输入错误,请重新输入:\n");

scanf("%d",&w);

}

}

else if (q == 2)

{

printf("*****************************\n" );

printf( "1.八进制转五进制\n");

printf( "2.八进制转十进制\n" );

printf( "3.八进制转十二进制\n" );

printf( "4.八进制转十六进制\n");

printf( "0.返回上一级\n" );

printf("*****************************\n" );

printf( "请输入功能号:\n");

scanf("%d",&w);

while (w > 4 || w < 0)

{

printf("输入错误,请重新输入:\n");

scanf("%d",&w);

}

}

else if (q == 3)

{

printf("*****************************\n" );

printf( "1.十进制转五进制\n" );

printf( "2.十进制转八进制\n" );

printf( "3.十进制转十二进制\n");

printf( "4.十进制转十六进制\n");

printf( "0.返回上一级\n");

printf( "请输入功能号:\n");

scanf("%d",&w);

while (w > 4 || w < 0)

{

printf("输入错误,请重新输入:\n");

scanf("%d",&w);

}

}

else if (q == 4)

{

printf("*****************************\n" );

printf( "1.十二进制转五进制\n" );

printf( "2.十二进制转八进制\n" );

printf( "3.十二进制转十进制\n" );

printf( "4.十二进制转十六进制\n");

printf( "0.返回上一级\n");

printf("*****************************\n" );

printf( "请输入功能号:\n" );

scanf("%d",&w);

while (w > 4 || w < 0)

{

printf("输入错误,请重新输入:\n");

scanf("%d",&w);

}

}

else if (q == 5)

{

printf("*****************************\n" );

printf( "1.十六进制转五进制\n" );

printf( "2.十六进制转八进制\n" );

printf( "3.十六进制转十进制\n" );

printf( "4.十六进制转十二进制\n");

printf( "0.返回上一级\n" );

printf( "请输入功能号:\n" );

scanf("%d",&w);

while (w > 4 || w < 0)

{

printf("输入错误,请重新输入:\n");

scanf("%d",&w);

}

}

if(q==1&&w==1)

{r='5',rnq=5,rnh=8;}

else if(q==1&&w==2)

{r='5',rnq=5,rnh=10;}

else if(q==1&&w==3)

{r='5',rnq=5,rnh=12;}

else if(q==1&&w==4)

{r='5',rnq=5,rnh=16;}

else if(q==2&&w==1)

{r='8',rnq=8,rnh=5;}

else if(q==2&&w==2)

{r='8',rnq=8,rnh=10;}

else if(q==2&&w==3)

{r='8',rnq=8,rnh=12;}

else if(q==2&&w==4)

{r='8',rnq=8,rnh=16;}

else if(q==3&&w==1)

{r='A',rnq=10,rnh=5;}

else if(q==3&&w==2)

{r='A',rnq=10,rnh=8;}

else if(q==3&&w==3)

{r='A',rnq=10,rnh=12;}

else if(q==3&&w==4)

{r='A',rnq=10,rnh=16;}

else if(q==4&&w==1)

{r='C',rnq=12,rnh=5;}

else if(q==4&&w==2)

{r='C',rnq=12,rnh=8;}

else if(q==4&&w==3)

{r='C',rnq=12,rnh=10;}

else if(q==4&&w==4)

{r='C',rnq=12,rnh=16;}

else if(q==5&&w==1)

{r='G',rnq=16,rnh=5;}

else if(q==5&&w==2)

{r='G',rnq=16,rnh=8;}

else if(q==5&&w==3)

{r='G',rnq=16,rnh=10;}

else if(q==5&&w==4)

{r='G',rnq=16,rnh=12;}

else

printf("Error!\n");

printf("Please input the number :");

ret=Judge(r,number);

while(ret<0)

{

while(getchar()!='\n');

printf("Error!Please input the number again:");

ret=Judge(r,number);

}

flag=Poro(number,flag);

n=Allgoten(number,rnq);

d=Div(n);

c=n-d;

counti=TenIgo(d,rnh,a);

countf=TenFgo(c,rnh,ax);

Print(flag,a,ax,counti,countf);

}

int Div(float num)

{

int d;

d=(int)num;

return d;

}

int TenFgo(double c,int r,int ax[])

{

double x=c*r;

int i,a,count=0;

for(i=0; x>1e-6; i++)

{

x=c*r;

a=(int)(x);

c=x-a;

ax[i]=a;

count++;

}

return count;

}

int TenIgo(long d,int r,int a[])

{

int i,an,count=0;

for(i=0; d>=1; i++)

{

an=d%r;

d=d/r;

a[i]=an;

count++;

}

return count;

}

double Allgoten(char number[],int r) {

int a=0,nu[N],i;

double x,suml=0,sumf=0;

for(i=0; number[i]!='\0'; i++)

{

if(number[i]=='0')

{

nu[i]=0;

continue;

}

if(number[i]=='1')

{

nu[i]=1;

continue;

}

if(number[i]=='2')

{

nu[i]=2;

continue;

}

if(number[i]=='3')

{

nu[i]=3;

continue;

}

if(number[i]=='4')

{

nu[i]=4;

continue;

}

if(number[i]=='5')

{

nu[i]=5;

continue;

}

if(number[i]=='6')

{

nu[i]=6;

continue;

}

if(number[i]=='7')

{

nu[i]=7;

continue;

}

if(number[i]=='8')

{

nu[i]=8;

continue;

}

if(number[i]=='9')

{

nu[i]=9;

continue;

}

if(number[i]=='A'||number[i]=='a') {

nu[i]=10;

continue;

}

if(number[i]=='B'||number[i]=='b') {

nu[i]=11;

continue;

}

if(number[i]=='C'||number[i]=='c')

{

nu[i]=12;

continue;

}

if(number[i]=='D'||number[i]=='d')

{

nu[i]=13;

continue;

}

if(number[i]=='E'||number[i]=='e')

{

nu[i]=14;

continue;

}

if(number[i]=='F'||number[i]=='f')

{

nu[i]=15;

continue;

}

}

for(i=0; number[i]!='.'&&number[i]!='\0'; i++)

{

a++;

}

for(i=0; number[i]!='.'&&number[i]!='\0'; i++)

{

suml+=nu[i]*pow((double)r,(double)a-1-i);

}

if(number[a]=='\0')

{

sumf=0;

}

else

{

for(i=a+1; number[i]!='\0'; i++)

{

sumf+=nu[i]/pow((double) r,(double)(i-a));

}

}

x=suml+sumf;

return x;

}

int Judge(char r,char number[]) {

int i;

scanf("%s",number);

for(i=0; number[i]!='\0'; i++)

{

if(number[i]>=r)

return -1;

}

return 1;

}

int Poro(char number[],int flag) {

if(number[0]=='-')

flag=0;

return flag;

}

void PNrint(int x)

{

if(x==10)

{

printf("A");

}

else if(x==11)

{

printf("B");

}

else if(x==12)

{

printf("C");

}

else if(x==13)

{

printf("D");

}

else if(x==14)

{

printf("E");

}

else if(x==15)

{

printf("F");

}

else

{

printf("%d",x);

}

}

void Print(int flag,int a[],int ax[],int an,int b) {

int i;

if(flag==0)

{

printf("-");

}

for(i=an-1; i>=0; i--)

{

PNrint(a[i]);

}

if(b!=0)

{

printf(".");

}

for(i=0; i

{

PNrint(ax[i]);

}

printf("\n");

}

各种进制之间转换方法

各进制转换方法(转载) 一、计算机中数的表示: 首先,要搞清楚下面3个概念 ?数码:表示数的符号 ?基:数码的个数 ?权:每一位所具有的值 请看例子: 数制十进制二进制八进制十六进制 数码0~9 0~1 0~7 0~15 基10 2 8 16 权10o,101,102,…2o,21,22,…8o,81,82,…16o,161,162,…特点逢十进一逢二进一逢八进一逢十六进一 十进制4956= 4*103+9*102 +5*101+6*10o 二进制1011=1*23+0*22 +1*21+1*2o 八进制4275=4*83+2*82 +7*81+5*8o 十六进制81AE=8*163+1*162 +10*161+14*16o

二、各种进制的转换问题 1.二、八、十六进制转换成十进制 2.十进制转换成二、八、十六进制 3.二进制、八进制的互相转换 4.二进制、十六进制的互相转换 1、二、八、十六进制转换成十进制 方法:数码乘以相应权之和 2、十进制转换成二、八、十六进制 方法:连续除以基,直至商为0,从低到高记录余数

3、二进制、八进制的互相转换 方法: ?二进制转换成八进制:从右向左,每3位一组(不足3位左补0),转换成八进制 ?八进制转换成二进制:用3位二进制数代替每一位八进制数 例(1101001)2=(001,101,001)2=(151)8 例 (246)8=(010,100,110)2=(10100110)2 4、二进制、十六进制的互相转换 方法: ?二进制转换成十六进制:从右向左,每4位一组(不足4位左补0),转换成十六进制 ?十六进制转换成二进制:用4位二进制数代替每一位十六进制数 例(11010101111101)2=(0011,0101,0111,1101)2=(357D)16 例 (4B9E)16=(0100,1011,1001,1110)2=(100101110011110)2 三、各种进制数的运算

栈的课程设计完整版

唐山学院 数据结构课程设计 题目栈的基本操作及其应用 系 (部) 计算机科学与技术系 班级 16计本(2) 姓名周登旺 学号 4164001232 指导教师郭琳虹 2018 年 1 月8日至2018 年1 月12日共1 周

数据结构课程设计任务书

课程设计成绩评定表

1.引言 在计算机系统中,栈则是一个具有以上属性的动态内存区域。程序可以将数据压入栈中,也可以将数据从栈顶弹出。在i386机器中,栈顶由称为esp的寄存器进行定位。压栈的操作使得栈顶的地址减小,弹出的操作使得栈顶的地址增大。首先系统或者数据结构栈中数据内容的读取与插入(压入push和弹出pop)是两回事!插入是增加数据,弹出是删除数据,这些操作只能从栈顶即最低地址作为约束的接口界面入手操作,但读取栈中的数据是随便的没有接口约束之说。很多人都误解这个理念从而对栈产生困惑。而系统栈在计算机体系结构中又起到一个跨部件交互的媒介区域的作用即cpu与内存的交流通道,cpu只从系统给我们自己编写的应用程序所规定的栈入口线性地读取执行指令,用一个形象的词来形容它就是pipeline(管道线、流水线)。cpu内部交互具体参见EU与BIU的概念介绍。栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。 栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。插入一般称为进栈(PUSH),删除则称为退栈(POP)。栈也称为后进先出表。栈可以用来在函数调用的时候存储断点,做递归时要用到栈! 一、基本概念 栈(stack)在计算机科学中是限定仅在表尾进行插入或删除操作的线形表。 栈是一种数据结构,是只能在某一端插入和删除的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。 栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。插入一般称为进栈(PUSH),删除则称为退栈(POP)。栈也称为后进先出表(LIFO表),栈可以用来在函数调用的时候存储断点,做递归时要用到栈! 本课程设计涉及的主要内容是对栈进行基本操作和实现栈的一些实际应用,在课程设计中,系统开发平台为Windows 7。程序设计语言使用Visual c++。程序的运行平台为Windows 2000/XP/7/10。 /* 2问题分析 本次课程设计主要介绍栈的概念和栈的基本操作和栈的两种存储结构及其应用。其中栈的基本操作主要包括置空栈,判断栈空,进栈,出栈,取栈顶元素。栈的两种存储

十进制和二进制相互转化程序设计书

摘要 VC++是微软公司开发的一个集成开发环境(IDE),就是使用 c++的一个开发平台。本系统就是根据现阶段的需要,通过VC++开发一个二进制与十进制相互转换系统来实现对二进制向十进制转换、十进制向二进制转换。整个系统从符合操作简便、界面友好、灵活、实用、安全的要求出发,完成了对二进制与十进制互换的过程,包括转换类型、二进制位数、输入是否有误,以及简介信息,数字信息和位数信息等常用工作。 关键词:二进制,十进制,转换,VC++

目录 1 需求分析 (1) 1.1 数据需求分析 (1) 1.2 功能需求分析 (2) 2 系统总体设计 (2) 2.1 模块划分 (2) 2.2 系统模块结构图 (3) 3 系统详细设计 (3) 3.1 程序流程图 (3) 3.2 中文DOS界面 (5) 3.3 程序代码清单 (5) 4 模块划分系统连编与运行结果 (7) 4.1 程序运行起始界面 (7) 4.2 输入一个十进制的正整数,转化为二进制 (8) 4.3 输入一个十进制的负数,转化为二进制 (8) 4.4 输入一个十进制的负数,转化为二进制 (9) 4.5 输入一个十进制小数,转化为二进制时,提示为 (9) 总结 (10) 参考文献 (10)

1需求分析 随着技术的不断提高,进制转换向着简单化,规模化发展,而对于只能识别二进制0和1码的计算机来说,如何翻译成人类可以认识和编译的语言,和安全加密等给信息管理有关的信息随之增加。在这种情况下单靠人工来处理这些信息不但显得大不从心,而且极容易出错。因此,需要开发二进制与十进制互换系统,该系统可以实现由计算机代替人工执行一系列复杂而繁琐的操作,使得办公人员可以轻松快捷的完成进制转换的任务。 总结系统需求分为大体分为5个模块: 首先第一个需要数据的信息输入,即输入数据的基本信息包括输入的进制选项,所输入的二进制位数,所输入的二进制数,所输入的十进制数和判断是否全1或全0五个模块。 第二个需求是判断数据进制选项信息,在信息和科技不断进步的今天,数据及时准确的更新成了任何一个系统的首要任务,本系统应时代所需设计了数制信息功能,包括对包括数据的进制,二进制数据的位数,十进制数据,进行进制转换计算。 第三个需求是所输入的二进制数据,数据的运行使用主要是解决向十进制转换 第四个需求是所输入的十进制数据,数据运行使用主要是解决向二进制转换。 第五个需求是打印退出,在对系统进行操作后,退出系统。 1.1 数据需求分析 本系统的主要数据进制转换的实现。转换包括:二进制数向十进制数转换,十进制数向二进制数转换,判断是否为全0或全1,是否继续执行等。

各种进制之间转换方法

各进制转换方法(转载)一、计算机中数的表示: 首先,要搞清楚下面3个概念 ?数码:表示数的符号 ? 基:数码的个数 ?权:每一位所具有的值

、各种进制的转换问题 1. 二、八、十六进制转换成十进制 2. 十进制转换成二、八、十六进制 3. 二进制、八进制的互相转换 4. 二进制、十六进制的互相转换 1、二、八、十六进制转换成十进制 方法:数码乘以相应权之和 例(HloJ-l/25+lx24+l/23+0/22+ h2:+h20 -(59)10 例(136)8=lx82+3x8l+6x8°=(94)10 例(1F2^)1S=1X163+15X16S +2\16] + 10/16° = (7978)10 2、十进制转换成二、八、十六进制 方法:连续除以基,直至商为0,从低到高记录余数

例把十进制数159转换成八进制数 8| 19 8辽 (159)IO =(237)8 例把十进制数59转换成二进制数 (59)IO =(111O11)2 2 余余余余余余 8 159

例把十进制数459转换成十六进制数 u | 1| C| B (459)io=(1CB)ib ' 3、二进制、八进制的互相转换 方法: *二进制转换成八进制:从右向左,每3位一组(不足3位左补0),转换成八进制*八进制转换成二进制:用3位二进制数代替每一位八进制数 例(1101001)2=(001,101,001)2=(151)8 例(246)8=(010,100,110)2=(10100110)2 4、二进制、十六进制的互相转换 方法: 二进制转换成十六进制:从右向左,每4位一组(不足4位左补0),转换成十六进制 *十六进制转换成二进制:用4位二进制数代替每一位十六进制数 例(11010101111101)2=(0011,0101,0111,1101)2=(357D)16 例(4B9E)16=(0100,1011,1001,1110)2=(100101110011110)2 三、各种进制数的运算 方法:逢满进具体计算与平时十进制的计算类似,以十六进制为例: 加法:

数据结构课程设计 数制转换 数组和栈

中北大学 数据结构与算法课程设计 说明书 学院、系:软件学院 专业:软件工程 学生姓名:xxx 学号:xxxx 设计题目:数制转换问题 起迄日期: 2013年12月9日- 2013年12月20日指导教师:xxx 2013 年12月 20 日

1、需求分析 任意给定一个M进制的数x ,请实现如下要求 1) 求出此数x的10进制值(用MD表示) 2) 实现对x向任意的一个非M进制的数的转换。 3) 用两种方法实现上述要求(用栈解决和用数组解决)。 2、概要设计 流程图 数组的流程图:

栈的流程图:

算法思想 1、用数组实现该问题: DtoM()函数和MtoD()函数是实现该问题的主要函数。DtoM()函数是实现十进制转换为其它进制的函数,它是将输入的十进制数x取首先对需要转换的进制M取余,然后再对其取整,接着通过递归调用DtoM()函数依次将得到的整数部分依次先取余后取整,并将所得的余数依次存入一个数组中,然后逆向取出数组中的元素,即得到转换后的结果。而MtoD()函数则是实现其他进制M转换为十进制,并将其转换为非M进制的数。M进制转十进制则是从该M进制数的最后一位开始算,依次列为第0、1、2…n位并分别乘以M的0、1、2…n次方,将得到的次方相加便得到对应的十进制数,再调用DtoM()函数将其转换为非M进制的数。 2、用栈实现该问题: 同样是利用DtoM()和MtoD()两个函数实现。两个函数的思想同利用数组实现时相同。只是栈具有后进先出的性质,故其用Pop()取数较数组的逆向取数方便些。 模块划分 1、用数组实现该问题: ⑴i,j,y,n,s,m,r,reminder,x是定义的全局变量,初始值都为0; ⑵DtoM(int g,int h)是实现十进制数转换为M进制数的函数; ⑶MtoD()是实现M(仅指二进制数和八进制数)进制数转换为十进制数的函数,并 在其中调用D2M(int g,int h)实现向非M进制数的转换; ⑷HtoD(int f)是实现十六进制数转换为十进制数的函数,并在其中调用D2M(int g,int h)实现向非十六进制数的转换; ⑸void main()是主函数,功能是给出测试的数据,并在特定条件下调用D2M()

计算机考试中各种进制转换的计算方法

二进制数第0位的权值是2的0次方,第1位的权值是2的1次方…… 所以,设有一个二进制数:0110 0100,转换为10进制为: 下面是竖式: 0110 0100 换算成十进制 第0位 0 * 20 = 0 第1位 0 * 21 = 0 第2位 1 * 22 = 4 第3位 0 * 23 = 0 第4位 0 * 24 = 0 第5位 1 * 25 = 32 第6位 1 * 26 = 64 第7位 0 * 27 = 0 + --------------------------- 100 用横式计算为: 0 * 20 + 0 * 21 + 1 * 22 + 1 * 23 + 0 * 24 + 1 * 25 + 1 * 26 + 0 * 27 = 100 0乘以多少都是0,所以我们也可以直接跳过值为0的位: 1 * 2 2 + 1 * 2 3 + 1 * 25 + 1 * 26 = 100 2.2 八进制数转换为十进制数 八进制就是逢8进1。 八进制数采用 0~7这八数来表达一个数。

八进制数第0位的权值为8的0次方,第1位权值为8的1次方,第2位权值为8的2次方…… 所以,设有一个八进制数:1507,转换为十进制为: 用竖式表示: 1507换算成十进制。 第0位 7 * 80 = 7 第1位 0 * 81 = 0 第2位 5 * 82 = 320 第3位 1 * 83 = 512 + -------------------------- 839 同样,我们也可以用横式直接计算: 7 * 80 + 0 * 81 + 5 * 82 + 1 * 83 = 839 结果是,八进制数 1507 转换成十进制数为 839 2AF5换算成10进制: 第0位: 5 * 160 = 5 第1位: F * 161 = 240 第2位: A * 162 = 2560 第3位: 2 * 163 = 8192 +

VB程序设计-进制转换研究

VB程序设计-进制转换研究 (作者:草原飞狼 2014年5月29日) 声明:仅供学习与交流使用,高手请飘过,谢谢!所有代码都是个人亲自编写并调试成功。 布局 算法示意图(1)

算法示意图(2) 运行界面(1)源代码如下: Private Sub Command1_Click()

Rem 二进制转十进制,普通方法 Dim d As String 'd表示text1中的某一个具体的字符 Dim i As Integer 'i表示循环变量 Dim str As String 'str表示text1中去掉空格后的字符串 Dim dd As Integer 'dd表示一个十进制数 Dim len_str As Integer '表示text1中去掉左右空格后文本的长度 str = Trim(Text1.Text) len_str = Len(str) Rem 以下是二进制输入合法性的判断 For i = 1 To len_str d = Val(Mid(str, i, 1)) If d > 1 Then MsgBox "请重新输入一个合法的二进制数!", vbOKOnly + vbExclamation, "错误提示" Text1.Text = "1010" Text1.SetFocus Exit Sub End If Next i Rem 以下是二进制转十进制的算法 dd = 0 For i = 1 To len_str dd = dd + Val(Mid(str, i, 1)) * 2 ^ (len_str - i) '核心算法,注意理解 Next i Text3.Text = dd End Sub Private Sub Command2_Click() Rem 清空 Text1.Text = "" Text2.Text = "" Text3.Text = "" Text4.Text = "" End Sub Private Sub Command3_Click() Rem 退出 Unload Me End Sub Private Sub Command4_Click() Rem 十进制转二进制,普通方法 Dim str As String '用于连接生成的余数 Dim dd As Integer '用于生成当前的商 dd = Val(Text2.Text)

二进制,八进制十进制十六进制之间数据转换

二进制,八进制十进制十六进制之间数据转换 十进制转二进制(整数及小数部分): 1、把该十进制数,用二因式分解,取余。 以235为例,转为二进制 235除以2得117,余1 117除以2得58,余1 58除以2得29,余0 29除以2得14,余1 14除以2得7,余0 7除以2得3,余1 3除以2得1,余1 从得到的1开始写起,余数倒排,加在它后面,就可得11101011。 2、把十进制中的小数部份,转为二进制。 把该小数不断乘2,取整,直至没有小数为止,注意不是所有小数都能转为二进制! 以0.75为例, 0.75剩以2得1.50,取整数1 0.50剩以2得1,取整数1,顺序取数就可得0.11。 1、二进制数、八进制数、十六进制数转十进制数 有一个公式:二进制数、八进制数、十六进制数的各位数字分别乖以各自的基数的(N-1)次方,其和相加之和便是相应的十进制数。个位,N=1;十位,N=2...举例:110B=1*2的2次方+1*2的1次方+0*2的0次方=0+4+2+0=6D 110Q=1*8的2次方+1*8的1次方+0*8的0次方=64+8+0=72D 110H=1*16的2次方+1*16的1次方+0*16的0次方=256+16+0=272D 2、十进制数转二进制数、八进制数、十六进制数 方法是相同的,即整数部分用除基取余的算法,小数部分用乘基取整的方法,然后将整数与小数部分拼接成一个数作为转换的最后结果。 例:见四级指导16页。 3、二进制数转换成其它数据类型

3-1二进制转八进制: 从小数点位置开始,整数部分向左,小数部分向右,每三位二进制为一组用一位八进制的数字来表示,不足三位的用0补足, 就是一个相应八进制数的表示。 010110.001100B=26.14Q 八进制转二进制反之则可。 3-2二进制转十进制: 见1 3-3二进制转十六进制: 从小数点位置开始,整数部分向左,小数部分向右,每四位二进制为一组用一位十六进制的数字来表示, 不足四位的用0补足,就是一个相应十六进制数的表示。 00100110.00010100B=26.14H 十进制转各进制 要将十进制转为各进制的方式,只需除以各进制的权值,取得其余数,第一次的余数当个位数,第二次余数当十位数,其余依此类推,直到被除数小于权值,最后的被除数当最高位数。 一、十进制转二进制 如:55转为二进制 2|55 27――1个位 13――1第二位 6――1第三位 3――0第四位 1――1第五位 最后被除数1为第七位,即得110111 二、十进制转八进制

用栈实现把十进制转化为八进制

#include #include #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 typedef struct { int *base; int *top; int stacksize; }sqstack; int InitStack(sqstack &s) { s.base=(int *)malloc(STACK_INIT_SIZE*sizeof(int)); if(!s.base) exit(-1); s.top=s.base; s.stacksize=STACK_INIT_SIZE; return 1; } int Pop(sqstack &s,int &e) { if(s.top==s.base) return 0; e=*--s.top; return 1; } int Push(sqstack &s,int e) { if(s.top-s.base==s.stacksize) { s.base=(int *)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(int)); if(!s.base) exit(-1); s.top=s.base+s.stacksize; s.stacksize+=STACKINCREMENT; } *s.top++=e; return 1; } int StackEmpty(sqstack s) { if(s.top==s.base) return 0; else return 1; }

数据结构实验报告 栈进制转换

数据结构试验报告栈的应用——进制转换程序

3.出栈程序 int Pop(Stack *s , int *e) { if(s->top == s->base) { return ERROR; } *e = * -- s->top; return OK; } 4.主函数与进制转化 void main() { int N; int a; int e; Stack s; InitStack(&s); Pop(&s , &e); Push(&s ,&e); InitStack(&s); printf("请输入十进制数:"); scanf("%d",&N); printf("要将N转化为几进制?"); scanf("%d",&a); while(N) { e=N%a; Push( &s , &e ); N = N / a ; } while(s.base!=s.top) { Pop(&s ,&e); printf("%d",e); } free(s.base); system("pause"); } 3.源程序 #include #include #include

#define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 #define OK 1 #define ERROR 0 #define OVERFLOW -1 #define TRUE 1 #define FALSE -1 typedefstruct{ int *base; int *top; intstacksize; }Stack; intInitStack(Stack *s) { s->base=(int *)malloc(STACK_INIT_SIZE * sizeof(int)); if(!s->base) { exit(OVERFLOW); } s->top=s->base; s->stacksize=STACK_INIT_SIZE; return OK; } int Push(Stack *s , int *e) { if(s->top - s->base >= STACK_INIT_SIZE) { s->base=(int *)realloc(s->base , (s->stacksize + STACKINCREMENT) * sizeof(int) ); if(!s->base) { exit(OVERFLOW); } s->top=s->base + STACKINCREMENT; } * s->top ++ = *e; return OK; } int Pop(Stack *s , int *e)

数制转换数据结构课程设计报告

《数据结构》 课程设计报告书 题目:数制转换 系别:计算机科学与应用系学号: 学生姓名: 指导教师: 完成日期:2013—6—1

数制转换 1.需求分析 任意给定一个M进制的数x ,实现如下要求 1)求出此数x的10进制值(用MD表示) 2)实现对x向任意的一个非M进制的数的转换。 3)至少用两种或两种以上的方法实现上述要求(用栈解决,用数组解决,其它方法解决)。 2.概要设计 程序流程可以用以下流程图来刻画: A用数组实现 B用栈实现 3.详细设计 A.用数组实现该问题 D2M()函数和M2D()函数是实现该问题的主要函数。D2M()函数是实现十进制转换为其他进制的函数,它是将输入的十进制数x首先对需要转换的进制M取余,然后在对其取整,接着通过递归调用D2M()函数一次将得到的整数部分一次先取余后取整,并将所得的余数依次存入下一数组,然后逆向去除数组中的元素,即得到转换后的结果。而M2D()函数是实现其他进制M转换为十进制,并将其转换为非M进制。M进制转十进制则是从该M 进制数的

最后一位开始运算,依次列为第0、1、2、……..N位并分别乘以M的0、1、2、…..N次方,将得到的次方相加便得到对应的十进制数,再调用D2M()函数将其转换为非M进制的数。 B.用栈实现 栈具有后进先出的性质,具体实现方法和数组的方法有很大联系,不再过多解释。 4.调试分析 (1)构造栈的方法通过查阅书籍知道了。 (2)数组的递归调用查阅相关书籍了解了。 (3)为了让界面表达更清晰,多次调试完善了界面。 5.测试结果 下面是我的测试函数及运行结果: A.数组测试结果

各种进制之间的转换方法

各种进制之间的转换方法 ⑴二进制B转换成八进制Q:以小数点为分界线,整数部分从低位到高位,小数部分从高位到低位,每3位二进制数为一组,不足3位的,小数部分在低位补0,整数部分在高位补0,然后用1位八进制的数字来表示,采用八进制数书写的二进制数,位数减少到原来的1/3。 例:◆二进制数转换成八进制数: = 110 110 . 101 100B ↓↓ ↓ ↓ 6 6 . 5 4 = ◆八进制数转换成二进制数: 3 6 . 2 4Q ↓ ↓ ↓ ↓ 011 110 . 010 100 = ◆ 低位,每4位二进制数为一组,不足4位的,小数部分在低位补0,整数部分在高位补0,然后用1位十六进制的数字来表示,采用十六进制数书写的二进制数,位数可以减少到原来的1/4。 例:◆二进制数转换成十六进制数: .100111B = 1011 0101 1010 . 1001 1100B ↓ ↓ ↓ ↓ ↓ B 5 A . 9 C = 5A ◆十六进制数转换成二进制数: = A B . F EH ↓ ↓ ↓ ↓ 1010 1011. 1111 1110 = .1111111B 先把八进制数Q转换成二进制数B,再转换成十六进制数H。 例:◆八进制数转换成十六进制数: = 111 100 000 010 . 100 101B = .100101B = 1111 0000 0010 . 1001 0100B = F 0 2 . 9 4H = ◆十六进制数转换成八进制数: = 0001 1011 . 1110B = = 011 011 . 111B = 3 3 . 7Q = ⑷二进制数B转换成十进制数D:利用二进制数B按权展开成多项式和的表达式,取基数为2,逐项相加,其和就是相应的十进制数。

进制转换程序设计

课程设计 题目不同数制的数据相互转换程序的 设计 学院计算机科学与技术 专业计算机科学与技术 班级计算机0605班 姓名余欢欢 指导教师刘传文 2009 年 1 月15 日 附件2:

课程设计任务书 学生姓名:余欢欢专业班级:计算机0605班 指导教师:刘传文工作单位:计算机科学与技术学院 题目: 初始条件: 理论:学完“汇编语言程序设计”、“课程计算机概论”、“高级语言程序设计”和“数字逻辑”。 实践:计算机学院科学系实验中心提供计算机和软件平台。如果自己有计算机可以在其上进行设计。 要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求) (1)输入二进制,十六进制,十进制的无符号数,将它们转换成不同进制的形式,并且输出出来。 (2)程序应有操作提示、输入和输出,界面追求友好,最好是菜单式的界面。 (3)设计若干用例(测试数据),上机测试程序并分析(评价)所设计的程序。 (4)设计报告格式按附件要求书写。课程设计报告书正文的内容应包括: 在正文第一行写课程设计题目; 1.需求说明(要求、功能简述)或问题描述; 2.设计说明(简要的分析与概要设计); 3.详细的算法描述; 4.源程序与执行结果(含测试方法和测试结果); 5.使用说明; 6.总结,包括设计心得(设计的特点、不足、收获与体会)和展望(该 程序进一步改进扩展的设想)。 时间安排: 设计时间一周:周1:查阅相关资料。 周2:系统分析,设计。 周3~4:编程并上机调试。 周5:撰写课程设计报告。 设计验收安排:20周星期五8:00起到计算机学院科学系实验中心进行上机验收。 设计报告书收取时间:20周的星期五下午5:00之前。 指导教师签名: 2009年1月9日 系主任(或责任教师)签名: 2009年1月 9日

进制之间的转换

--进制之间的转换-- 介绍:进制也就是进位计数制,是人为定义的带进位的计数方法(有不带进位的计数方法,比如原始的结绳计数法,唱票时常用的“正”字计数法,以及类似的tally mark计数)。对于任何一种进制---X进制,就表示每一位置上的数运算时都是逢X进一位。十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推,x进制就是逢x进位。 --常见的几种进制 二进制(B)十进制(D)十六进制(H)八进制(O) 1.二进制 二进制有两个特点:它由两个数码0、1组成,二进制的规律是逢二进一。 -转换。 a.将二进制转换为十进制。 例子:将二进制数10111.1011转换为十进制 解析: 小数点前 1 0 1 1 ------ 转换为十进制 1×23 0×22 1×21 1×20 ------ 8+0+2+1=11 小数点后1 0 1 1 ------ 转换为十进制 1×2-1 0×2-21×2-31×2-4 ---- 0.5+0+0.125+0.0625=0.6875 则,二进制1011.1011转换为十进制数为 11+0.6875=11.6875. (1011.1011) B =(11.6875) D b.将二进制转换为八进制。 例子:将二进制数10111.1011转换为八进制 解析: (由小数点开始,向两边每3个分为一组) 001 011 .101 100 (按照二进制转十进制的算法,算出每三个所对应的十进制数) 1 3 . 5 4 则,(1011.1011) B =(13.54) O c.将二进制转换为十六进制。 例子:将二进制数10111.1011转换为八进制解析:

数据结构 栈十进制转八进制的算法详解(已测试过)

实验目的 建立栈实现十进制转八进制 实验内容 编程序并上机调试运行。 建立栈实现十进制转八进制 1.编写程序 //十进制转八进制 #include #include #include #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 typedef struct { int *base; int *top; int stacksize; }sqstack; int initstack (sqstack *s) {s->base=(int *)malloc(STACK_INIT_SIZE * sizeof(int)); if(!s->base) exit(0); s->top=s->base; s->stacksize =STACK_INIT_SIZE ; return 0; }//构造一个空栈s int push(sqstack *s,int e) { if((s->top-s->base)>=s->stacksize){ s->base=(int*)realloc(s->base,(s->stacksize + STACKINCREMENT )*sizeof(int)); if(!(s->base)) exit(1);

s->top=s->base+s->stacksize; s->stacksize+=STACKINCREMENT; } *s->top++=e; return 0; }//插入新的元素e为新的栈顶元素 int stackempty (sqstack *s) {if(s->top==s->base) return 1; else return 0; }//若栈s为空栈,则返回1,否则返回0 int pop (sqstack *s,int *e) {if(s->top==s->base) return 1; *e=*--s->top; return 0; }//若栈不为空,则删除s的栈顶元素,用e返回其值,返回OK,否则返回ERROR void conversion (int n) { sqstack s; int e; initstack(&s); printf("请输入一个十进制数:\n"); scanf("%d",&n); while (n){ push(&s,n%8); n=n/8; } printf("\n"); printf("该数的八进制数为:\n"); while(!stackempty(&s)){ pop(&s,&e); printf("%d",e); }

数据结构-栈十进制转八进制的算法详解(已测试过)

数据结构-栈十进制转八进制的算法详解(已测试过)

实验目的 建立栈实现十进制转八进制 实验内容 编程序并上机调试运行。 建立栈实现十进制转八进制 1.编写程序 //十进制转八进制 #include #include #include #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 typedef struct { int *base; int *top; int stacksize; }sqstack; int initstack (sqstack *s) {s->base=(int *)malloc(STACK_INIT_SIZE * sizeof(int)); if(!s->base) exit(0); s->top=s->base; s->stacksize =STACK_INIT_SIZE ; return 0; }//构造一个空栈s int push(sqstack *s,int e) { if((s->top-s->base)>=s->stacksize){ s->base=(int*)realloc(s->base,(s->stacksize +

STACKINCREMENT )*sizeof(int)); if(!(s->base)) exit(1); s->top=s->base+s->stacksize; s->stacksize+=STACKINCREMENT; } *s->top++=e; return 0; }//插入新的元素e为新的栈顶元素 int stackempty (sqstack *s) {if(s->top==s->base) return 1; else return 0; }//若栈s为空栈,则返回1,否则返回0 int pop (sqstack *s,int *e) {if(s->top==s->base) return 1; *e=*--s->top; return 0; }//若栈不为空,则删除s的栈顶元素,用e返回其值,返回OK,否则返回ERROR void conversion (int n) { sqstack s; int e; initstack(&s); printf("请输入一个十进制数:\n"); scanf("%d",&n); while (n){ push(&s,n%8); n=n/8; } printf("\n"); printf("该数的八进制数为:\n"); while(!stackempty(&s)){ pop(&s,&e);

数据结构课程设计报告-进制转换

课程设计报告 设计题目:进制转换问题 学生姓名: 专业:信息安全 班级:信息安全10-02 学号: 指导教师: 完成日期:2011年12月 课程设计报告的内容及要求 一、问题描述: 任意给定一个M进制的数x ,请实现如下要求: 1、求出此数x的10进制值(用MD表示) 2、实现对x向任意的一个非M进制的数的转换 3、至少用两种或两种以上的方法实现上述要求(用栈解决,用数组解决,其它方法解决)软件环境:Vc6.0编程软件 二、实验环境 运行平台:Win32 硬件:普通个人pc机 软件环境:VC++6.0编程软件 三、解决办法: 1、用数组实现该问题: ten_else()函数是实现十进制转换为其它进制的函数,先设置一个while循环,当十进制数g等于零时停止,再将输入的十进制数x取首先对需要转换的进制M取余,然后再对其取整,并将所得的余数依次存入一个数组中,然后逆向取出数组中的元素,即得到转换后的结果。将其他进制M转换为十进制,并将其转换为非M进制数是在主函数中实现的。M进制转十进制则是从该M进制数的最后一位开始算,依次列为第0、1、2…n位并分别乘以M 的0、1、2…n次方,将得到的次方相加便得到对应的十进制数,再调用ten_else()函数将其转换为非M进制的数。实际上十进制起到了一个桥梁作用。 2、用栈实现该问题: 与数组方法核心思想相同,stack定义栈,初始化一个空栈,然后判断是否为空,接着是去栈顶元素(用z表示栈顶元素),数据入栈,出栈的操作。栈具有后进先出的性质,故其用s.pop()取数较数组的逆向取数较为方便,体现了栈的优越性。

四、设计和编码的回顾讨论和分析 (1)函数ten_else()的作用体现在将任意10进制数转换为非10进制数,程序能实现1~16进制的相互转换。在10进制以上的数需要用字母表示,由此设计了switch函数,当出现余数大与10的情况可以调用相应的字母。考虑到最终结果是所求余数的倒序,添加新的整型变量j,通过一个for循环实现倒序。 (2)编程初期设计了else_ten函数,后几经修改将其融入main函数中较为直观。 (3)当输入10进制以下的数向10进制转换时候较为简单,程序中设计char型数组s[maxnum]来统计所输入数据的位数,不需要用户输入。在求10进制的时候通过for循环求一个累和即可。 (4)当输入10进制以上的数设计字母较为复杂,通过对ASCⅡ表的理解设计程序。 (5)在用栈法实现非10进制向10进制转换的时候遇到了些麻烦,当输入8A的时候程序将8当成字符类型,将其编译为数字56,导致最终转换结果出现错误。于是通过查阅ASCⅡ表对程序做出了修正,设计了条件语句if(z<=57)z-=48;if(z>=65){z-=65;z+=10;} 五、程序框图 六、经验和体会 (1)我们在写程序的时候要多角度考虑问题,比如题目中要求栈法与数组方法同时去实现进制转换问题。在编译过程中我们可以将特殊的问题逐渐的化为一般问题,比如10进制转换到16进制是,我举的例子是200转换为C8。 (2)通过此次课程设计的考验,让我们回顾了算法与数据结构这门课的主要内容。掌握了如何分别用数组和栈来实现数据存储与转换,加深了对栈的掌握和操作,以及栈先进后出的特点。 (3)在程序的调试初期,我们遇到了许多问题,暴露了对编译软件不熟悉的弊端,如设置断

利用栈实现数制转换(10进制转换8进制)

//利用栈实现数制转换(10进制转换8进制) #include #include #define ERROR 0 #define OK 1 #define STACK_INIT_SIZE 100 //存储空间初始分配量 #define STACKINCREMENT 10 //存储空间分配增量 typedef int SElemType; typedef struct stack { SElemType *top; SElemType *bottom; int stacksize; }SqStack; int InitStack(SqStack *S) { //构造一个空栈 S->bottom=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType)); if(!S->bottom) return ERROR; //存储分配失败 S->top=S->bottom; S->stacksize=STACK_INIT_SIZE; return OK; } //InitStack int Push(SqStack *S,SElemType e) { //插入元素e为新的栈顶元素 if(S->top-S->bottom>=S->stacksize-1) { S->bottom=(SElemType*)realloc(S->bottom, (S->stacksize+STACKINCREMENT)*sizeof(SElemType)); if(!S->bottom) return ERROR; // S->top=S->bottom+S->stacksize; } *S->top++=e;

各种进制之间的转换(可编辑修改word版)

一:十进制数转换成二进制数。 随便拿出一个十进制数“39”,(假如你今天买书用了39 元)先来把这个39 转换成2 进制数。 商余数步数39/2= 19 1 第一步 19/2= 9 1 (这里的19 是第一步运算结果的商)第二步 9/2= 4 1 (这里的9 是第二步运算结果的商)第三步 4/2= 2 0 (这里的4 是第三步运算结果的商)第四步 2/2= 1 0 (这里的2 是第四步运算结果的商)第五步 1/2= 0 1 (这里的1 是第五步运算结果的商)第六步 那么十进制数39 转换成2 进制数就是100111. 既39(10)=100111(2) 解析一:1. 当要求把一个10 进制数转换成2 进制数的时候,就用那个数一直除以2 得到商和余数。 2. 用上一步运算结果的商在来除以2,再来得到商和余数。 3. 就这样,一直用上一步的商来除以2,得到商和余数!那么什么时候停止呢? 4. 请看上述运算图,第六步的运算过程是用1 除以2.得到的商是0,余数是1. 那么请你记住,记好了啊共2 点。A: 当运算到商为“0”的时候,就不用运算了。B:1/2 的商为“0”余数为“1”。这个你要死记住,答案并不是0.5!答案就是商为“0”余数为“1”。你不用去思考为什么,记好了就行了! 5. 在上述图中你会清晰的看到每一步运算结果的余数,你倒着把它们写下来就是“100111”了。那么这个就是结果了。 6. 在上述图中符号“/”代表“除以”。 二:十进制数转换成八进制数。 随便拿出一个十进制数“358”,(假如你今天买彩票中了358 元)。358 是我们现实生活中所用10 进制表达出来的一个数值,转换成八进制数十多少?

相关文档
最新文档