欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOC文档下载  

    C任意进制转换程序.doc

    • 资源ID:5671629       资源大小:33.50KB        全文页数:20页
    • 资源格式: DOC        下载积分:4
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要4
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    C任意进制转换程序.doc

    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 csWIDTH; memset(cs,0x00,sizeof(cs); while(1) printf("-n"); printf(" Data Transform Between Two Scales n"); printf(" -n"); /*进制转换主函数*/ if(!Scale() break; printf("-n"); printf("input any key and 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) 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; memset(temparray,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(temparray,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; char 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 again(Z for exit): n"); /*输入进制或者源数据时,中间有空格,则重新输入*/ i = 0; icount = 0; spaceFlag = true; fflush(stdin); continue; else break; if (i = CONCOUNT - 1) /*判断是否输入数据过长*/ if (flg) CleanScreen(); printf("ERROR! Too many characters.Please input again(Z for exit): n"); memset(data,0x00,sizeof(data); fflush(stdin); i = 0; continue; else break; 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) return 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 = 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 && *s <= CHAR_9) /*判断是否输入整数*/ tempi = *s; i+; s+; flag = true; else CleanScreen(); printf("ERROR! 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 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 (!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(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 && *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; else CleanScreen(); printf("ERROR! The input is not available!Please input again(Z for exit):n"); 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("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) 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 ( CHAR_A <= midint && midint <= CHAR_Z ) midint = midint - CHAR_A + CONST_10; /*A-Z*/ else midint = 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 - 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; 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",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"); 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) 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 object data is: n0n"); else 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");

    注意事项

    本文(C任意进制转换程序.doc)为本站会员(罗晋)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开