当前位置:文档之家› c语言进制转化

c语言进制转化

c语言进制转化
c语言进制转化

1.2 进位计数制及其转换

计算机能够处理数值、文字、声音、图像等信息。读者也许会问:为什么作为电子设备的计算机能处理那么多复杂的信息呢?实际上,当把这些信息转换成计算机能识别的形式就能进行处理。目前计算机中所有的信息都用“0”和“1”两个数字符号组合的二进制数来表示。数值、图形、文字等各种形式的信息,需要计算机加工处理时,首先必须按一定的法则转换成二进制数。本节将首先以常用的十进制为出发点,来讨论二进制、八进制及十六进制的特点,然后介绍各种进制数之间的转换方法。

1.2.1 十进制数的表示

进位计数制是一种计数的方法,习惯上最常用的是十进制计数法。十进制数的每位数可以用下列10个数码之一来表示:0、1、2、3、4、5、6、7、8、9。十进制数的基数为10,基数表示进位制所具有的数码的个数。

十进制数的计数规则是“逢十进一”,也就是说,每位累计不能超过9,计满10就应向高位进1。

一般来讲,任意一个十进制数N,可以用位置计数法表示如下:

(N )10 = (an–1an–2…a1a0.a–1a–2…a–m)10

也可以用按权展开式表示如下:

(N )10 = an–1 × 10n–1 + an–2 × 10n–2 + … + a1 × 101 + a0 × 100

+ a–1 × 10–1 + a–2 × 10–2 + … + a–m × 10–m

=

式中,ai表示各个数字符号为0~9这10个数码中的任意一个;n为整数部分的位数,m为小数部分的位数;10i为该位数字的权。例如:

(1234.56)10 = 1 × 103 + 2 × 102 + 3 × 101 + 4 × 100 + 5 × 10–1 + 6 × 10–2

通常,对十进制数的表示,可以在数字的右下角标注10或D。

1.2.2 二进制数、八进制数和十六进制数的表示

计算机中为了便于存储及计算的物理实现,采用了二进制。二进制数的基数为2,只有0、1两个数码,其计数规则是“逢二进一”,即每位计满2就向高位进1。它的各位的权是以2i 表示的。

对于任意一个二进制数N,用位置计数法表示为:

(N )2 = (an–1an–2…a1a0.a–1a–2…a–m)2

用按权展开式表示为:

?(N )2 = an–1 × 2n–1 + an–2 × 2n–2 + … + a1 × 21 + a0 × 20

??+ a–1 × 2–1 + a–2 × 2–2 + … + a–m × 2–m

=

式中,ai表示各个数字符号为0或1这两个数码中的任意一个;n为整数部分的位数,m为小数部分的位数;2i为该位数字的权。例如:

(101101)2 = 1 × 25 + 0 × 24 + 1 × 23 + 1 × 22 + 0 × 21 + 1 × 20 = (45)10

通常,对二进制数的表示,可以在数字的右下角标注2或B。

二进制数运算规则简单,便于电路实现,它是数字系统中广泛采用的一种数制。但因二进制表示一个数时,所用的位数比用十进制数表示的位数多,人们读写很不方便,容易出错。因此常采用八进制或十六进制。C语言程序设计中就经常会用到这两种进制。

八进制数的基数是8,采用的数码是0、1、2、3、4、5、6、7。计数规则是“逢八进一”,它的各位的权是以8i表示的。通常,对八进制数的表示,可以在数字的右下角标注8或O,但在C语言中是在数的前面加数字0来表示。例如,(1234)8就是表示一个八进制数,而不是十进制数1234,在C语言中它表示为01234。

十六进制数的基数是16,采用的数码是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。其中A、B、C、D、E、F分别表示十进制数字10、11、12、13、14、15。十六进制的计数规则是“逢十六进一”,它的各位的权是以16i表示的。通常,对十六进制数的表示,可以在数字的右下角标注16或H,但在C语言中是在数的前面加数字0和字母X即0X来表示。例如,(12AF)16就是表示一个十六进制数,在C语言中它表示为0X12AF。

由此可得出:十进制、八进制、二进制与十六进制的特征对照表如表1-1所示。

表1-1 二进制、八进制、十进制与十六进制的特征对照表

进制

数码

计数规则

数的表示法

十进制

0、1、2、3、4、5、6、7、8、9

逢十进一

(1234)10

二进制

0、1

逢二进一

(1101)2

八进制

0、1、2、3、4、5、6、7

逢八进一

(4567)8

十六进制

0~9、A、B、C、D、E、F

逢十六进一

(45AF)16

1.2.3 二进制数和十进制数的转换

1.二进制转换为十进制数

二进制数转换成十进制数是很方便的,只要将二进制数写成按权展开式,并将式中各乘积项的积计算出来,然后各项相加,即可得到与该二进制数相对应的十进制数。例如:(11010.101)2 = 1 × 24 + 1 × 23 + 0 × 22 + 1 × 21 + 0 × 20

??+ 1 × 2–1 + 0 × 2–2 + 1 × 2–3

= 16 + 8 + 2 + 0.5 + 0.125

=(26.625)10

2.十进制转换为二进制数

十进制数转换成二进制数分成整数部分转换和小数部分转换,下面分别来介绍它们转换的方法。

(1)整数部分转换

把要转换的十进制数的整数部分不断除以基数2,并记下余数,直到商为0为止。

【例1-1】(N )10 = (117)10

117 / 2 = 58 (a0 = 1)最低整数位

58 / 2 = 29 (a1 = 0)

29 / 2 = 14 (a2 = 1)

14 / 2 = 7 (a3 = 0)

7 / 2 = 3 (a4 = 1)

3 / 2 = 1 (a5 = 1)

1 /

2 = 0 (a6 = 1)最高整数位

所以(N )10 = (1110101)2。

注意:对于整数部分的转换第一次除以2所得到的余数是二进制数整数的最低位,最后所得到的余数是二进制数整数的最高位。

(2)小数部分转换

对于被转换的十进制数的小数部分则应不断乘以基数2,并记下其整数部分,直到结果的小数部分为0为止。

【例1-2】(N )10 = (0.8125)10

0.8125 ×2 = 1.625 (b1 = 1)最高小数位

0.625 ×2 = 1.25 (b2 = 1)

0.25 ×2 = 0.5 (b3 = 0)

0.5 ×2 = 1.0 (b4 = 1)最低小数位

所以(N )10 = (0.1101)2。

注意:对于小数部分的转换式中的整数不参加连乘,第一次乘以2所得到的整数部分是二进制数小数的最高位,最后所得到的整数部分是二进制数小数的最低位。

在十进制的小数部分转换中,有时连续乘以2不一定能使小数部分等于0,这说明该十进制小数不能用有限位二进制小数表示。这时,只要取足够多的位数,使其误差达到所要求的精度就可以了。

十进制数转换成二进制数的这种方法其实也适用于十进制数转换成其他进制的数,只是基数不再是2,而是要转换的进制数的基数。下面的例子是将一个十进制数转换成八进制数。【例1-3】(N )10 = (117)10

117 / 8 = 14 (a0 = 5)最低整数位

14 / 8 = 1 (a1 = 6)

1 / 8 = 0 (a

2 = 1)最高整数位

所以(N )10 = (165)8。

【例1-4】(N )10 = (0.8125)10

0.8125 ×8 = 6.5 (b1 = 6)最高小数位

0.5 ×8 = 4.0 (b2 = 4)最低小数位

所以(N )10 = (0.64)8。

1.2.4 二进制数、八进制数和十六进制数的转换

八进制数的基数是8(8 = 23),十六进制数的基数是16(16 = 24)。二进制数、八进制数和十六进制数之间具有2的整指数倍的关系,因而可直接进行转换。

1.二进制数→八进制数

从小数点开始,分别向左、右按3位分组转换成对应的八进制数字字符,最后不满3位的,则需补0。

【例1-5】将二进制数(1101101.10101)2转换成八进制数。

具体方法为:

二进制数:

1 0 1

1 0 1

.

1 0 1

0 1 0

八进制数:

1

5

5

.

5

2

所以(1101101.10101)2 = (155.52)8。

2.八进制数→二进制数

将每位八进制数用3位二进制数表示即可。

【例1-6】将八进制数(345.64)8转换成二进制数。具体方法为:

八进制数:

3

4

5

.

6

4

二进制数:

011

110

101

.

100

所以(345.64)8 = (11100101.1101)2。

3.二进制数→十六进制数

从小数点开始,分别向左、右按4位分组转换成对应的十六进制数字字符,最后不满4位的,则需补0。

【例1-7】将二进制数(1101101.10101)2转换成十六进制数。

具体方法为:

二进制数:

0 1 1 0

1 1 0 1

.

1 0 1 0

1 0 0 0

十六进制数:

6

D

.

A

8

所以(1101101.10101)2 = (6D.A8)16。

4.十六进制数→二进制数

将每位十六进制数用4位二进制表示即可。

【例1-8】将十六进制数(A8D.6C)16转换成二进制数。

具体方法为:

十六进制数:

A

8

D

.

6

C

二进制数:

1010

1000

1101

.

0110

1100

所以(A8D.6C)16 = (101010001101.011011)2。

C语言课程设计--进制转换

C 语言 课程设计报告 设计题目:进制转换 学生姓名: 学生学号:20101010110 专业班级:数学与应用数学一班 学院名称:数学与计量经济学院 同组人姓名: 指导老师: 2011年6 月16 日

目录 1.需求分析........................................................1 1.1问题描述....................................................1 1.2输入数据的要求..............................................1 1.3输出数据的要求..............................................1 1.4开发环境和工具..............................................1 1。.5成员分工...................................................1 2.总体设计........................................................2 2.1设计思路...................................................3 2。.2模块结构图...............................................4 3.详细设计........................................................7 3.1数据类型的定义...............................................7 3.2总的实现......................................................8 4.系统测试........................................................9 5.总结...........................................................·10 6.参考文献及附录............................................11

C语言实现任意进制转换

#include #include #include void dtox(double num,int jz) { char xnum[100]; int dnum=(int) num; int i=0,j=0,e = 0; while(dnum>=jz) { xnum[j++]=dnum%jz+48; dnum=dnum/jz; } xnum[j] = dnum+48; for(i = j;i>=0;i--){ printf("%c",xnum[i]); } if(dnum - num != 0){ printf("."); num = num - (int)num; do { e++; printf("%c",(int)(num*jz)+48); num = num*jz-(int)(num*jz); if(num == 0)break; } while(e<20); } } double xtod(char num[],int jz) { double dnum = 0; int i,j,k=0,n=0,b; for(i=0;;i++) { if(num[i]=='\0')break; else n++; if(num[i]=='.'){j=i;k=1;} } for(i=j-1;i>=0;i--) { dnum =dnum + (double)(num[j-i-1]-48)*pow(jz,i); }

if(k==1) { for(i=j+1;i

十六进制数转换成十进制数C语言

十六进制数转换成十进制数C语言 程序代码: #include #include #include /*求字符串长度函数*/ int strlengh(char *s) { int i; for(i=0;s[i]!='\0';i++); return i; } /*16进制转10进制函数*/ double tran(char *s) { int len=strlengh(s);/*求输入的字符串的长度*/ int ss[100] ;/*用于存放对字符的转换如f:15*/ int i; double n=0.0; /*对字符进行处理,将其每一位转换为整数,之后运算进行处理*/ for(i=0;i

进制转换C语言的实现

索引 一、算法分析 二、数据结构: 1、头文件 2、栈的关键操作 三、关键程序: 1、十进制进制转换为其它 2、其它进制转换为十进制 一、算法分析 实现进制转换需要编个函数,每一函数完成相应进制的转换,下面是各个进制之间转换的数学方法的算法。 十进制转二进制: 十进制数转换成二进制数,是一个连续除2的过程;把要转换的数,除以2,得到商和余数,将商继续除以2,直到商为0.最后将所有余数倒序排列,得到数就是转换结果。 例如: 302/2 = 151 余0 151/2 = 75 余1 75/2 = 37 余1 37/2 = 18 余1 18/2 = 9 余0 9/2 = 4 余1 4/2 = 2 余0 2/2 = 1 余0 所以302转换为2进制,结果:100101110

十进制转八进制: 十进制数转换成八进制的方法和转换为二进制的方法类似,唯一变化:除数由2变成8。 例如: 120/8=15余0 15/8=1余7 1/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 所以转换为10进制数为: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。

最新C任意进制转换程序

C任意进制转换程序 C语言写的一个任意进制转换的程序,不使用库提供的转换函数. / scale.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include #include #include #include #define WIDTH 10 #define DATAWIDTH 50 #define MAX 4294967295 #define CONST_2 2 #define CONST_3 3 #define CONST_8 8 #define CONST_9 9 #define CONST_10 10 #define CONST_16 16 #define CHAR_0 '0' #define CHAR_9 '9' #define CHAR_A 'A' #define CHAR_a 'a'

#define CHAR_Z 'Z' #define CHAR_SPACE ' ' #define STRING_0 "0" #define STRING_Z "Z" bool Scale(); bool GetSourceScale(int * scale_in); bool GetObjectScale(int * scale_out); double OtherToDeci(int scale_in,char inputdata[]); void DeciToOther(unsigned long deci,int scale_out,char outputdata[]); bool GetData(char data[],int CONCOUNT,int flg); bool GetScale(char temp[]); bool GetSource(int in_scale,char inputdata[]); void ScaleChange(int scale_in,char inputdata[],int scale_out,char outputdata[]); void CleanScreen(); int _tmain(int argc, _TCHAR* argv[]) { int flg = 0; char cs[WIDTH]; memset(cs,0x00,sizeof(cs)); while(1) { printf("-----------------------------------------------------------------\n" ); printf(" Data Transform Between Two Scales \n"); printf(" ----------------------------------------\n"); /*进制转换主函

(C语言)10进制转换2,8,16进制

(C语言)10进制转换2,8,16进制 作者:vinseven #include"stdio.h" #include"conio.h" #include"malloc.h" #include"windows.h" #define ElemType int void menu(); void TenToTwo(); void TenToEight(); void TenToSixteen(); void InitStack(struct sNode **HS); void Push(struct sNode **HS,ElemType x); ElemType Pop(struct sNode **HS); ElemType Peek(struct sNode **HS); int EmptyStack(struct sNode **HS); void ClearStack(struct sNode **HS); int ten;/*要输入的10进制数*/ int x;/*把将要插入到栈中的元素暂时存进x 中*/ struct sNode hs;

struct sNode { ElemType data; struct sNode *next; }; void main() { menu(); getch(); } void menu() { char choice; int flag=1; while(1) { printf("\n\t\t\t________________________\n\n\n"); printf("\t\t\t 1,10进制转换2进制\n\n\n"); printf("\t\t\t 2,10进制转换8进制\n\n\n"); printf("\t\t\t 3,10进制转换16进制\n\n\n"); printf("\t\t\t 0,退出\n\n\n");

(c语言程序设计)10进制数转化为其它进制数

//用顺序栈来实现进制转换 #include #include #include #include #define STACK_INIT_SIZE 100 //存储空间初始分配量 #define STACKINCREMENT 10 //存储空间分配增量 typedef int SElemType; typedef int Status; typedef struct { SElemType *base; SElemType *top; int stacksize; //栈容量 }SqStack; SqStack S; Status InitStack(SqStack &S){ //构造一个空栈 S.base=(SElemType *)malloc(STACK_INIT_SIZE *sizeof(SElemType)); if(!S.base) exit(0); //存储空间失败 S.top=S.base; S.stacksize=STACK_INIT_SIZE; return 0; } Status GetTop(SqStack S,SElemType &e) //若栈不为空,则用e返回S的栈顶元素,并返回0,否则返回1 { if(S.top==S.base) return 1; e=*(S.top-1); return 0; } Status Push(SqStack &S ,SElemType e) //插入元素e为新的栈顶元素 { if(S.top-S.base>=S.stacksize) //如果栈满,则追加存储空间 { S.base=(SElemType *)realloc (S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType)); if(!S.base) return 1 ; //存储分配失败 S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT;

任意进制转换(数据结构c语言版)

以下是在vc++6.0下运行的结果,我列举了输入345,进制分别为2,8,16的得出的结果,下面的不止只有这三个,输入任意进制的都可以 输入一个整数和进制数:345,2 转换成进制之后的数:101011001 Press any key to continue 输入一个整数和进制数:345,2 转换成进制之后的数:101011001 Press any key to continue 输入一个整数和进制数:345,16 转换成进制之后的数:159 Press any key to continue

程序如下: #include #include #define TRUE 1 #define FALSE 0 #define Stack_Size 100 typedef int StackElementType; typedef struct { StackElementType elem[Stack_Size]; int top; }SeqStack; void InitStack(SeqStack *S) { S->top=-1; }

int Push(SeqStack *S,StackElementType x) { if(S->top==Stack_Size-1) return(FALSE); S->top++; S->elem[S->top]=x; return(TRUE); } int Pop(SeqStack *S,StackElementType *x) { if(S->top==-1) return(FALSE); else { *x=S->elem[S->top]; S->top--; return(TRUE); }

c语言实现数制转换

.数制转换。 编写程序,将十进制整数N转换为d进制数,其转换步骤是重复以下两步,直到N等于0。 X=N mod d (其中mod为求余运算) N=N div d (其中div为整除运算) 测试数据:以十进制到二进制转换为例 输出结果为:(789)10→(1100010101)2 注意:要求使用栈的基本运算(包括InitStack(S),Pop(S),Push(S),IsEmpty(S)。应引用栈的头文件实现)。 #include #define StackSize 50 typedef struct { int elem[StackSize]; int top; }SeqStactk; void InitStack(SeqStactk *S) { S->top=-1; } int IsEmpty(SeqStactk *S) /*判断栈空运算*/ { if (S->top==-1) /*栈空*/ return 1; else /*栈不空*/ return 0; } void Push(SeqStactk *S,int *a) { //将a置入S中栈顶 if(S->top==StackSize-1) return; else{ S->top++; S->elem[S->top]=*a; } } //出栈 int Pop(SeqStactk *S,int *b) { //将s栈顶元素弹出,放到b所指向空间 if (S->top==-1) return -1; else { *b=S->elem[S->top];

S->top--; return *b; } } int main(void) { SeqStactk S; int x,d,a,b; InitStack(&S); printf("栈%s\n",(IsEmpty(&S)==1?"空":"不空")); printf("输入十进制数x:"); scanf("%d",&x); printf("输入想求几进制d:"); scanf("%d",&d); while(x!=0) { a=x%d; Push(&S,&a); x=x/d; } printf("输出%d进制数:",d); while(Pop(&S,&b)!=-1) { printf("%d",b); } printf("\n"); return 0; }

C进制文本转换为ascii码

我用的将16进制文本转换为ascii码的C语言代码。16进制文本复制到文件test.txt中,运行程序,将得到输入。 例: 运行:./CSTRING test.txt 其中,test.txt文件内容为: 30:31:32 则得到的"Cstring.txt"输入文件中 012 本程序能自动跳过0或多个分隔符(分隔符可以为任意的符号,如“:”,“%”或空格等,判断的函数实现见SkipDelimiter函数)。 如:输入文件内容为: 30 31 32 或 303132 得到的都是 012 [cpp]view plain copy 1.#include 2.#include 3.#include 4.#include 5.#include 6.#include 7.#include 8.#include 9.typedef unsigned char uint8; 10.uint8 ConverseOneChar(uint8 ucChar) 11.{ 12. uint8 ucTmp = 0x00;

13. printf("one ucChar= 0x%x\n", (char)ucChar); 14.switch(ucChar) 15. { 16.case'0': 17. ucTmp = 0x00; 18.break; 19.case'1': 20. ucTmp = 0x01; 21.break; 22.case'2': 23. ucTmp = 0x02; 24.break; 25.case'3': 26. ucTmp = 0x03; 27.break; 28.case'4': 29. ucTmp = 0x04; 30.break; 31.case'5': 32. ucTmp = 0x05; 33.break; 34.case'6': 35. ucTmp = 0x06; 36.break; 37.case'7': 38. ucTmp = 0x07; 39.break; 40.case'8': 41. ucTmp = 0x08; 42.break; 43.case'9': 44. ucTmp = 0x09; 45.break; 46.case'a': 47.case'A': 48. ucTmp = 0x0a; 49.break; 50.case'b': 51.case'B': 52. ucTmp = 0x0b; 53.break; 54.case'c': 55.case'C': 56. ucTmp = 0x0c;

C C语言 进制转换大全

范例/*将字符串a与字符串b转换成数字后相加*/ #include main() { char*a=”-100.23”; char*b=”200e-2”; float c; c="atof"(a)+atof(b); printf(“c=%.2f\n”,c); } 执行c="-98".23 atoi(将字符串转换成整型数) 相关函数atof,atol,atrtod,strtol,strtoul 表头文件#include 定义函数int atoi(const char*nptr); 函数说明atoi()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时 ('\0')才结束转换,并将结果返回。 返回值返回转换后的整型数。 附加说明atoi()与使用strtol(nptr,(char**)NULL,10);结果相同。 范例/*将字符串a与字符串b转换成数字后相加*/ #include mian() { char a[]=”-100”; char b[]=”456”; int c; c="atoi"(a)+atoi(b); printf(c=%d\n”,c); } 执行c="356"

atol(将字符串转换成长整型数) 相关函数atof,atoi,strtod,strtol,strtoul 表头文件#include 定义函数long atol(const char*nptr); 函数说明atol()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时 ('\0')才结束转换,并将结果返回。 返回值返回转换后的长整型数。 附加说明atol()与使用strtol(nptr,(char**)NULL,10);结果相同。 范例/*将字符串a与字符串b转换成数字后相加*/ #include main() { char a[]=”1000000000”; char b[]=”234567890”; long c; c="atol"(a)+atol(b); printf(“c=%d\n”,c); } 执行c="1234567890" gcvt(将浮点型数转换为字符串,取四舍五入) 相关函数ecvt,fcvt,sprintf 表头文件#include 定义函数char*gcvt(double number,size_t ndigits,char*buf); 函数说明gcvt()用来将参数number转换成ASCII码字符串,参数ndigits表示显示的位数。gcvt()与ecvt()和fcvt()不同的地方在于,gcvt()所 转换后的字符串包含小数点或正负符号。若转换成功,转换后的字

c语言 进制转换 十进制 二进制 八进制 十六进制

c语言进制转换效果: 程序: #include void main() { int choice,num; int n,z[30]; int i,b[20]; int m,c[20]; char A='\65',B='\66',C='\67',D='\68',E='\69',F='\70'; printf("请输入你要输入的十进制的数:"); scanf("%d",&num); printf("***请选择一个你要转换的进制***\n"); printf("*** 1。二进制***\n"); printf("*** 2。八进制***\n"); printf("*** 3。十六进制***\n"); printf("******************************\n"); scanf("%d",&choice); if(choice==1) { for(n=0;n>=0;n++) { z[n]=num%2; if(num/2==0) break; num=num/2;

} for(;n>=0;n--) { printf("%d",z[n]); } } else if(choice==2) { for(i=0;i>=0;i++) { b[i]=num%8; if(num/8==0) break; num=num/8; } for(;i>=0;i--) { printf("%d",b[i]); } } else if(choice==3) { for(m=0;m>=0;m++) { c[m]=num%16; if(num/16==0) break; num=num/16; } for(;m>=0;m--) { if(c[m]==10) printf("A"); else if(c[m]==11) printf("B"); else if(c[m]==12) printf("C"); else if(c[m]==13) printf("D"); else if(c[m]==14) printf("E"); else if(c[m]==15) printf("F"); else printf("%d",c[m]); } } printf("\n"); }

C语言进制转换课程设计方案

C语言进制转换课程设计 方案

一、转换概述 1、需求分析 进制数制是人们利用符号进行计数的科学方法。数制有很多种,在计算机中常用的数制有:十进制,二进制、八进制和十六进制。十六进制数有两个基本特点:它由十六个字符0~9以及A,B,C,D,E,F组成(它们分别表示十进制数0~15),十六进制数运算规律是逢十六进一。 要求: (1)输入一个十进制数N,将它转换成R进制数输出,并可以进行逆转换。 (2)输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R (2<=R<=16, R<>10)。 (3)为每个测试实例输出转换后的数,每个输出占一行。如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,等等)。 (4)界面友好。 2、概要设计 数制转换器程序是要求任意两种数间的相互转化,本次课程设计以任意进制间转换为中心实现二进制、八进制、十进制、十六进制、十八进制之间的相互转化。对输入的任意进制的数字进行转换,实现常见进制间的转换以及用户自定义需要转换的目标进制数,这样大大提高了本程序的用途。常见的二进制、八进制、十进制、十六进制、十六进制之间的固定转换,其转换方式小异,从低进制数向高进制数转换进行乘数累加,反之则逐步求余,最终进行分布计算得到想要的结果,对以上思想进行扩展,使其不仅仅局限于那些常

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

C语言其他进制转换为十进制

/*其他进制转换为十进制PGYZ*/ #include #include #include int main(void) { int ro,n,lg,i,j; char a[20],b[]="0123456789ABCDEF"; int tran(char a[20],int ro); printf("输入一个二到十六进制基数(若有字母只能是大写字母):\n"); scanf("%d",&ro); printf("输入要处理的进制序列:"); scanf("%s",&a); lg=strlen(a); for(i=0;i=ro) {printf("输入有误,程序退出.....\n"); return 0; } } n=tran(a,ro); printf("%d进制转换为十进制为:\n%s=%d\n",ro,a,n); return 0; } int tran(char a[],int ro) { int i,n=0,lg,k,l=0; char ch; lg=strlen(a); for(i=lg-1;i>=0;i--) { ch=a[i]; if(ch>='A'&&ch<='Z') k=ch-'A'+10; else if(ch>='a'&&ch<='z') k=ch-'a'+10; else k=ch-'0'; n=n+k*pow(ro,l); l++;

} return n; }

C语言进制转换课程设计

课程设计 进制转换 课程设计名称:数据结构课程设计 专业班级: 学生姓名: 学号: 指导教师: 设计时间:

计算机专业课程设计任务书 学生姓名专业班级学号 题目进制转换 课题性质 A.工程设计课题来源D.自拟课题。指导教师同组姓名无 主要内容针对进制转换问题,选择、设计和实现合适的抽象数据类型;进行进制转换分析,给出设计方案。 学习掌握并熟练运用C语言进行程序设计; 任务要求 这次课程设计不仅提升C语言理论知识,更重要的是能够提高自己的编程能力。这个项目是用来实现进制转换的一些简单功能。实现过程中需要编制函数,依次实现各个功能。也需要学会利用网络或其他工具来查找相关的资料解决问题,每解决一个问题,就会多一份收获,会不断培养自我学习的能力。 参考文献[1]谭浩强.C程序设计(第三版).北京:清华大学出版社.2005:34 [2]李建忠.大学计算机基础.西安:西北大学出版社.2005:104 [3]谭浩强.C程序设计题解与上机指导(第三版).北京:清华大学出版社.2005:68 [4]罗建军、朱丹军、顾刚.C++程序设计教程(第2版).北京:高等教育出版社.2007:76 审查意见 指导教师签字: 教研室主任签字:2014年6月15日

