题目:进制转换。综合前三,输入一个字符串,判断其为几进制,并根据输入转换成对应的数制。
代码:由于主代码文件过长,将函数放至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=s*8+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=s*10+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=s*16+a[m]-‘0’;
else if(a[m]>=’A’&&a[m]<=’Z’)
s=s*16+a[m]-‘A’+10;
else if(a[m]>=’a’&&a[m]<=’z’)
s=s*16+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”);
}
运行结果: