一、程序运行截图
2------>8

2----->10

2------->16

8-------->2

8------>10

8--->16

10---->2

10------>8

10------->16

输入无效,重新输入

二、拓展功能
1.可以实现十六进制的转换。(其他的转十六进制可以转,但十六进制转成其他的还没写好)
2.可以实现有符号数和无符号数的进制转换(有bug还没调好)
3.输入无效时可以重新输入。
三、函数介绍
1.
int number_2()//输入一个二进制函数
{
int result;
part1:printf("请输入二进制数:");
scanf_s("%d", &result);
for (int i = result;i > 0;i=i / 10)
{
if (i % 10 > 1)
{
printf("这是无效的二进制,请重新输入\n");
goto part1;
}
}
return result;
}
输入一个二进制数,返回一个二进制数。
2.
int choose()//选择要二进制转换的进制
{
int result;
printf("请选择当前要转换的进制\n");
printf("二进制【1】\n");
printf("八进制【2】\n");
printf("十进制【3】\n");
printf("十六进制【4】\n");
printf("你的选择: ");
scanf_s("%d", &result);
return result;
}
3.
int two_to_others(int number_2, int choose)//二进制!!!!!!
{
int sum = 0, t = 0;
if (choose == 1) //二进制:输入1(二进制),则仍然是二进制输出;
{
if (number_2 == 0)
printf("%04d", number_2);
return number_2;
}
if (choose == 2)//二进制:输入2(八进制),则取三合一,每三位按权相加,如:110=0*1+1*2+1*4=6,按权相加的方式可以将那三位转为十进制,
{ //可以理解为那三位二进制转为十进制
if (number_2 == 0)
printf("%d", number_2);
while (number_2 > 0)
{
sum = sum + two_to_others((number_2 % 1000), 3) * pow(10, t);
number_2 = number_2 / 1000;
t++;
}
return sum;
}
if (choose == 3)//二进制转十进制,按权相加。
{
if (number_2 == 0)
printf("%d", number_2);
while (number_2 > 0)
{
sum += (number_2 % 10) * pow(2, t);
number_2 /= 10;
t++;
}
return sum;
}
if (choose == 4)//二进制转十六进制,取四合一法:每四位转成十进制数,再转成十六进制数
{
char str[80];
int i = 0;
while (number_2 > 0)
{
char a = two_to_others((number_2 % 10000), 3);
if (a >= 10 && a <= 15)
a = a+55;
if (a >= 0 && a <= 9)
a = a + 48;
str[i] = a;
number_2 = number_2 / 10000;
i++;
}
str[i] = '\0';
for (int j = i - 1;j >= 0;j--)
printf("%c", str[j]);
return 0;
}
}
第一个形参是输入的二进制数,第二个形参是选择转换的进制数。
每一种转换都有相应的方法。
4.
int main()
{
int first,sum;
printf("欢迎使用进制转换器\n");
printf("请选择当前要被转换的进制\n");
printf("二进制【1】\n");
printf("八进制【2】\n");
printf("十进制【3】\n");
printf("十六进制【4】\n");
printf("你的选择:");
scanf_s("%d", &first);
switch (first)
{
case 1:
{
sum = two_to_others(number_2(), choose());
if (sum != 0)
printf("%d", sum);
}
break;
case 2:
{
sum=eight_to_others(number_8(), choose());
if (sum != 0)
printf("%d", sum);
}
break;
case 3:
{
sum = ten_to_others(number_10(), choose());
if(sum!=0)
printf("%d", sum);
}
break;
case 4:printf("对不起,还没有开通这项服务");break;
}
该函数是让用户选择要被转的进制数(first),然后使用switch函数,按first的值选择case.
四、思维导图(真就这么简单了)

五、遇到的问题
1、例如:switch中,我遇到了一个代号C2360的error,说明变量尽量不要在switch内定义,尽量在switch外部定义变量
2.在八进制转二进制时,取三位,不足三位则补零。于是采用%03d来写,但是第一项不需要补0;
解决:第一项单独输出,其余按%03d输出。
3.定义 char a=一个十进制数,此时a的值可以是asc2码的值,也可以是字符,如果要转换成十六进制数,则0~9,需a=a+48,使a=字符'a'(数字字符),10~15也类似。
六、
收获:1.觉得自己之前只顾着刷pta没有实战经验。现在实战,代码多,前后联系大,不免觉得有点吃力,因此以后觉得可以多实践多逛博客园看看其他人的经验
2. 觉得自己会的太少了
3.我要好好学习
对函数的理解:1.函数可以是有返回的(有数组,int,double 等类型),负责输入n个数进去,然后返回你想要的结果
2.无返回值可以用于打印输出等