C任意进制转换程序_第1页
C任意进制转换程序_第2页
C任意进制转换程序_第3页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

1、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 CON

2、ST_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

3、(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 sca

4、le_out,char outputdata);void CleanScreen(); int _tmain(int argc, _TCHAR* argv) int flg = 0;char csWIDTH; memset(cs,0x00,sizeof(cs); while(1) printf( );printf(" Data Transform Between Two Scales n");printf(n"); /*数*/if(!Scale() break;printf("n");printf("input any key and

5、 press 'Enter' key to continue, 'Z' for exit:");if(!GetData(cs,WIDTH,flg) /* 判断是否继续执行下一次转换 */ break; system("cls"); /* 清屏 */ return 0; bool Scale()int scale_in,scale_out;char inputdataDATAWIDTH;char outputdataDATAWIDTH; /* 输入源数据进制 */ if(!GetSourceScale(&scale_in)re

6、turn 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; memset(temparray,

7、0x00,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;*scale_in = atoi(temparray); return true; bool GetObjectScale(int * scale_out) /* 输入目标数据进制 */ char temparrayWIDTH; memset(t

8、emparray,0x00,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; bool GetData(char data,int CONCOUNT,int flg) /* 输入数据 */int i,icount;cha

9、r c;char *p;bool spaceFlag; i = 0;icount = 0;spaceFlag = true;while (c = getchar() != 0x0a)if (spaceFlag && c = CHAR_SPACE) /* 去掉前空格 */continue; if (!spaceFlag && c = CHAR_SPACE) /* 去掉后空格 */icount+;continue;else if (icount > 0)if (flg)CleanScreen();printf("ERROR! Please input

10、 again('Z' for exit): n"); /* 输入进 制或者源数据时,中间有空格,则重新输入 */i = 0;icount = 0; spaceFlag = true;fflush(stdin); continue; elsebreak; if (i = CONCOUNT - 1) /* 判断是否输入数据过长 */if (flg)CleanScreen();printf("ERROR! Too many characters.Please input again('Z' for exit): n");memset(da

11、ta,0x00,sizeof(data);fflush(stdin);i = 0; continue;elsebreak; if (c = CHAR_0 && !strcmp(data,STRING_0) 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,STRING_Z) retu

12、rn false;return true; /* 输入数据进制 */bool GetScale(char temp)int i,num,kbn_flg;char scalewidthWIDTH;char * s;bool flag; kbn_flg = 1;flag = false; while (!flag) memset(scalewidth,0x00,sizeof(scalewidth); memset(temp,0x00,sizeof(temp); if (!GetData(scalewidth,WIDTH,kbn_flg) /* 输入数据 */return false;s = sca

13、lewidth; 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 && *s <= CHAR_9) /* 判断是否输入整数 */ tempi = *s; i+;s+;flag = true;elseCleanScreen();printf("ERR

14、OR! Please input the scale(one of 2,8,10,16. 'Z' for exit): n");flag = false;break;tempi = '0' num = 0;if (flag)num = atoi(temp);if (!(num = CONST_2 | num = CONST_8 | num = CONST_10 | num = CONST_16) /* 判断是否输入合法整数 */CleanScreen();printf("ERROR! Please input the scale(one of

15、 2,8,10,16. 'Z' for exit): n");flag = false;return true; /* 输入源数据 */bool GetSource(int in_scale,char inputdata)int i,kbn_flg;char * s;char sourcedataDATAWIDTH;bool flag; kbn_flg = 1;flag = false; printf("Please input one %d scale data('Z' for exit): n",in_scale);while

16、(!flag) memset(sourcedata,0x00,sizeof(sourcedata);memset(inputdata,0x00,sizeof(inputdata); if(!GetData(sourcedata,DATAWIDTH,kbn_flg) /* 输入数据 */ return false;fflush(stdin); s = sourcedata; if (!strlen(s) /* 判断是否输入数据 */CleanScreen();printf("ERROR! The input is not available!Please input again(

17、9;Z' for exit): n");continue; i = 0;while(*s) /* 判断是否输入合法数据 */if (in_scale >= 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 &&

18、 *s <= CHAR_9)| (CHAR_A <= *s && *s <= in_scale + CHAR_A - CONST_10- 1)| (CHAR_a <= *s && *s <= in_scale + CHAR_a - CONST_10- 1)inputdatai = *s;i+;s+;flag = true;elseCleanScreen();printf("ERROR! The input is not available!Please input again('Z' for exit):n

19、");flag = false;break;inputdatai = '0' if (OtherToDeci(in_scale,inputdata) > (double)MAX)CleanScreen();printf("ERROR! The input is not available!Please input again(less than ");switch (in_scale)case CONST_2: printf("32 bits 1."); break;case CONST_8: printf(".

20、");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) int i,len,midint;double middbl

21、,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 ( CHAR_A <= midint && midint <= CHAR_Z ) midint = midint - CHAR_A + CONST_10; /*A-Z*/ elsemidin

22、t = midint - CHAR_a + CONST_10; /*a-z*/ middbl = midint * pow(scale_in,len-i-1); temp = temp + middbl;return temp; /* 十进制转换为其他进制 */void DeciToOther(unsigned long deci,int scale_out,char outputdata)int m,n; m = 0;n = 0; while (deci) m = deci % scale_out;if (m > CONST_9)outputdatan = m + CHAR_A - C

23、ONST_10;elseoutputdatan = m + CHAR_0;deci = deci / scale_out;n+; for (m = 0; m <= n / 2 - 1; m+) /* 反序得到目标数据 */ char t;t = outputdatam;outputdatam = outputdatan - 1 - m; outputdatan - 1 - m = t; outputdatan = '0' void PutSource(char inputdata) /* 输出源数据 */ int k;if (!strcmp(inputdata,STRIN

24、G_0) /* 源数据为 0*/ printf("(The source data is: 0)n");else printf("(The source data is: ");for( k = 0; k < strlen(inputdata); k+ ) printf("%c",inputdatak); printf(")n"); void ScaleChange(int scale_in,char inputdata,int scale_out,char outputdata) /* 进制转换 */ int k;unsigned long deci; deci = 0; if (scale_in = scale_out) /* 原数 据进制和目标数据进制相同 ,不用转换 */if (!strcmp(inputdata,STRING_0)printf("The object data is: n0n");elseprintf("The object data is:

温馨提示

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

最新文档

评论

0/150

提交评论