进制转换程序的说明本程序在进行转换时,支持Windows自带计算器中不具有的小数转换功能。整形数最大支持长整型数:-2147483648——2147483647,浮点型数:-1.7*10^-308——1.7*10^308.编译环境:VC++6.0;使用说明:运行界面:1.开始运行后:2.提示用户输入数据的进制类型,可以输入2、8、10、16选择相应的进制类型。当输入2、8、10、16之外的数据时,报错,并要求重新输入,这里以输入11为例。提示:3.当输入正确的进制,比如:2,则提示用户输入要转换的数。显示:4.如果输入数的不是用户首先输入的进制类型,则报错并要求重新输入。这里-456.89不是合法的二进制数,显示:5.当输入正确的进制时,如输入:-1010.0,提示用户想得到什么进制。显示:6.当输入的不是2、8、10、16时,报错,并要求重新输入。显示:7.输入支持的进制10时,得到结果。显示:8.提示用户是否继续,按Y继续,按N退出,按Y后,可以再次进行。显示:9.按N后,则退出程序。源代码:#includestdio.h#includemath.h#includestring.h#defineM100#definePprintf#defineSscanf#definePFprintf(***************************************************************\n)chars[M];intk,x1=0,x2=0,p=-1,q=-1,s1[M]={0},s2[M]={0};charsk[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};intn_input()/*该函数用于输入要转换的数的进制类型*/{intn,leap;leap=1;while(leap){PF;P(Theoriginaldisablestypeis:);S(%d,&n);if(n!=2&&n!=8&&n!=10&&n!=16)/*判断n是否是2、8、10、16中的一个,不是则提示错误并要求重新输入*/{P(Wrong!pleaseinputthe2,8,10,16anumber.\n);continue;}elsebreak;}return(n);}intm_input()/*输入想得到的进制类型*/{intm,leap;leap=1;while(leap){PF;P(Wanttogetintothesystemtypeis:);S(%d,&m);if(m!=2&&m!=8&&m!=10&&m!=16)/*判断m是否是2、8、10、16中的一个,不是则提示错误并要求重新输入*/{P(Wrong!pleaseinputthe2,8,10,16anumber.\n);continue;}elsebreak;}return(m);}voidshuchu(intn,intm)/*提示用户是从什么进制转换到什么进制*/{PF;P(Is%d-%d\n,n,m);return;}intf_to_i(intp,intq)/*把字符型数据变为整形数据*/{inti,j;if(q!=-1)/*如果是有负号并且小数点后面有数字时,按该种转换方式*/{if(p!=-1)for(i=q-1,j=0;i0;i--,j++)/*把小数点前的字符型转变为整形数,并放入数组s1中*/{if(s[i]='0'&&s[i]='9')s1[j]=s[i]-'0';elseif(s[i]='A'&&s[i]='F')s1[j]=s[i]-'7';elses1[j]=s[i]-'W';x1=j;}elsefor(i=q-1,j=0;i=0;i--,j++)/*把小数点前的字符型转变为整形数,并放入数组s1中*/{if(s[i]='0'&&s[i]='9')s1[j]=s[i]-'0';elseif(s[i]='A'&&s[i]='F')s1[j]=s[i]-'7';elses1[j]=s[i]-'W';x1=j;}for(i=q+1,j=0;ik;i++,j++)/*把小数点后的字符型转变为整形数,并放入数组s2中*/{if(s[i]='0'&&s[i]='9')s2[j]=s[i]-'0';elseif(s[i]='A'&&s[i]='F')s2[j]=s[i]-'7';elses2[j]=s[i]-'W';x2=j;}}elseif(p!=-1)/*有负号的整数时,按该种转换方式*/for(i=k-1,j=0;i0;i--,j++){if(s[i]='0'&&s[i]='9')s1[j]=s[i]-'0';elseif(s[i]='A'&&s[i]='F')s1[j]=s[i]-'7';elses1[j]=s[i]-'W';x1=j;}else/*无负号并且无小数点时,按该种转换方式*/for(i=k-1,j=0;i=0;i--,j++){if(s[i]='0'&&s[i]='9')s1[j]=s[i]-'0';elseif(s[i]='A'&&s[i]='F')s1[j]=s[i]-'7';elses1[j]=s[i]-'W';x1=j;}}chars_input(intn)/*输入并判断进制数*/{inti,j,x,y,leap;leap=1;p=-1;q=-1;loop:while(leap){x=0;y=0;PF;P(PleaseinputtothetransformationofseveralS:);S(%s,s);k=strlen(s);/*统计输入的字符个数*/for(i=0;ik;i++){switch(n){case2:if(s[i]!='0'&&s[i]!='1'&&s[i]!='.'&&s[i]!='-'){P(InputSnotbinarynumber.\n);leap=1;gotoloop;}case8:if((s[i]='0'&&s[i]='7')||s[i]=='-'||s[i]=='.')break;else{P(InputSnotoctalnumber.\n);leap=1;gotoloop;}case10:if((s[i]='0'&&s[i]='9')||s[i]=='-'||s[i]=='.')break;else{P(InputSnotdecimalnumber.\n);leap=1;gotoloop;}case16:if((s[i]='0'&&s[i]='9')||(s[i]='a'&&s[i]='f')||(s[i]='A'&&s[i]='F')||s[i]=='-'||s[i]=='.')break;else{P(InputSnothexnumber.\n);leap=1;gotoloop;}}if(s[i]=='-'){x++;p=i;}elseif(s[i]=='.'){y++;q=i;}elseleap=0;}if(x1||y1){P(InputSnotbinarynumber.\n);leap=1;continue;}if(p!=1&&q!=-1&&pq){P(InputSnotbinarynumber.\n);leap=1;continue;}}f_to_i(p,q);}intexport1(intstr1[],inty1,intstr2[],inty2)/*非十进制输出函数*/{inti;PF;P(Outcomeis:);if(p==-1&&q==-1){for(i=y1;i=0;i--)P(%c,sk[str1[i]]);}elseif(p!=-1&&q==-1){P(-);for(i=y1;i=0;i--)P(%c,sk[str1[i]]);}elseif(p==-1&&q!=-1){for(i=y1;i=0;i--)P(%c,sk[str1[i]]);P(.);for(i=0;i=y2;i++)P(%c,sk[str2[i]]);}else{P(-);for(i=y1;i=0;i--)P(%c,sk[str1[i]]);P(.);for(i=0;i=y2;i++)P(%c,sk[str2[i]]);}P(\n);PF;}intexport2(longinty1,doubley2)/*十进制数输出函数*/{PF;P(Outcomeis:);if(p==-1&&q==-1){P(%ld,y1);}elseif(p!=-1&&q==-1){P(-);P(%ld,y1);}elseif(p==-1&&q!=-1){P(%f,y1+y2);}else{P(-);P(%f,y1+y2);}P(\n);PF;}intb_to_q()/*二进制到八进制*/{inti,j,k,y1,y2,a[3]={0},str1[M]={0},str2[M]={0};for(i=0,j=0;ix1;j++){str1[j]=s1[i++]*1;str1[j]+=s1[i++]*2;str1[j]+=s1[i++]*2*2;y1=j;}for(i=0,j=0;ix2;j++){for(k=0;k3;i++,k++)a[k]=s2[i];str2[j]=a[--k]*1;str2[j]+=a[--k]*2;str2[j]+=a[--k]*2*2;y2=j;}export1(str1,y1,str2,y2);}doublebqh_to_d(intx)/*由于二进制,八进制,十六进制到十进制的算法相同,故用一个函数*/{inti;longinty1;doubley2;y1=0;y2=0;for(i=0;i=x1;i++)y1+=s1[i]*pow(x,i);for(i=0;i=x2;i++)y2+=s2[i]*pow(x,-(i+1));export2(y1,y2);}intb_to_h(){inti,j,k,y1,y2,a[4],str1[M]={0},str2[M]={0};for(i=0,j=0;i=x1;j++){str1[j]=s1[i++]*1;str1[j]+=s1[i++]*2;str1[j]+=s1[i++]*2*2;str1[j]+=s1[i++]*2*2*2;y1=j;}for(i=0,j=0;i=x2;j++){for(k=0;k4;i++,k++)a[k]=s2[i];str2[j]=a[--k]*1;str2[j]+=a[--k]*2;str2[j]+=a[--k]*2*2;str2[j]+=a[--k]*2*2*2;y2=j;}export1(str1,y1,str2,y2);}intq_to_b()/*八进制到二进制*/{inti,j,k,y1,y2,a[3],str1[M]={0},str2[M]={0};for(i=0,j=0;i=x1;i++){for(k=0;k3;k++){a[k]=s1[i]%2;s1[i]/=2;}str1[j++]=a[k-3];str1[j++]=a[k-2];str1[j++]=a[k-1];y1=j-1;}for(i=0,j=0;i=x2;i++){for(k=0;k3;k++){a[k]=s2[i]%2;s2[i]/=2;}str2[j++]=a[--k];str2[j++]=a[--k];str2[j++]=a[--k];y2=j-1;}export1(str1,y1,str2,y2);}intq_to_h()/*八进制到十六进制*/{inti,j,k,y1,y2,a[3],str1[M]={0},str2[M]={0},str3[M]={0},str4[M]={0};for(i=0,j=0;i=x1;i++)/*先转为二进制*/{for(k=0;k3;k++){a[k]=s1[i]%2;s1[i]/=2;}s