


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025国家市场监督管理总局国家标准技术审评中心招聘高校应届毕业生(事业编)2人考前自测高频考点模拟试题附答案详解(完整版)
- 2025年泰和县上圯水厂面向社会公开招聘考前自测高频考点模拟试题及完整答案详解一套
- 2025广东汕尾市陆河县高校毕业生就业见习招募15人(第三批)模拟试卷附答案详解
- 2025江苏泰州市第四人民医院招聘高层次人才15人模拟试卷及完整答案详解一套
- 2025年职业培训服务项目合作计划书
- 2025福建福州市仓山区卫健系统招聘编内卫生专业技术人员31人考前自测高频考点模拟试题及答案详解(各地真题)
- 2025年德阳市事业单位公开考试招聘工作人员笔试模拟试卷及答案详解(历年真题)
- 2025年量热仪项目合作计划书
- 2025广东广州天河区童时光幼儿园招聘1人考前自测高频考点模拟试题及答案详解(各地真题)
- 2025湖南衡阳理工职业学院人才招聘4人模拟试卷及1套参考答案详解
- 支行日常巡检方案
- 网络安全威胁建模规范
- 2025年双鸭山宝清县公安局公开招聘留置看护队员100人工作考试考试参考试题及答案解析
- 统编版2025-2026学年语文六年级上册第一、二单元综合测试卷(有答案)
- 2025年国企面试题型及答案
- 5年(2021-2025)高考1年模拟物理真题分类汇编专题04 机械能守恒、动量守恒及功能关系(广东专用)(解析版)
- 石刻牌坊施工方案
- 2025陕西“坚持以教育家精神铸魂强师打造支撑教育强国的高素质专业化教师队伍”专题网络培训在线考试(基教)题答案
- T-CWAN 0166-2025 不锈钢波纹管非熔化极气体保护焊工艺规范
- 2025-2026浙教版(2024)七年级上册科学教学计划
- 2025年全国中小学生天文知识竞赛试题库
评论
0/150
提交评论