目录 一、转换概述 (2) 1、需求分析 (2) 2、概要设计 (3) 3.详细设计 (5) 1.十进制转化为任意进制函数: (5) 2.任意进制转化十进制函数: (6) 3.程序流程图 (7) 4.运行环境 (11) 5.开发工具和编程语言 (12) 二、数学原理 (13) 十进制转二进制: (13) 十进制转八进制: (13) 十进制转十六进制: (14) 二进制转十进制: (14) 二进制转八进制: (14) 二进制转十六进制: (15) 八进制转十进制: (15) 八进制转十六进制: (16) 十六进制转二进制: (16) 十六进制转八进制: (16) 三、程序编码 (17) 测试结果 (22) 参考文献 (25) 四、心得体会 (27) 一、转换概述 1、需求分析 进制数制是人们利用符号进行计数的科学方法。数制有很多种,在计算机中常用的数

C++_C语言_进制转换大全

c语言字符串数字转换函数大全 c语言字符串数字转换函数大全收藏 atof(将字符串转换成浮点型数) atoi(将字符串转换成整型数) atol(将字符串转换成长整型数) strtod(将字符串转换成浮点数) strtol(将字符串转换成长整型数) strtoul(将字符串转换成无符号长整型数) toascii(将整型数转换成合法的ASCII 码字符) toupper(将小写字母转换成大写字母) tolower(将大写字母转换成小写字母) atof(将字符串转换成浮点型数) 相关函数 atoi,atol,strtod,strtol,strtoul 表头文件 #include 定义函数double atof(const char *nptr); 函数说明 atof()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时 ('\0')才结束转换,并将结果返回。参数nptr字符串可包含正负 号、小数点或E(e)来表示指数部分,如123.456或123e-2。 返回值返回转换后的浮点型数。 附加说明 atof()与使用strtod(nptr,(char**)NULL)结果相同。

