一.运行截图
一.二进制

二.八进制

三.十进制

四.十六进制

五.运行失败

二.函数介绍
一.
void Change2(long long int a,char b[],int n)//十进制转其他进制 ,n表示哪个进制转换成十进制
{
int i=0;
int c;
while(a>0){
c=a%n;
if(c>=10) b[i]=(c-10)+'a';
else b[i]=c+'0';
a=a/n;
++i;
}
b[i]='\0';
}
二.
long long int Change(char a[],int n)//十进制转其他进制 ,n表示哪个进制转换成十进制
{
long long int sum=0;
for(int i=0;i<strlen(a);i++)
{
if(a[i]>='a')
sum=sum*n+(a[i]-'a'+10);
else sum=sum*n+(a[i]-'0');
}
return sum;
}
三.
void Main()//主菜单
{
printf("请选择你要输入的进制数:\n");
printf("1.二进制\n");
printf("2.八进制\n");
printf("3.十进制\n");
printf("4.十六进制\n");
printf("请输入:");
}
四.
int Check(char a[],int n)//检查数据是否错误
{
int flag=0;
for(int i=0;i<strlen(a);i++)
{
if(n==16)
{
if((a[i]<='9'&&a[i]>='0')||(a[i])>='a'&&a[i]<='f') flag=1;
else return 0;
}
if(n==2)
{
if(a[i]<='1'&&a[i]>='0') flag=1;
else return 0;
}
if(n==8)
{
if(a[i]<='7'&&a[i]>='0') flag=1;
else return 0;
}
}
return 1;
}
三.main函数
int main()
{
int n;
long long int a;
char b[100];
char c[100];
Main();
scanf("%d",&n);
switch(n)
{
case 1:
printf("请输入数值:");
scanf("%s",b);
if(!Check(b,2)) //判断数据是否符合要求
{
printf("数据错误");
break;
}
a=Change(b,2);
printf("十进制:%lld\n",a);
Change2(a,c,8);
printf("八进制:");
Print(c);
Change2(a,c,16);
printf("十六进制:");
Print(c);
break;
case 2:
printf("请输入数值:");
scanf("%s",b);
if(!Check(b,8)) //判断数据是否符合要求
{
printf("数据错误");
break;
}
a=Change(b,8);
printf("十进制:%lld\n",a);
Change2(a,c,2);
printf("二进制:");
Print(c);
Change2(a,c,16);
printf("十六进制:");
Print(c);
break;
case 3:
printf("请输入数值:");
scanf("%lld",&a);
Change2(a,c,2);
printf("二进制:");
Print(c);
printf("八进制:");
Change2(a,c,8);
Print(c);
Change2(a,c,16);
printf("十六进制:");
Print(c);
break;
case 4:
printf("请输入数值:");
scanf("%s",b);
if(!Check(b,16)) //判断数据是否符合要求
{
printf("数据错误");
break;
}
a=Change(b,16);
printf("十进制:%lld\n",a);
Change2(a,c,2);
printf("二进制:");
Print(c);
Change2(a,c,8);
printf("八进制:");
Print(c);
break;
}
return 0;
}
四.思维导图

五.遇到的问题
1.制作主菜单函数,一开始没有思路,不知道void函数的意思
后向学长请教,制作出了主菜单。
2.本来想写各种进制互转,写没多久觉得各种进制互转的话太复杂也写的很乱。
后面百度了一下,改变了自己的思路,写成二八十六进制转换为十进制,再十进制转化为各种进制。
3.对数组的运用很不熟练,一开始基本上写不出来。后面自己看书上例题,向学长请教,才慢慢可以自己写出来。
六.代码互评
刘炜
int main()
{
int N, b;
char a[20]; //定义数组(用来以字符串的形式存放转化数 )
printf("请输入待转换数字的进制:");
scanf("%d", &N);
if(N!=2&&N!=8&&N!=10&&N!=16)//判断
{
printf("错误!该进制无法转换。");
return 0;
}
printf("请输入待转换数字:");
getchar();//将转化数存入数组
gets(a); //将输入的n进制数存放在数组a中
int m = Numberchange10(a, N); //将输入数转换为10进制
printf("请输入需转化的进制数:");
scanf("%d", &b);
if(b!=2&&b!=8&&b!=10&&b!=16)//判断
{
printf("错误!该进制无法转换。");
return 0;
}
printf("转换的结果为:");
Numberchange(m, b);//执行函数输出10进制转换结果
printf("\n");
system("pause");//暂停等待用户信号
return 0;
}
代码的思路与我的差不多,我把判断错误给写成一个函数,他是直接在主函数里面进行判断,我比他多做了一个主菜单。
但他的代码看起来比我的更容易理解,能让使用者使用更方便。
六.总结
收获
1.进制转化一开始没有思路,靠看书上的例题才慢慢有思路。
2.对数组的运用变得有点熟练。
对函数的理解:
有些函数是可以不用返回值的,