C任意进制转换程序.docx

上传人:b****6 文档编号:6555955 上传时间:2023-01-07 格式:DOCX 页数:14 大小:16.83KB
下载 相关 举报
C任意进制转换程序.docx_第1页
第1页 / 共14页
C任意进制转换程序.docx_第2页
第2页 / 共14页
C任意进制转换程序.docx_第3页
第3页 / 共14页
C任意进制转换程序.docx_第4页
第4页 / 共14页
C任意进制转换程序.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

C任意进制转换程序.docx

《C任意进制转换程序.docx》由会员分享,可在线阅读,更多相关《C任意进制转换程序.docx(14页珍藏版)》请在冰豆网上搜索。

C任意进制转换程序.docx

C任意进制转换程序

C任意进制转换程序

C语言写的一个任意进制转换的程序,不使用库提供的转换函数./scale.cpp:

定义控制台应用程序的入口点。

//#include"stdafx.h"

#include

#include

#include

#include

#include#defineWIDTH10

#defineDATAWIDTH50

#defineMAX4294967295

#defineCONST_22

#defineCONST_33

#defineCONST_88

#defineCONST_99

#defineCONST_1010

#defineCONST_1616

#defineCHAR_0'0'

#defineCHAR_9'9'

#defineCHAR_A'A'

#defineCHAR_a'a'

#defineCHAR_Z'Z'

#defineCHAR_SPACE''

#defineSTRING_0"0"

#defineSTRING_Z"Z"boolScale();

boolGetSourceScale(int*scale_in);

boolGetObjectScale(int*scale_out);

doubleOtherToDeci(intscale_in,charinputdata[]);

voidDeciToOther(unsignedlongdeci,intscale_out,charoutputdata[]);

boolGetData(chardata[],intCONCOUNT,intflg);

boolGetScale(chartemp[]);

boolGetSource(intin_scale,charinputdata[]);

voidScaleChange(intscale_in,charinputdata[],intscale_out,charoutputdata[]);

voidCleanScreen();int_tmain(intargc,_TCHAR*argv[])

{intflg=0;

charcs[WIDTH];memset(cs,0x00,sizeof(cs));while

(1)

{

printf("-----------------------------------------------------------------\n");

printf("DataTransformBetweenTwoScales\n");

printf("----------------------------------------\n");/*进制转换主函数*/

if(!

Scale())

{

break;

}printf("-----------------------------------------------------------------\n");

printf("inputanykeyandpress'Enter'keytocontinue,'Z'forexit:

");

if(!

GetData(cs,WIDTH,flg))/*判断是否继续执行下一次转换*/

{

break;

}

system("cls");/*清屏*/

}return0;

}boolScale()

{

intscale_in,scale_out;

charinputdata[DATAWIDTH];

charoutputdata[DATAWIDTH];/*输入源数据进制*/

if(!

GetSourceScale(&scale_in))

{

returnfalse;

}/*输入源数据*/

if(!

GetSource(scale_in,inputdata))

{

returnfalse;

}/*输入目标数据进制*/

if(!

GetObjectScale(&scale_out))

{

returnfalse;

}/*进行进制转换*/

ScaleChange(scale_in,inputdata,scale_out,outputdata);returntrue;

}boolGetSourceScale(int*scale_in)/*输入源数据进制*/

{

chartemparray[WIDTH];memset(temparray,0x00,sizeof(temparray));printf("Inputsourcedatascaleandpress'Enter'key(oneof2,8,10,16.'Z'forexit):

\n");

if(!

GetScale(temparray))

{

returnfalse;

}

*scale_in=atoi(temparray);returntrue;

}boolGetObjectScale(int*scale_out)/*输入目标数据进制*/

{

chartemparray[WIDTH];memset(temparray,0x00,sizeof(temparray));printf("Inputobjectdatascaleandpress'Enter'key(oneof2,8,10,16.'Z'forexit):

\n");

if(!

GetScale(temparray))

{

returnfalse;

}

*scale_out=atoi(temparray);returntrue;

}boolGetData(chardata[],intCONCOUNT,intflg)/*输入数据*/

{

inti,icount;

charc;

char*p;

boolspaceFlag;i=0;

icount=0;

spaceFlag=true;

while((c=getchar())!

=0x0a)

{

if(spaceFlag&&c==CHAR_SPACE)/*去掉前空格*/

{

continue;

}if(!

spaceFlag&&c==CHAR_SPACE)/*去掉后空格*/

{

icount++;

continue;

}

elseif(icount>0)

{

if(flg)

{

CleanScreen();

printf("ERROR!

Pleaseinputagain('Z'forexit):

\n");/*输入进制或者源数据时,中间有空格,则重新输入*/

i=0;

icount=0;

spaceFlag=true;

fflush(stdin);

continue;

}

else

{

break;

}

}if(i==CONCOUNT-1)/*判断是否输入数据过长*/

{

if(flg)

{

CleanScreen();

printf("ERROR!

Toomanycharacters.Pleaseinputagain('Z'forexit):

\n");

memset(data,0x00,sizeof(data));

fflush(stdin);

i=0;

continue;

}

else

{

break;

}

}if(c==CHAR_0&&!

strcmp(data,STRING_0))

{

continue;

}data[i]=c;

i++;

spaceFlag=false;

}data[i]='\0';p=data;

if(*p==CHAR_0&&strlen(p)>1)

{

p++;

}

strcpy(data,p);if(strlen(data)&&!

strcmp(data,STRING_Z))

{

returnfalse;

}

returntrue;

}/*输入数据进制*/

boolGetScale(chartemp[])

{

inti,num,kbn_flg;

charscalewidth[WIDTH];

char*s;

boolflag;kbn_flg=1;

flag=false;while(!

flag)

{

memset(scalewidth,0x00,sizeof(scalewidth));

memset(temp,0x00,sizeof(temp));if(!

GetData(scalewidth,WIDTH,kbn_flg))/*输入数据*/

{

returnfalse;

}

s=scalewidth;if(!

strlen(s))/*判断是否输入数据*/

{

CleanScreen();

printf("ERROR!

Pleaseinputthescale(oneof2,8,10,16.'Z'forexit):

\n");

continue;

}i=0;

while(*s)

{

if(*s>=CHAR_0&&*s<=CHAR_9)/*判断是否输入整数*/

{

temp[i]=*s;

i++;

s++;

flag=true;

}

else

{

CleanScreen();

printf("ERROR!

Pleaseinputthescale(oneof2,8,10,16.'Z'forexit):

\n");

flag=false;

break;

}

}

temp[i]='\0';num=0;

if(flag)

{

num=atoi(temp);

if(!

(num==CONST_2||num==CONST_8||num==CONST_10||num==CONST_16))/*判断是否输入合法整数*/

{

CleanScreen();

printf("ERROR!

Pleaseinputthescale(oneof2,8,10,16.'Z'forexit):

\n");

flag=false;

}

}

}

returntrue;

}/*输入源数据*/

boolGetSource(intin_scale,charinputdata[])

{

inti,kbn_flg;

char*s;

charsourcedata[DATAWIDTH];

boolflag;kbn_flg=1;

flag=false;printf("Pleaseinputone%dscaledata('Z'forexit):

\n",in_scale);

while(!

flag)

{

memset(sourcedata,0x00,sizeof(sourcedata));

memset(inputdata,0x00,sizeof(inputdata));if(!

GetData(sourcedata,DATAWIDTH,kbn_flg))/*输入数据*/

{

returnfalse;

}

fflush(stdin);s=sourcedata;if(!

strlen(s))/*判断是否输入数据*/

{

CleanScreen();

printf("ERROR!

Theinputisnotavailable!

Pleaseinputagain('Z'forexit):

\n");

continue;

}i=0;

while(*s)/*判断是否输入合法数据*/

{

if((in_scale>=CONST_2&&in_scale<=CONST_10)&&(CHAR_0<=*s&&*s

{

inputdata[i]=*s;

i++;

s++;

flag=true;

}

elseif((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)))

{

inputdata[i]=*s;

i++;

s++;

flag=true;

}

else

{

CleanScreen();

printf("ERROR!

Theinputisnotavailable!

Pleaseinputagain('Z'forexit):

\n");

flag=false;

break;

}

}

inputdata[i]='\0';if(OtherToDeci(in_scale,inputdata)>(double)MAX)

{

CleanScreen();

printf("ERROR!

Theinputisnotavailable!

Pleaseinputagain(lessthan");

switch(in_scale)

{

caseCONST_2:

printf("32bits1.");

break;

caseCONST_8:

printf("37777777777.");

break;

caseCONST_10:

printf("4294967295.");

break;

caseCONST_16:

printf("8bitsForf.");

break;

}

printf("'Z'forexit):

\n");

flag=false;

continue;

}

}

returntrue;

}/*其他进制转换为十进制*/

doubleOtherToDeci(intscale_in,charinputdata[])

{

inti,len,midint;

doublemiddbl,temp;len=strlen(inputdata);

temp=0.00;for(i=0;i

{

midint=inputdata[i];if(CHAR_0<=midint&&midint<=CHAR_9)

{

midint=midint-CHAR_0;/*0-9*/

}

elseif(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;

}

returntemp;

}/*十进制转换为其他进制*/

voidDeciToOther(unsignedlongdeci,intscale_out,charoutputdata[])

{

intm,n;m=0;

n=0;while(deci)

{

m=deci%scale_out;

if(m>CONST_9)

{

outputdata[n]=m+CHAR_A-CONST_10;

}

else

{

outputdata[n]=m+CHAR_0;

}

deci=deci/scale_out;

n++;

}for(m=0;m<=n/2-1;m++)/*反序得到目标数据*/

{

chart;

t=outputdata[m];

outputdata[m]=outputdata[n-1-m];

outputdata[n-1-m]=t;

}

outputdata[n]='\0';

}voidPutSource(charinputdata[])/*输出源数据*/

{

intk;

if(!

strcmp(inputdata,STRING_0))/*源数据为0*/

{

printf("(Thesourcedatais:

0)\n");

}

else

{

printf("(Thesourcedatais:

");

for(k=0;k

{

printf("%c",inputdata[k]);

}

printf(")\n");

}

}voidScaleChange(intscale_in,charinputdata[],intscale_out,charoutputdata[])/*进制转换*/

{

intk;

unsignedlongdeci;deci=0;if(scale_in==scale_out)/*原数据进制和目标数据进制相同,不用转换*/

{

if(!

strcmp(inputdata,STRING_0))

{

printf("Theobjectdatais:

\n0\n");

}

else

{

printf("Theobjectdatais:

\n");

for(k=0;k

{

printf("%c",inputdata[k]);

}

printf("\n");

}

PutSource(inputdata);

}

else

{

if(scale_in==CONST_10)

{

deci=atol(inputdata);/*源数据是十进制,直接转换为十进制数*/

}

else

{

deci=(unsignedlong)OtherToDeci(scale_in,inputdata);/*其他进制转换为十进制*/

}if(scale_out==CONST_10)/*如果目标进制是十进制,直接输出十进制数*/

{

printf("Theobjectdatais:

\n%u\n",deci);

}

else

{

if(!

deci)/*源数据为0*/

{

printf("Theobjectdatais:

\n0\n");

}

else

{

DeciToOther(deci,scale_out,outputdata);/*十进制转换为其他进制*/printf("Theobjectdatais:

\n");/*输出转换后结果*/

for(k=0;k

{

printf("%c",outputdata[k]);

}

printf("\n");

}

}

PutSource(inputdata);

}

}voidCleanScreen()/*清屏*/

{

staticinterrcount=0;

errcount++;

if(!

(errcount%CONST_3))

{

errcount=0;

system("cls");

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1