范例 /* 将字符串a 与字符串b转换成数字后相加*/ #include main() { char *a=”-100.23”; char *b=”200e-2”; float c; c="atof"(a)+atof(b); printf(“c=%.2f\n”,c); } 执行 c="-98".23 atoi(将字符串转换成整型数) 相关函数 atof,atol,atrtod,strtol,strtoul 表头文件 #include 定义函数int atoi(const char *nptr); 函数说明 atoi()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时 ('\0')才结束转换,并将结果返回。 返回值返回转换后的整型数。 附加说明 atoi()与使用strtol(nptr,(char**)NULL,10);结果相同。 范例 /* 将字符串a 与字符串b转换成数字后相加*/ #include mian() { char a[]=”-100”; char b[]=”456”; int c; c="atoi"(a)+atoi(b); printf(c=%d\n”,c); } 执行 c="356"

c语言_各种进制转换

c语言各种进制转换 计算机中常用的数的进制主要有:二进制、八进制、十六进制。 2进制,用两个阿拉伯数字:0、1; 8进制,用八个阿拉伯数字:0、1、2、3、4、5、6、7; 10进制,用十个阿拉伯数字:0到9; 16进制就是逢16进1,但我们只有0~9这十个数字,所以我们用A,B,C,D,E,F这五个字母来分别表示10,11,12,13,14,15。字母不区分大小写。 以下简介各种进制之间的转换方法: 一、二进制转换十进制 例:二进制“1101100” 1101100 ←二进制数 6543210 ←排位方法 例如二进制换算十进制的算法: 1*26 + 1*25 + 0*24 + 1*23 + 1* 22 + 0*21 + 0*20 ↑ ↑ 说明:2代表进制,后面的数是次方(从右往左数,以0开始) =64+32+0+8+4+0+0 =108 二、二进制换算八进制 例:二进制的“10110111011” 换八进制时,从右到左,三位一组,不够补0,即成了: 010 110 111 011 然后每组中的3个数分别对应4、2、1的状态,然后将为状态为1的相加,如:010 = 2 110 = 4+2 = 6 111 = 4+2+1 = 7 011 = 2+1 = 3 结果为:2673 三、二进制转换十六进制 十六进制换二进制的方法也类似,只要每组4位,分别对应8、4、2、1就行了,如分解为: 0101 1011 1011 运算为: 0101 = 4+1 = 5 1011 = 8+2+1 = 11(由于10为A,所以11即B) 1011 = 8+2+1 = 11(由于10为A,所以11即B) 结果为:5BB 四、二进制数转换为十进制数 二进制数第0位的权值是2的0次方,第1位的权值是2的1次方…… 所以,设有一个二进制数:0110 0100,转换为10进制为:

C语言程序 十进制、八进制、十六进制的相互转化

#include #include void main() { //*************************************** // 把十进制转化为十六进制与八进制 //*************************************** int number1; printf("请输入一个十进制的数:\n"); scanf("%d",&number1); printf("%s\n %X\n","这个数的十六进制为:",number1); printf("%s\n %o\n\n\n","这个数的八进制为:",number1); //*************************************** // 把八进制转化为十进制与十六进制 //*************************************** int number2; printf("请输入一个八进制的数:\n"); scanf("%o",&number2); printf("%s\n %d\n","这个数的十进制为:",number2); printf("%s\n %X\n\n\n","这个数的十六进制为:",number2); //*************************************** // 把十六进制转化为十进制与八进制 //*************************************** int number3; printf("请输入一个十六进制的数:\n"); scanf("%X",&number3); printf("%s\n %d\n","这个数的十进制为:",number3); printf("%s\n %o\n\n\n","这个数的八进制为:",number3); }

C语言 十六进制和十进制间的转换

1.将十六进制转换为十进制. #include #include int main(void){ int convert(int,char*); int i,j; char m[20]; printf("请输入你要转换的数:"); scanf("%s",m); i=0; while(*(m+i)!='\0'){ i++; } j=convert(--i,m); printf("转换为十进制是:%d\n",j); return0; } int convert(int a,char*p){ int i,j,sum; sum=0; for(i=0;i<=a;i++){ if(*(p+i)<='f'&&*(p+i)>='a') j=(int)(*(p+i))-87; else if(*(p+i)<='F'&&*(p+i)>='A') j=(int)(*(p+i))-55; else j=(int)(*(p+i))-48; sum=sum+pow(16,a-i)*j; } return(sum); }

2.将十进制转换为十六进制. #include int main(void) { int i,a[20],m,m_old; char c; i=0; printf("请输入你要转换的数:"); scanf("%d",&m); m_old=m; while(m!=0){ a[i]=m%16; m/=16; i++; } i--; /*for(;i>=0;i--){ printf("%d",*(a+i)); }*/ printf("%d转换为十六进制是:",m_old); for(;i>=0;i--){ /*switch(a[i]){

相关主题
文本预览
相关文档 最新文档