《2022年C任意进制转换程序只是分享 .pdf》由会员分享,可在线阅读,更多相关《2022年C任意进制转换程序只是分享 .pdf(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C 任 意 进 制 转 换 程 序名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 21 页 - - - - - - - - - C 任意进制转换程序 C 语言写的一个任意进制转换的程序,不使用库提供的转换函数 . / scale.cpp : 定义控制台应用程序的入口点。/ #include stdafx.h #include #include #include #include #include #define WIDTH 10 #define DATAWIDTH 50
2、#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 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 21 页 - - -
3、- - - - - - #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 Get
4、Data(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 csWIDTH; memset(cs,0 x00,sizeof(cs); whil
5、e(1) printf(-n); printf( Data Transform Between Two Scales n); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 21 页 - - - - - - - - - printf( -n); /*进制转换主函数*/ if(!Scale() break; printf(-n); printf(input any key and press Enter key to continue, Z for exit:); if(!
6、GetData(cs,WIDTH,flg) /*判断是否继续执行下一次转换*/ break; system(cls); /* 清屏 */ return 0; bool Scale() int scale_in,scale_out; char inputdataDATAWIDTH; char outputdataDATAWIDTH; /*输入源数据进制*/ if(!GetSourceScale(&scale_in) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 21 页
7、- - - - - - - - - return false; /* 输入源数据 */ if(!GetSource(scale_in,inputdata) return false; /* 输入目标数据进制*/ if(!GetObjectScale(&scale_out) return false; /* 进行进制转换 */ ScaleChange(scale_in,inputdata,scale_out,outputdata); return true; bool GetSourceScale(int * scale_in) /* 输入源数据进制*/ char temparrayWIDTH;
8、 memset(temparray,0 x00,sizeof(temparray); printf(Input source data scale and press Enter key(one of 2,8,10,16. Z for exit): n); if(!GetScale(temparray) return false; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 21 页 - - - - - - - - - *scale_in = atoi(temparr
9、ay); return true; bool GetObjectScale(int * scale_out) /*输入目标数据进制*/ char temparrayWIDTH; memset(temparray,0 x00,sizeof(temparray); printf(Input object data scale and press Enter key(one of 2,8,10,16. Z for exit): n); if(!GetScale(temparray) return false; *scale_out = atoi(temparray); return true; bo
10、ol GetData(char data,int CONCOUNT,int flg) /*输入数据*/ int i,icount; char c; char *p; bool spaceFlag; i = 0; icount = 0; spaceFlag = true; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 21 页 - - - - - - - - - while (c = getchar() != 0 x0a) if (spaceFlag & c = CHAR
11、_SPACE) /*去掉前空格 */ continue; if (!spaceFlag & c = CHAR_SPACE) /*去掉后空格 */ icount+; continue; else if (icount 0) if (flg) CleanScreen(); printf(ERROR! Please input again(Z for exit): n); /*输入进制或者源数据时,中间有空格,则重新输入*/ i = 0; icount = 0; spaceFlag = true; fflush(stdin); continue; 名师资料总结 - - -精品资料欢迎下载 - - -
12、 - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 21 页 - - - - - - - - - else break; if (i = CONCOUNT - 1) /*判断是否输入数据过长*/ if (flg) CleanScreen(); printf(ERROR! Too many characters.Please input again(Z for exit): n); memset(data,0 x00,sizeof(data); fflush(stdin); i = 0; continue; else break
13、; if (c = CHAR_0 & !strcmp(data,STRING_0) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 21 页 - - - - - - - - - continue; datai = c; i+; spaceFlag = false; datai = 0; p = data; if (*p = CHAR_0 & strlen(p) 1) p+; strcpy(data,p); if (strlen(data) & !strcmp(data,S
14、TRING_Z) return false; return true; /* 输入数据进制 */ bool GetScale(char temp) int i,num,kbn_flg; char scalewidthWIDTH; char * s; bool flag; kbn_flg = 1; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 21 页 - - - - - - - - - flag = false; while (!flag) memset(scalewi
15、dth,0 x00,sizeof(scalewidth); memset(temp,0 x00,sizeof(temp); if (!GetData(scalewidth,WIDTH,kbn_flg) /*输入数据 */ return false; s = scalewidth; if (!strlen(s) /* 判断是否输入数据*/ CleanScreen(); printf(ERROR! Please input the scale(one of 2,8,10,16. Z for exit): n); continue; i = 0; while (*s) if (*s = CHAR_0
16、 & *s = CONST_2 & in_scale = CONST_10) & ( CHAR_0 = *s & *s in_scale + CHAR_0) inputdatai = *s; i+; s+; flag = true; else if (in_scale = CONST_16) & (CHAR_0 = *s & *s = CHAR_9) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 21 页 - - - - - - - - - | (CHAR_A = *
17、s & *s = in_scale + CHAR_A - CONST_10 - 1) | (CHAR_a = *s & *s (double)MAX) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 21 页 - - - - - - - - - CleanScreen(); printf(ERROR! The input is not available!Please input again(less than ); switch (in_scale) case CON
18、ST_2: printf(32 bits 1.); break; case CONST_8: printf(37777777777.); break; case CONST_10:printf(4294967295.); break; case CONST_16:printf(8 bits F or f.); break; printf( Z for exit): n); flag = false; continue; return true; /* 其他进制转换为十进制*/ double OtherToDeci(int scale_in,char inputdata) 名师资料总结 - -
19、-精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 21 页 - - - - - - - - - int i,len,midint; double middbl,temp; len = strlen(inputdata); temp = 0.00; for(i = 0;i len; i+) midint = inputdatai; if ( CHAR_0 = midint & midint = CHAR_9 ) midint = midint - CHAR_0; /*0-9*/ else if
20、( CHAR_A = midint & midint CONST_9) outputdatan = m + CHAR_A - CONST_10; else outputdatan = m + CHAR_0; deci = deci / scale_out; n+; for (m = 0; m = n / 2 - 1; m+) /*反序得到目标数据*/ char t; t = outputdatam; outputdatam = outputdatan - 1 - m; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理
21、 - - - - - - - 第 17 页,共 21 页 - - - - - - - - - outputdatan - 1 - m = t; outputdatan = 0; void PutSource(char inputdata) /* 输出源数据 */ int k; if (!strcmp(inputdata,STRING_0) /*源数据为 0*/ printf(The source data is: 0)n); else printf(The source data is: ); for( k = 0; k strlen(inputdata); k+ ) printf(%c,in
22、putdatak); printf()n); void ScaleChange(int scale_in,char inputdata,int scale_out,char outputdata) /* 进制转换 */ 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 21 页 - - - - - - - - - int k; unsigned long deci; deci = 0; if (scale_in = scale_out) /*原数据进制和目标数据进制相同,
23、不用转换 */ if (!strcmp(inputdata,STRING_0) printf(The object data is: n0n); else printf(The object data is: n); for( k = 0; k strlen(inputdata); k+ ) printf(%c,inputdatak); printf(n); PutSource(inputdata); else if (scale_in = CONST_10) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - -
24、 - - - - - 第 19 页,共 21 页 - - - - - - - - - deci = atol(inputdata); /* 源数据是十进制,直接转换为十进制数*/ else deci = (unsigned long)OtherToDeci(scale_in,inputdata); /*其他进制转换为十进制*/ if (scale_out = CONST_10) /*如果目标进制是十进制,直接输出十进制数 */ printf(The object data is: n%u n,deci); else if (!deci) /* 源数据为 0*/ printf(The objec
25、t data is: n0n); else 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 20 页,共 21 页 - - - - - - - - - DeciToOther(deci,scale_out,outputdata); /* 十进制转换为其他进制 */ printf(The object data is: n); /*输出转换后结果*/ for( k = 0; k strlen(outputdata); k+ ) printf(%c,outputdatak); printf(n); PutSource(inputdata); void CleanScreen() /* 清屏 */ static int errcount = 0; errcount+; if(!(errcount % CONST_3) errcount = 0; system(cls); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 21 页,共 21 页 - - - - - - - - -