一.运行截图

注释:正常操作由二进制数转换为八进制数。

注释:如果输入输出前后进制类型相同,输出输入的值。

注释:如果输入进制类型不是规则给定的,输出错误。

注释:如果输入进制类型不是规则给定的,输出错误。

注释:如果输入的数与该数进制类型不符,输出错误。
二.函数介绍
①二进制→八进制
void twoTOeight(int x){
if(x%10>1){
printf("ERROR!");
return;
}
int result1=0,result2=0,i=0,remainder;
while(x!=0){
remainder=x%10;
result1+=remainder*pow(2,i);
i++;
x=x/10;
}
i=1;
while(result1!=0){
result2+=(result1%8)*i;
result1=result1/8;
i=i*10;
}
printf("转换成功!\n结果为:%d",result2);
}
思路:首先判断输入的数是否合法,再将输入的数转为十进制,再转为八进制。
②二进制→十进制
void twoTOten(int x){
if(x%10>1){
printf("ERROR!");
return;
}
int result1=0,i=0,remainder;
while(x!=0){
remainder=x%10;
result1+=remainder*pow(2,i);
i++;
x=x/10;
}
printf("转换成功!\n结果为:%d",result1);
}
思路:首先判断输入的数是否合法,再将输入的数转为十进制。
③八进制→二进制
void eightTOtwo(int x){
if(x%10>7){
printf("ERROR!");
return;
}
int result1=0,result2=0,i=0,remainder;
while(x!=0){
remainder=x%10;
result1+=remainder*pow(8,i);
i++;
x=x/10;
}
i=1;
while(result1!=0){
result2+=(result1%2)*i;
result1=result1/2;
i=i*10;
}
printf("转换成功!\n结果为:%d",result2);
}
思路:首先判断输入的数是否合法,再将输入的数转为十进制,再转为二进制。
④八进制→十进制
void eightTOten(int x){
if(x%10>7){
printf("ERROR!");
return;
}
int result1=0,i=0;
while(x!=0){
result1+=(x%10)*pow(8,i);
i++;
x=x/10;
}
printf("转换成功!\n结果为:%d",result1);
}
思路:首先判断输入的数是否合法,再将输入的数转为十进制。
⑤十进制→二进制
void tenTOtwo(int x){
int result1=0,i=1;
while(x!=0){
result1+=(x%2)*i;
x=x/2;
i=i*10;
}
printf("转换成功!\n结果为:%d",result1);
}
思路:直接由十进制转为二进制。
⑥十进制→八进制
void tenTOeight(int x){
int result1=0,i=1;
while(x!=0){
result1+=(x%8)*i;
x=x/8;
i=i*10;
}
printf("转换成功!\n结果为:%d",result1);
}
思路:直接由十进制转为八进制。
三.main函数
int main()
{
int system1,system2,x;
printf("输入待转换值为何进制数\n");
printf("二进制输入2;八进制输入8;十进制输入10\n");
printf("输入进制数:");
scanf("%d",&system1);
if(system1!=2&&system1!=8&&system1!=10){
printf("ERROR!");
return 0;
}
printf("输入转换后的数为何进制数\n");
printf("二进制输入2;八进制输入8;十进制输入10\n");
printf("输入进制数:");
scanf("%d",&system2);
if(system2!=2&&system2!=8&&system2!=10){
printf("ERROR!");
return 0;
}
printf("输入待转换数:");
scanf("%d",&x);
if(system1==2&&system2==8){
twoTOeight(x);
}
if(system1==2&&system2==10){
twoTOten(x);
}
if(system1==8&&system2==2){
eightTOtwo(x);
}
if(system1==8&&system2==10){
eightTOten(x);
}
if(system1==10&&system2==2){
tenTOtwo(x);
}
if(system1==10&&system2==8){
tenTOeight(x);
}
if(system1==system2){
printf("你想这么玩吗,那答案就是%d",x);
}
return 0;
}
四.思维导图

五.问题解答
问题①:如何使输入不合本程序规则的进制类型输出错误。如,输入七进制,输出ERROR!
解决方案:
scanf("%d",&system1);
if(system1!=2&&system1!=8&&system1!=10){
printf("ERROR!");
return 0;
}
若输入的值不是2或8或10,输出ERROR!
问题②:如何输入不符进制类型的待转换数输出错误。如,输入二进制,输入19,输出ERROR!
解决方案:
if(x%10>1){
printf("ERROR!");
return;
}
在每个函数之前(除10进制,系统已默认十进制所以不需要)加入该代码,二进制余数大于1,八进制余数大于7,即可满足要求。
六.代码互评
void Numchange(int m, int b)//将10进制数转化为任意进制数
{
int n = m;
int count = 0;
if (m == 0) printf("0");
while (n != 0)
{
n = n / b;
count++;
}
int number;
for (int i = count; i >= 1; i--)
{
number = m / (int)pow(b, i - 1);
if (number < 10) {
printf("%d", number);
}
else {
printf("%c", number + 55);
}
m = m % (int)pow(b, i - 1);
}
}
可以看出他的代码的范畴更广,不像我局限于指定由何进制转换为何进制,他的代码可以让10进制转换为任意进制,而其他的进制又比较容易转为十进制,可以看出这个代码已经基本完成了任意进制转换为任意进制,灵活性非常高,而这种灵活性是学习代码,使用代码所必要的,是我非常需要学习和改进的地方。
七.总结
1.学会如何从二进制转换为其他进制,反之亦然。
2.在代码互评中明白了代码不仅要对,还要活,这是我必然要学习的地方。
3.函数的应用使得我打代码时的思路更加的清晰,使主函数部分的代码变得清晰明朗,函数部分的代码也能更好的编写和体现。