C任意进制转换程序Word下载.docx
- 文档编号:19569713
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:14
- 大小:16.83KB
C任意进制转换程序Word下载.docx
《C任意进制转换程序Word下载.docx》由会员分享,可在线阅读,更多相关《C任意进制转换程序Word下载.docx(14页珍藏版)》请在冰豆网上搜索。
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"
);
DataTransformBetweenTwoScales\n"
----------------------------------------\n"
/*进制转换主函数*/
if(!
Scale())
break;
}printf("
inputanykeyandpress'
Enter'
keytocontinue,'
forexit:
"
GetData(cs,WIDTH,flg))/*判断是否继续执行下一次转换*/
}
system("
cls"
/*清屏*/
}return0;
}boolScale()
intscale_in,scale_out;
charinputdata[DATAWIDTH];
charoutputdata[DATAWIDTH];
/*输入源数据进制*/
GetSourceScale(&
scale_in))
returnfalse;
}/*输入源数据*/
GetSource(scale_in,inputdata))
}/*输入目标数据进制*/
GetObjectScale(&
scale_out))
}/*进行进制转换*/
ScaleChange(scale_in,inputdata,scale_out,outputdata);
returntrue;
}boolGetSourceScale(int*scale_in)/*输入源数据进制*/
chartemparray[WIDTH];
memset(temparray,0x00,sizeof(temparray));
printf("
Inputsourcedatascaleandpress'
key(oneof2,8,10,16.'
forexit):
\n"
GetScale(temparray))
*scale_in=atoi(temparray);
}boolGetObjectScale(int*scale_out)/*输入目标数据进制*/
Inputobjectdatascaleandpress'
*scale_out=atoi(temparray);
}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++;
elseif(icount>
0)
if(flg)
CleanScreen();
ERROR!
Pleaseinputagain('
/*输入进制或者源数据时,中间有空格,则重新输入*/
i=0;
fflush(stdin);
else
}if(i==CONCOUNT-1)/*判断是否输入数据过长*/
Toomanycharacters.Pleaseinputagain('
memset(data,0x00,sizeof(data));
}if(c==CHAR_0&
!
strcmp(data,STRING_0))
}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))
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))/*输入数据*/
s=scalewidth;
strlen(s))/*判断是否输入数据*/
Pleaseinputthescale(oneof2,8,10,16.'
}i=0;
while(*s)
if(*s>
=CHAR_0&
*s<
=CHAR_9)/*判断是否输入整数*/
temp[i]=*s;
s++;
flag=true;
temp[i]='
num=0;
if(flag)
num=atoi(temp);
if(!
(num==CONST_2||num==CONST_8||num==CONST_10||num==CONST_16))/*判断是否输入合法整数*/
boolGetSource(intin_scale,charinputdata[])
inti,kbn_flg;
charsourcedata[DATAWIDTH];
Pleaseinputone%dscaledata('
in_scale);
while(!
memset(sourcedata,0x00,sizeof(sourcedata));
memset(inputdata,0x00,sizeof(inputdata));
if(!
GetData(sourcedata,DATAWIDTH,kbn_flg))/*输入数据*/
s=sourcedata;
Theinputisnotavailable!
Pleaseinputagain('
while(*s)/*判断是否输入合法数据*/
if((in_scale>
=CONST_2&
in_scale<
=CONST_10)&
(CHAR_0<
=*s&
in_scale+CHAR_0))
inputdata[i]=*s;
elseif((in_scale==CONST_16)
((CHAR_0<
=CHAR_9)
||(CHAR_A<
=in_scale+CHAR_A-CONST_10-1)
||(CHAR_a<
=in_scale+CHAR_a-CONST_10-1)))
\n"
inputdata[i]='
if(OtherToDeci(in_scale,inputdata)>
(double)MAX)
Pleaseinputagain(lessthan"
switch(in_scale)
caseCONST_2:
32bits1."
caseCONST_8:
37777777777."
caseCONST_10:
4294967295."
caseCONST_16:
8bitsForf."
}/*其他进制转换为十进制*/
doubleOtherToDeci(intscale_in,charinputdata[])
inti,len,midint;
doublemiddbl,temp;
len=strlen(inputdata);
temp=0.00;
for(i=0;
i<
len;
i++)
midint=inputdata[i];
if(CHAR_0<
=midint&
midint<
=CHAR_9)
midint=midint-CHAR_0;
/*0-9*/
elseif(CHAR_A<
=CHAR_Z)
midint=midint-CHAR_A+CONST_10;
/*A-Z*/
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;
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]='
}voidPutSource(charinputdata[])/*输出源数据*/
intk;
strcmp(inputdata,STRING_0))/*源数据为0*/
(Thesourcedatais:
0)\n"
"
for(k=0;
k<
strlen(inputdata);
k++)
%c"
inputdata[k]);
)\n"
}voidScaleChange(intscale_in,charinputdata[],intscale_out,charoutputdata[])/*进制转换*/
unsignedlongdeci;
deci=0;
if(scale_in==scale_out)/*原数据进制和目标数据进制相同,不用转换*/
strcmp(inputdata,STRING_0))
Theobjectdatais:
\n0\n"
PutSource(inputdata);
if(scale_in==CONST_10)
deci=atol(inputdata);
/*源数据是十进制,直接转换为十进制数*/
deci=(unsignedlong)OtherToDeci(scale_in,inputdata);
/*其他进制转换为十进制*/
}if(scale_out==CONST_10)/*如果目标进制是十进制,直接输出十进制数*/
\n%u\n"
deci);
deci)/*源数据为0*/
DeciToOther(deci,scale_out,outputdata);
/*十进制转换为其他进制*/printf("
/*输出转换后结果*/
strlen(outputdata);
outputdata[k]);
}voidCleanScreen()/*清屏*/
staticinterrcount=0;
errcount++;
(errcount%CONST_3))
errcount=0;
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 任意 转换 程序