代码:由于主代码文件过长,将函数放至jinzhi.h头文件中,头文件中代码如下:
//输出数组
void chu(char c[]){

int j;
for(j=0;c[j]!='\0';j++)
putchar(c[j]);
printf(\公众\n\"大众);
}
//判断为几进制
int panduan(char c[]){
int s;
if(c[0]=='0'){
if(c[1]=='x')
s=16;
else
s=8;
}
else
s=10;
return s;
}
//输出是几进制
void chus(int s){
switch(s){
case 8:printf(\"大众\n这是八进制\n\公众);break;
case 10:printf(\"大众\n这是十进制\n\"大众);break;
case 16:printf(\公众\n这十六进制\n\"大众);break;
}
}
//滤去八进制的造孽字符
int bj(char c[]){
int j,k,m,s=0;
int a[80];
k=0;
for(j=0;c[j]!='\0';j++)
if(c[j]>='0'&&c[j]<='7'){
a[k]=c[j];
k++;
}
a[k]='\0';
printf(\公众滤去造孽字符后,八进制为:\公众);
for(m=0;a[m]!='\0';m++)
putchar(a[m]);
printf(\公众\n\"大众);
printf(\"大众\n\公众);
for(m=0;a[m]!='\0';m++)
s=s8+a[m]-'0';
return s;
}
int sj(char c[]){
int j,k,m,s=0;
int a[80];
k=0;
for(j=0;c[j]!='\0';j++)
if(c[j]>='0'&&c[j]<='9'){
a[k]=c[j];
k++;
}
a[k]='\0';
printf(\"大众滤去造孽字符后,十进制为:\"大众);
for(m=0;a[m]!='\0';m++)
putchar(a[m]);
printf(\"大众\n\"大众);
printf(\"大众\n\公众);
for(m=0;a[m]!='\0';m++)
s=s10+a[m]-'0';
return s;
}
//滤去十六进制的造孽字符
int lj(char c[]){
int j,k,m,s=0;
int a[80];
k=0;
for(j=0;c[j]!='\0';j++)
if(c[j]>='0'&&c[j]<='9'||c[j]>='a'&&c[j]<='f'||c[j]>='A'&&c[j]<='F')
{
a[k]=c[j];
k++;
}
a[k]='\0';
printf(\"大众滤去造孽字符后,十六进制为:\"大众);
for(m=0;a[m]!='\0';m++)
putchar(a[m]);
printf(\"大众\n\"大众);
printf(\"大众\n\公众);
for(m=0;a[m]!='\0';m++){
if(a[m]>='0'&&a[m]<='9')
s=s16+a[m]-'0';
else if(a[m]>='A'&&a[m]<='Z')
s=s16+a[m]-'A'+10;
else if(a[m]>='a'&&a[m]<='z')
s=s16+a[m]-'a'+10;
}
return s;
}
//十进制转为八进制
void zhuanba(int ba){
int m=0,j;
int s=ba;
int d[80];
printf(\"大众其转换成八进制为:0\"大众);
while(s>0){
d[m]=s%8;
m++;
s=s/8;
}
d[m]='\0';
for(j=m-1;j>=0;j--)
printf(\"大众%d\"大众,d[j]);
printf(\"大众\n\"大众);
}
//十进制转为二进制
void zhuaner(int ba){
int m=0,j;
int s=ba;
int d[80];
printf(\"大众其转换成二进制为:\公众);
while(s>0){
d[m]=s%2;
m++;
s=s/2;
}
d[m]='\0';
for(j=m-1;j>=0;j--)
printf(\公众%d\"大众,d[j]);
printf(\公众\n\公众);
}
//十进制转为十六进制
void zhuanshiliu(int ba){
int m=0,j;
int g=ba;
int e[80];
printf(\公众其转换成十六进制为:0x\"大众);
while(g>0){
e[m]=g%16;
m++;
g=g/16;
}
e[m]='\0';
for(j=m-1;j>=0;j--)
if(e[j]==10)
printf(\公众a\"大众);
else if(e[j]==11)
printf(\公众b\"大众);
else if(e[j]==12)
printf(\公众c\公众);
else if(e[j]==13)
printf(\"大众d\"大众);
else if(e[j]==14)
printf(\公众e\"大众);
else if(e[j]==15)
printf(\"大众f\"大众);
else
printf(\"大众%d\公众,e[j]);
printf(\"大众\n\"大众);
}
//选择转换成几进制
void zhuanhuan(int ba){
int n;
while(n){
printf(\"大众叨教要转换成几进制?\n\t输入 2 转换为二进制\n\t输入 8表示转换为八进制\n\t输入 10 表示转换为十进制\n\t输入 16 转换为十六进制\n\t输入 0 退出转换\n\"大众);
scanf(\"大众%d\"大众,&n);
switch(n){
case 0:printf(\"大众退出转换\"大众);break;
case 10:printf(\"大众其转换为十进制为:%d\n\"大众,ba);break;
case 8:zhuanba(ba);break;
case 2:zhuaner(ba);break;
case 16:zhuanshiliu(ba);break;
default:break;
}
}
}
主文件中代码如下:
#include <stdio.h>
#include <string.h>
#include <jinzhi.h>
main(){
char c[80];
int i;
int s,shi,shiliu,ba;
printf(\"大众请输入要转换的数字:\"大众);
for(i=0;i<80;i++)
if((c[i]=getchar())=='\n')
break;
c[i]='\0';//i为字符长度
printf(\"大众您输入的是:\"大众);
chu(c);//输出字符数组
s=panduan(c);//判断进制
chus(s);//输出是几进制
//滤去各进制中的造孽字符
switch(s){
case 8:
ba=bj(c);
zhuanhuan(ba);
break;
case 16:
shiliu=lj(c);zhuanhuan(shiliu);
break;
default:
shi=sj(c);zhuanhuan(shi);
break;
}
system(\公众pause\"大众);
}
运行结果: